본 내용은 Java언어로 배우는 디자인패턴 입문(한빛미디어) 책을 보면서 정리한 내용입니다.
소개
- 일반적인 여러 요소를 가지고 있는 객체를 순회 할 때, 보통 for문을 사용함.
- 그러나 배열 등 개수가 정해져 있는 객체를 순회할 때는 전체 길이를 넘어가는지 신경써줘야 함.
- 이러한 인덱스 사용의 위험성을 줄이기 위해서, for문 등의 반복문에서 i의 역할을 하는 객체를 만들어 순회를 추상화하고 일반화 시켜주는 패턴을 Iterator Pattern 이라고 함.
예제
- 서가(BookShelf) 객체에 책(Book)들이 있는 예제.
- BookShelf는 한 객체를 여러개 가질 수 있는 Aggregate 인터페이스를 구현
- Aggregate 인터페이스는 field로 Iterator를 가지고 있음.
- Iterator는 인터페이스로, 해당 인터페이스를 구현하면 hasNext() 메서드와 next() 메서드를 구현해야 함.
- hasNext()는 Aggregate 구현체의 구성요소를 더 순회할 수 있는지에 대해서 boolean 값을 반환함.
- next()는 Aggregate 구현체가 가지고 있는 다음 요소를 반환하는 메서드.
- 위의 UML에서 구체적인 예시의 Iterator Pattern을 확인 가능
정리
- Iterator의 역할
- 요소를 차례로 순회하는 인터페이스를 결정하는 역할을 함.
- 다음요소가 존재하는지 아는 hasNext() 메서드와 다음요소를 반환하는 next() 메서드를 가짐.
- Aggregate의 역할
- Iterator를 가지며, Iterator 구현체를 생성하는 역할을 함.
- ConcreteIterator의 역할
- Iterator를 실제로 구현하는 구현체의 역할을 함.
- ConcreteAggregate에 의해 생성됨.
- ConcreteAggregate의 역할
- Aggregate를 실제로 구현하는 구현체의 역할을 함.
- ConcreteIterator를 생성하며, 포함하고 있다.