본문 바로가기

Design Patterns/영문 위키(Wikipedia)

Iterator pattern

먼저 이 글은 영문 위키의 글을 번역한 글임을 알려드립니다.

영어 실력이 부족한 관계로 오역이 있을 수도 있습니다.

원문 주소 :  http://en.wikipedia.org/wiki/Iterator_pattern



Behavioral - Iterator pattern



객체지향 프로그래밍(object-oriented programming)에서, 이터레이터 패턴(iterator pattern)반복자(iterator)컨테이너(container)(List, Set, Map등을 말합니다.)를 돌면서 컨테이너의 요소(elements)에 접근하는 디자인 패턴(design pattern)이다. ; 어떤 경우에 컨테이너에 특화된 알고리즘이 필요한 경우가 있고 따라서 이런 부분은 컨테이너와의 독립성을 유지하기 힘들다.


예를 들어, SearchForElement라는 가상의(hypothetical) 알고리즘이 컨테이너에 특화된 알고리즘으로 구현하지 않고, 특정 타입의 반복자(iterator)를 사용해서 구현할 수 있다. 이렇게 하면 SearchForElement는 그 타입의 iterator(앞에서 구현한 특정타입의 반복자)를 지원하는 어떤 컨테이너에서든지 사용할 수 있게 된다. 

정의 Definition

Iterator Factory method pattern의 본질(essence)은 "세부적인 구현(underlying representation)을 노출시키지 않고서, 컨테이너(aggregate object)의 요소에 차례대로 접근할 수 있는 방법을 제공하는 것"이다.

언어에 특화된 구현 Language-specific implementation

메인 글 : Iterator
일부 언어는 문법을 표준화하고 있다. C++과 Phython이 이에 속한다.

C++

C++ 에서는 구분자(iterator)를 pointer의 의미(semantics)로 구현한다. C++에서 어떤 클래스는 포인터의 모든 오퍼레이션을 오버로드할 수 있어서,  반복자에서 역참조(dereference), 증가, 감소 연산을 완벽히 구현할 수 있다. 이는 평범한 메모리 버퍼에 std::sort같은 알고리즘을 바로 사용할 수 있고, 새로 배워야할 문법이 없다는 장점이 있다. 하지만, 컨테이너의 마지막인지 확인하기 위해서는 반복자가 스스로 알지 못하기 때문에 마지막("end") 반복자를 알고 있어야 한다는 단점이 있다. 우리는 C++에서 반복자가 iterator 컨셉(concept)을 본보기로 하고 있다고 말한다.


Python

Python은 언어자체에서 반복자를 하나의 문법으로 지정하고 있어서 for 같은 키워드와 함께 사용된다. sequence에는 __iter__()라는 메서드가 있는데 이 메서드는 반복자 객체를 반환한다. next()메서드를 통해 다음 요소를 반환하거나, sequence의 끝에 도달하면 StopIteration 예외(exception)를 발생시킨다. 반복자도 __iter__()메서드를 가지고 있어서 스스로를 반환시킬 수 있다.


Java

자바는 Collections 클래스가 구현해야만하는 Iterator 인터페이스가 있다. (그래서 자바의 컬렉션들은 모두 Iterator인터페이스를 구현하고 있고, Map이든 Set이든 List든 상관없이 Iterator 인터페이스를 이용해서 모든 요소 검사를 할 수 있죠.)

'Design Patterns > 영문 위키(Wikipedia)' 카테고리의 다른 글

Memento pattern  (0) 2012.06.20
Mediator pattern  (0) 2012.06.19
Interpreter pattern  (0) 2012.06.15
Command Pattern  (0) 2012.06.15
Chain-of-responsibility pattern  (0) 2012.06.08