반복자 패턴

컬렉션의 내부 구조를 노출하지 않고, 요소를 순차적으로 접근할 수 있게하는 패턴

  • 대다수의 프로그래밍 언어에서는 반복자 역할을 하는 라이브러리를 기본적으로 제공해주거나 언어 자체에서 제공됨

  • 배열인지, 맵인지, 리스트인지 알 필요없고 next(), hasNext() 같은 공통 인터페이스로 순회\

  • 순회 로직을 컬렉션과 분리하여 컬렉션 구조가 변경 되더라도 클라이언트 코드는 수정할 필요가 없음

    • 즉, 집합을 관리하는 역할 외 다른 역할(반복자 메서드) 책임을 분리하는것

  • 컬렉션과 순회 책임 분리하여 단일책임원칙 준수할수 있게됨

Iterator(반복자)

  • 프로그래밍에는 여러 데이터를 담을 수 있는 다양한 자료구조들이 존재 (배열, 맵, 리스트, 스택 등)

  • 각각 구조와 원리가 다르기 때문에, 이전 요소에서 다음 요소로 넘어가는 방법들이 다름

  • 반복자는 각 담당한 컬렉션에서 요소들을 하나씩 순회하는 역할을 맡음 (next, hasNext 기능 보유)

  • 반복자가 담당하는 기초적인 기능을 통해 다양한 컬렉션에 공통적으로 적용할 수 있는 여러 고급 기능을 구현할수있게됨

  • 컬렉션 전용 순회 문법, 각종 함수형 기능, 제너레이터 등 다양한 기능들이 이터레이터 기반으로 구현되어있음


1. Iterator 인터페이스

interface Iterator<T> {
  hasNext(): boolean
  next(): T
}

2. Concrete Iterator 실제 순회 구현

필요에 따라 컬렉션을 특정 방법으로 순회하는 반복자를 만들 수 있음

3. Aggregate 컬렉션 인터페이스

4. Concrete Aggregate 실제 컬렉션 구현

5. 클라이언트 코드

Last updated