Composite pattern 특징
- 같은 인터페이스를 구현하는 두 종류(Composite 와 Leaf)의 클래스 객체로 구성
- 공통 인터페이스는 Component의 담당
- 계층 구조에서 Leaf의 역할을 하는 객체 혹은 객체군이 존재 / 자식을 같지 않아 브랜치를 끝내는 노드 : Button CheckBox
- Composite 패턴을 이용하여 코드를 작성하면 계층 구조에 포함되어 있는 객체가 Leaf인지 composite인지 알 필요 없다
- => 둘 모두 하나의 인터페이스를 통해 접근 할 수 있다 => 코드가 단순해진다.
디렉토리 시스템 ; composite pattern의 예
Composite 패턴에서는 루트노드가 파생(자식) 클래스이며, 보통 Leaf 노드 클래스 아랫부분에 표시하게 된다.
- 다이어그램을 보면 Directory Class가 SimpleFile 밑에 표시되어 있다.
- 객체의 구조는 다이어그램과 반대이다. (컨테이너, 노드를 윗부분 / Leat 노드는 아랫부분에)
Composite 패턴을 사용하면 디렉토리 순회 시 하부 디렉토리(디렉토리, 파일)를 동일한 방식으로 취급할 수 있다.
위 그림의 주석 부분을 보면 객체에 단지 Print() 메시지를 보낼 뿐이다.
- 객체가 Simplefile이라면 단순히 파일 이름만 출력될 것이고
- 객체가 Directory라면 디렉토리가 포함하고 있는 내용을 출력할 것이다