Iterator Pattern

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

댓글

이 블로그의 인기 게시물

Raspberry pi 한글 설정 및 chromium 설치

Google Test를 이용한 Class의 Private/Protected Member Test