DESIGN PATTERN/실용주의 디자인패턴

Chapter 3 - Composite Pattern

파란실버라이트 2012. 12. 27. 14:58

 

   Composite pattern 특징

  • 같은 인터페이스를 구현하는 두 종류(Composite 와 Leaf)의 클래스 객체로 구성
  • 공통 인터페이스는 Component의 담당
  • 계층 구조에서 Leaf의 역할을 하는 객체 혹은 객체군이 존재 / 자식을 같지 않아 브랜치를 끝내는 노드 : Button CheckBox
  • Composite 패턴을 이용하여 코드를 작성하면 계층 구조에 포함되어 있는 객체가 Leaf인지 composite인지 알 필요 없다
  • => 둘 모두 하나의 인터페이스를 통해 접근 할 수 있다 => 코드가 단순해진다.

 

 

디렉토리 시스템 ; composite pattern의 예

 

 

 

Composite 패턴에서는 루트노드가 파생(자식) 클래스이며, 보통 Leaf 노드 클래스 아랫부분에 표시하게 된다.

- 다이어그램을 보면 Directory Class가 SimpleFile 밑에 표시되어 있다.

- 객체의 구조는 다이어그램과 반대이다. (컨테이너, 노드를 윗부분 / Leat 노드는 아랫부분에)

 

 

Composite 패턴을 사용하면 디렉토리 순회 시 하부 디렉토리(디렉토리, 파일)를 동일한 방식으로 취급할 수 있다.

위 그림의 주석 부분을 보면 객체에 단지 Print() 메시지를 보낼 뿐이다.

- 객체가 Simplefile이라면 단순히 파일 이름만 출력될 것이고

- 객체가 Directory라면 디렉토리가 포함하고 있는 내용을 출력할 것이다