1. 이터레이터 패턴이란
1.1 정의
반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴
이터레이터 패턴을 사용하면 집합체 내에서 어떤 식으로 일이 처리되는지 몰라도 그 안에 들어있는 항목들에 대해서 반복작업을 수행 할 수 있다.
예를 들어, 집합체가 C++의 vector이든, list이든 상관 없이 같은 코드로 반복 작업을 수행할 수 있게 하는 것이다.
1.2 구조
여기서 Client는 Aggregate라는 집합체 클래스에 대해 어떤 반복 작업을 수행하려고 한다.
반복 작업은 Aggregate의 createIterator() 메소드로 Iterator를 생성해서수행한다.
Iterator의 메소드들은 조금 다르게 구성되는 경우도 있다. 이 다이어그램에서 Iterator는 java.util.Iterator이고 C++의 Iterator의 경우 ++, -- 연산자를 사용할 수 있고, begin(), end() 등의 메소드를 포함한다.
중요한 것은 어떤 구조이든지간에 집합체 내부 구조와 상관없이 반복 작업을 수행할 수 있다는 것이다.
2. 장점
- 집합체 클래스의 응집도를 높여준다.
- 집합체 내에서 어떤 식으로 일이 처리되는지 알 필요 없이, 집합체 안에 들어있는 모든 항목에 접근 할 수 있게 해준다.
응집도는 클래스나 모듈이 특정 목적이나 역할을 얼마나 일관되게 지원하는지를 나타내는 척도다.
이터레이터 패턴을 사용하면 원래 클래스의 역할(집합체 관리)에서 반복 작업이라는 다른 역할을 분리시켜 응집도를 높일 수 있고, 그 덕에 컬랙션 변경에 의한 클래스의 변경, 반복자 기능 변경에 의한 클래스 변경을 방지할 수 있다.
이터페이터 패턴을 사용하면 집합체 내에서 어떤 식으로 일이 처리되는지 알 필요 없이 반복작업을 수행할 수 있다.
집합체가 ArrayList로 이루어져있든, List로 이루어져있든 상관없이 똑같은 코드로 반복 작업을 수행 할 수 있는 것이다.
3. 레퍼런스
- Head First Design Pattern(O'REILLY media)
- https://ko.wikipedia.org/wiki/%EB%B0%98%EB%B3%B5%EC%9E%90_%ED%8C%A8%ED%84%B4
- https://www.geeksforgeeks.org/iterators-c-stl/ : C++ iterator example
'IT 관련 > 디자인 패턴' 카테고리의 다른 글
퍼사드 패턴(Facade Pattern) (2) | 2019.01.18 |
---|---|
어댑터 패턴(Adapter Pattern) (0) | 2019.01.15 |
커맨드 패턴(Command Patten) (0) | 2018.12.29 |
싱글톤 패턴 (Singleton Pattern) (0) | 2018.11.16 |
추상 팩토리 패턴(Abstract Factory Pattern) (0) | 2018.11.11 |