디자인패턴 복합체(Composite) 패턴

황제낙엽 2007.11.25 11:40 조회 수 : 69 추천:99

sitelink1 http://blog.naver.com/gamediz/20042595126 
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  

1. 복합체(Composite)

1)    정의

부분-전체 계층을 나타내기 위해 복합 객체를 트리 구조로 만든다. 컴포지트 패턴은 클라이언트가 개별적 객체와 복합객체 모두를 동일하게 다루도록 한다..

 

복합체 패턴은 개체와 개체군을 동일하게 취급하여 다루기 위한 패턴이다.

하나의 개체와 하나의 개체군을 함께 다루기 위해서는 어떻게 해야 할까? 라는 필요에 의해서 만들어진 패턴이라고 볼 수 있다.

 

2)    예제

다음과 같이 A, B, C, D라는 객체가 있다.

이것들을 컨트롤 하는 과정을 통해 복합체를 설명해보겠다.

 

 npee8_gamediz.jpg

1 ~ 4는 객체 컨트롤 과정이다.

1번은 A, B, C, D라는 객체를 놓았다. (아무 작용없는 상태)….

2번은 B를 골라서 양방향으로 쭉 늘였다. 이것은 객체 하나에 대한 컨트롤이다.

3번은 A, B, C, D 객체를 그룹화 해서 한방향으로 쭉 끌었더니 한꺼번에 커졌다.

4번은 B, C, D는 그룹이고, A는 단일 객체인데 이 것들을 한꺼번에 선택하여 이동시키거나 할 수 있다는 것을 보여주는 그림이다.

 

복합체는 3번과 4번의 과정을 행할 수 있도록 만들어 주는 패턴이라고 할 수 있다.

크기, 색깔, 모양이 다른 A, B, C, D 4개의 객체를 그룹화 하여 컨트롤 해줄 수도 있고, 단일 객체로 개별 컨트롤도 가능하며, 더불어 단일객체와 선택되어 있는 객체를 함께 컨트롤 할 수도 있는 방식 그런것이 바로 복합체 패턴이라고 할 수 있다.

 

한쪽은 그룹에 대한 추상화, 한쪽은 도형에 대한 추상화를 추상화를 담당하고 그룹을 옮기면 그룹안에 있는 물건들도 재배열되는 구조를 가졌다고 할 수 있다.

 

3)    게임에서의 활용

스타크래프트를 보면 유닛을 하나씩 컨트롤 할 수도 있지만, 드래그 하여 다수의 개체를 선택하여 하나를 컨트롤 할 때와 같이 컨트롤 할 수 있는데 이런것도 복합체의 예이다.

 

비슷한 예로 윈도우 탐색기에서도 파일/폴더/드라이브는 사실 상위, 하위 구조가 나뉘어져 있는 다른 객체인데, 한꺼번에 복사를 하거나 이동을 하는 등의 기능이 사용되는데 이것도 복합체의 예이다.

 

울티마 온라인에서 가방이라는 요소가 있는데 가방안에 가방을 넣고 그 가방안에 또 가방을 넣고 그 가방안에 또 가방을 넣는 등 가방이라는 객체가 계속해서 겹칠 수 있고 유저는 가장 바깥에 있는 가방하나를 이동하면 그 안에 있는 모든 가방들이 딸려 이동되는 데 이것도 복합체의 한 예라고 할 수 있다.

 

이 처럼 복합체는 보기에 매우 단순해 보이는 패턴이지만, 굉장히 많은 곳에서 응용되는 패턴이다.