목적
- 객체들의 집합에 저장되어 있는 자료형과 관계없이 동일한 인터페이스를 이용한 접근
- 외부에 타입을 노출하지 않으면서 내부 요소에 접근이 필요한 경우, 자료구조 변경에 영향 없이 Item에 접근 가능
Use when
- 객체 내용을 알지 못하더라도 각 요소에 접근이 필요할 때
- 개체에 대한 순회가 필요한 경우
- 개체 순방을 위한 정형화된 인터페이스가 필요한 경우
구조 및 구성요소
- Client : Aggregate 객체를 생성하고 생성 된 ConcreateAggregate 객체로 부터 Iterator 를 받는다.
- Aggregate : Client에서 사용되는 인터페이스로 ConcreateAggregate 의 인터페이스 입니다.
- ConcreteAggreate : 실제 Client에서 접근하고자 하는 객체, createIterator 메서드를 통해 Client에게 Iterator를 전달합니다.
- Iterator : Client가 Aggregate 객체를 순방하기 위한 인터페이스
- ConcreteIterator : ConcreteAggregate가 iterator를 Client에 전달할 때 생성되는 객체.
간단히 구조를 풀어서 설명하면, Iterator를 사용하기 위해서 Client 는 ConcreateAggregate 객체를 가지고 있어야 하며, createIterator 메서드를 통해 ConcreateAggregate 에서 생성되는 Iterator를 전달받습니다. 이 때 전달은 생성 된 Iterator를 리턴 받음을 의미합니다.
대충 아래와 같은 느낌으로요.
Iterator = ConcreteAggregat.createIterator();
Iterator를 갖게 된 Client는 이제 hasNext, next메서드 사용이 가능해지며, 이를 통해서 ConcreteAggregate 의 객체를 순방(traverse)할 수 있게 됩니다.
어떻게 그렇게 되나면요, ConcreteAggregate 가 Iterator를 생성할 때, 자신이 가진 Array든.. List든.. 아무튼 가지고 있는 데이터들을 Iterator에 담아서 주기 때문입니다. Iterator는 생성 시점에 이 정보들을 설정하고 생성되기 때문에, Client는 Iterator만으로도 ConcreteAggregate 객체 내부의 정보들을 순방 할 수 있게 됩니다.
관련패턴
반복자 패턴과 연관 된 패턴은 다음과 같습니다.
- Composite : Iterator가 순방할 대상이 되는 패턴
- Visitor : Composite 순방을 위한 Operation 에 적용 가능한 패턴
- Mementor : Iterator 의 상태를 저장하는 패턴
- Factory Method : Iterator를 생성하기 위해 사용 가능한 패턴
객체지향 원칙
Iterator 는 객체지향 원칙 중 SRP( Single Responsibility Principle ) 을 만족시키는 패턴입니다.
즉, 탐색이라는 단일 책임을 부여한다는 것을 의미합니다.
기본적으로 내부에 데이터를 포함하는 객체를 생성 시 우리는 Composite 패턴을 사용하게 되는데, 은연 중에 탐색에 대한 책임을 부여하게 됩니다.
이런 탐색에 대한 책임을 Iterator로 분리함으로써, 조금 더 SRP 를 준수하는 방향으로 설계가 가능해 집니다.
'CS' 카테고리의 다른 글
[디자인패턴] 방문자 패턴 (Visitor pattern) 의 개념 및 구조 요약정리 (0) | 2022.10.30 |
---|---|
[디자인패턴] 중재자 패턴 (Mediator pattern) 의 개념, 구조 및 예시 요약정리 (0) | 2022.08.19 |
[디자인패턴] 상태 패턴 (State pattern) 의 개념 및 구조 요약정리 (0) | 2022.08.17 |
[디자인패턴] GoF Pattern 요약정리와 패턴 별 활용 알아보기 (0) | 2022.08.11 |
문서 지향 데이터베이스(Document oriented database) 란 무엇인가? feat. CouchDB (0) | 2022.07.07 |