반복자 패턴

반복자 패턴(iterator pattern)은 객체 지향 프로그래밍에서 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴이다. 반복자 패턴은 컨테이너로부터 알고리즘을 분리시키며, 일부의 경우 알고리즘들은 필수적으로 컨테이너에 특화되어 있기 때문에 분리가 불가능하다.

이를테면, SearchForElement라는 가설적 알고리즘은 일반적으로 컨테이너에 특화된 알고리즘으로서 구현하지 않고 반복자 유형을 사용하여 구현할 수 있다. 이는 필요한 반복자 유형을 지원하는 컨테이너에 SearchForElement를 사용할 수 있게 한다.

개요

반복자[1] 디자인 패턴은 유연하고 재사용 가능한 객체 지향 소프트웨어를 설계하기 위해 반복되는 디자인 문제를 해결하는 방법, 즉 객체는 구현, 변경, 테스트, 재사용이 쉬워야 한다는 것을 기술하는, 잘 알려진 23가지 GoF 디자인 패턴들 중 하나이다.

정의

반복자 패턴의 본질은 기반이 되는 표현을 노출시키지 않고 연속적으로 객체 요소에 접근하는 방법을 제공하는 것이다.[2]

다시말해 aggregate 유형에 무관한 동일 순차 접근 방법을 제공하는 것이며, 여기서 aggregate란 반복자객체를 생성하기위한 인터페이스를 정의하는 것이고 iterator 란 요소에 접근 할 수 있고 순회 할 수 있는 인터페이스를 정의하는 것이다.

구조

UML 클래스 및 시퀀스 다이어그램

반복자 디자인 패턴을 위한 샘플 UML 클래스와 시퀀스 다이어그램.[3]

UML 클래스 다이어그램

반복자 패턴

언어 특화 구현체

C#

foreach 문을 사용한 예는 다음과 같다:

var primes = new List<int>{ 2, 3, 5, 7, 11, 13, 17, 19};
long m = 1;
foreach (var p in primes)
    m *= p;

같이 보기

각주

  1. Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides (1994). 《Design Patterns: Elements of Reusable Object-Oriented Software》. Addison Wesley. 257ff쪽. ISBN 0-201-63361-2. 
  2. Gang Of Four
  3. “The Iterator design pattern - Structure and Collaboration”. 《w3sDesign.com》. 2017년 8월 12일에 확인함.