[소프트웨어 디자인 패턴] 11. Iterator Pattern & Composite Pattern

Iterator Pattern
- 컨렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공한다.
- 클라이언트는 어떤 컬렉션을 사용하고 있는지 고려하지 않는다.
- Java에서 java.util.Iterator를 이용하여 적용 할 수 있다.

적용 방법
- 반복자가 구현해야하는 함수를 제공하는 클래스를 캡슐화한 인터페이스를 정의한다.
- 특정 반복자에 해당하는 Iterator 클래스를 인터페이스를 상속받아 정의힌다.
- 클라이언트는 인터페이스에 정의된 함수를 통해 컬렉션에 접근한다.
Composite Pattern
- 객체를 트리구조로 구성해서 부분-전체 계층구조로 구현한다.
- 클라이언트는 객체가 개별 객체인지 복합 객체인지 고려하지 않는다.
- SRP (Single Responsibility Principle)를 준수하지 못하게 된다.

적용 방법
- 개별 객체와 복합 객체를 캡슐화한 인터페이스를 정의한다.
- 개별 객체 클래스와 복합 객체 클래스를 인터페이스를 상속받아 정의한다.
- 클라이언트는 복합 객체에 다른 개별 객체나 복합객체를 포함(Composition)시킨다.