ref. GoF Design Pattern.
Intent
내부 구조를 노출하지 않고 집합 객체의 element를 순차적으로 접근 할 수 있는 방법을 제공
Also Known As
Cursor
Motivation
집합 객체의 element에 대한 access와 순회에 대한 책임을 Iterator Object에 전가
- Iterator class는 집합 객체의 element에 순차적으로 접근 할 수 있는 다음의 Interface를 정의
- First() : current element를 첫번째 element로 초기화
- Next() : current element를 다음 element로 변경
- IsDone() : current element가 마지막 element 인지 확인
- CurrentItem() : current element를 return
- 이러한 Iterator class를 다형성을 지원하도록 일반화
- Aggregate : Iterator Object를 생성하기 위한 Interface를 정의
- ConcreteAggregate : Aggregate를 Implement한 집합객체
- Iterator : element를 접근하고 순회하기 위한 interface를 정의
- ConcreteIterator : ConcreteAggregate에 대한 Iterator
Consequences
- 객체 내부의 표현 방식을 모르고도 객체의 각 요소를 순회
- 집합 객체를 순회하는 다양한 방법을 제시
- 서로 다른 집합 객체 구조에 대해서도 동일한 방법으로 순회 가능
Implementation
누가 Iterator를 제어 하는지에 따라 다음의 두 가지 방식의 Iterator로 나뉨
- External Iterator
- Client가 Iterator를 control. Internal Iterator보다 유연함
- Ex)
- C++ STL이나 java의 Iterator
- C#의 IEnumerator
- Internal Iterator (Implicit iterators)
- Client에게 Iterator를 노출하지 않고 element를 순회 할 수 있는 method를 제공.
- element의 순회를 method에서 직접 control
- 순회 method을 재사용 가능
- Ex)
- Ruby의 [container].each
- C++ STL의 for_each(), sort(), copy(), C++11의 auto
- Python의 for [element] in [container]
C++ STL의 Iterator
댓글
댓글 쓰기