컴포지트 패턴은 객체들의 관계를 트리 구조로 구성하여 전체-부분 계층을 표현한는 패턴이다. 자바 AWT 의 컨테이너와 같은 패턴이다.
최상위 인터페이스 클래스인 Component는 클래스들의 묶음을 나타내기 위함이다. Component 클래스에 확장된 클래스들은 컴포지트 패턴이 적용된 Composite 클래스에서 계층적인 구조를 나타낼 수 있다.
아래 그림은 Component 클래스가 라면이라고 가정한 상태에서 클래스 다이어그램을 그린 것이다. 라면에 들어가는 재료가 여러개가 있지만 간단하게 면, 국물만 구현했다.
그릇에 어떤 것을 담느냐에 따라 사용자가 원하는 라면이 될 것이다. 또한, 그릇을 여러개 만들고, 하나에 섞어서 먹을 수도 있겠다. 이게 컴포지트 패턴의 핵심이다.
인터페이스 Component 클래스 의사코드
public interface 라면 {
public 만들기();
}
면 클래스
public class 면 implements 라면 {
public 만들기() {
밀가루+물을 부어 면 만들기
}
}
국물 클래스
public class 국물 implements 라면 {
public 만들기() {
물+스프 섞어 끓이기
}
}
컴포지트 클래스인 그릇 클래스
public class 그릇 implements 라면 {
private ArrayList<라면> = new ArrayList<라면>();
public 만들기() {
for ( 리스트가 있다면 ) {
리스트의 만들기() 메소드 실행
}
}
public void add(라면 라면) {
ArrayList<라면>.add(라면);
}
public void remove(라면 라면) {
ArrayList<라면>.remove(라면);
}
}
실제 사용 방법
main {
// 내용물 초기화
면 면 = new 면();
국물 국 = new 국물();
// 그릇 초기화
그릇 그릇 = new 그릇();
// 그릇에 내용물 넣기
그릇.add(면);
그릇.add(국물);
그릇.만들기();
}
'프로그램 아키텍쳐 > 디자인패턴' 카테고리의 다른 글
브릿지 패턴 ( Bridge Pattern ) (0) | 2009.10.30 |
---|---|
프록시 패턴 ( Proxy Pattern ) (0) | 2009.10.30 |
빌더(Builder) 패턴 (0) | 2009.10.29 |
추상 팩토리 패턴 ( The Abstract Factory pattern ) (0) | 2009.10.28 |
팩토리 메소드 ( The Factory Method ) (0) | 2009.10.28 |