18. 반복자 패턴(Iterator Pattern) 설계

18. 3 디자인

C#에서는 IEnumerator, IEnumerable 인터페이스를 약속하고 ArrayList나 배열과 같은 컬렉션들이 이들 인터페이스를 구현 약속함으로써 사용자가 foreach 구문을 통해 컬렉션의 요소들을 반복적으로 접근할 수 있게 제공하고 있습니다. 여기에서는 이러한 부분이 C#에 제공하지 않는다는 관점에서 반복자 패턴을 표현해 보려고 합니다.

반복자 패턴에 대한 설명을 위한 예제 프로그램은 추상화 컬렉션을 파생받은 배열 형식에 대한 정의와 반복자를 파생받은 배열 반복자를 정의한 것이 맞게 작성된 것인지를 확인하는 예광탄으로 하겠습니다.

추상화 된 컬렉션에는 개체를 보관하거나 삭제할 수 있고 전체를 제거하거나 보관된 개체를 얻어올 수 있도록 메서드를 구현 약속할께요. 추상화 된 반복자에서는 반복을 시작할 때 다음으로 이동할 때 현재 항목을 얻어올 때 사용하는 메서드에 대한 구현 약속을 합시다. 그리고, 배열 형식은 추상화 된 컬렉션 기반으로 파생된 클래스로 정의를 하며 구현 약속된 메서드를 구체적으로 구현해야겠지요. 그리고, 배열 개체에 보관된 것들을 반복해서 순회할 수 있게 하는 반복자를 얻어오는 메서드를 제공해 주어야 합니다. 그리고, 배열에서 반환하는 반복자는 추상화 된 반복자를 기반으로 파생된 배열 반복자 형식 개체를 제공할 것입니다. 물론, 추상화 된 반복자에 구현 약속된 메서드들을 배열 반복자에서는 구현해야겠지요. 배열 순회자가 배열 개체에 보관된 것들을 순회하기 위해서는 배열 순회자 개체를 생성할 때 배열 개체 자기 자신을 입력 인자로 넘겨 주어야 합니다.

[그림] 반복자 패턴 클래스 다이어그램
[그림] 반복자 패턴 클래스 다이어그램