프로그램 아키텍쳐/디자인패턴

컴포지트 패턴 ( Composite Pattern )

본클라쓰 2009. 10. 30. 11:40

 

 컴포지트 패턴은 객체들의 관계를 트리 구조로 구성하여 전체-부분 계층을 표현한는 패턴이다. 자바 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(국물);


    그릇.만들기();

}