[swift] Iterator 디자인 패턴을 활용한 컬렉션 순회
컬렉션 내 요소를 순회하고 접근하기 위해 Iterator 패턴을 활용할 수 있습니다. 이 패턴은 컬렉션 내부 구조에 대한 의존성 없이 요소에 접근할 수 있는 유연성을 제공합니다.
이점
Iterator 패턴의 주요 이점은 다음과 같습니다:
- 의존성 감소: 컬렉션의 내부 구조와 정확한 동작 방식에 대한 의존성을 줄입니다.
- 다양한 순회 방식: 컬렉션의 요소를 순회하는 다양한 방식을 쉽게 구현할 수 있습니다.
구현 예시
아래는 Swift에서 Iterator 패턴을 사용하여 컬렉션을 순회하는 간단한 예시입니다.
// Iterator 프로토콜 정의
protocol Iterator {
associatedtype T
func next() -> T?
func hasNext() -> Bool
}
// 컬렉션 정의
class ConcreteCollection<T> {
private var items: [T] = []
func add(item: T) {
items.append(item)
}
func iterator() -> Iterator<T> {
return ConcreteIterator(collection: self)
}
}
// Iterator 구현
class ConcreteIterator<T>: Iterator {
private var collection: ConcreteCollection<T>
private var index: Int = 0
init(collection: ConcreteCollection<T>) {
self.collection = collection
}
func next() -> T? {
if index < collection.items.count {
let item = collection.items[index]
index += 1
return item
}
return nil
}
func hasNext() -> Bool {
return index < collection.items.count
}
}
위 예시에서는 ConcreteCollection
클래스와 ConcreteIterator
클래스를 정의하여 Iterator 패턴을 구현했습니다. 이를 통해 컬렉션의 요소를 순회하고 접근할 수 있습니다.
결론
Iterator 패턴을 사용하면 다양한 컬렉션을 동일한 인터페이스로 순회할 수 있으며, 컬렉션과 순회 로직을 분리하여 유지보수성을 향상시킬 수 있습니다. 동일한 Iterator를 이용해 다양한 순회 방식을 지원하는 등 다양한 상황에 활용할 수 있습니다.