[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를 이용해 다양한 순회 방식을 지원하는 등 다양한 상황에 활용할 수 있습니다.

참고: Swift Design Patterns