1. 복합체(Composite)
1) 정의
부분-전체 계층을 나타내기 위해 복합 객체를 트리 구조로 만든다. 컴포지트 패턴은 클라이언트가 개별적 객체와 복합객체 모두를 동일하게 다루도록 한다.. |
복합체 패턴은 개체와 개체군을 동일하게 취급하여 다루기 위한 패턴이다.
하나의 개체와 하나의 개체군을 함께 다루기 위해서는 어떻게 해야 할까? 라는 필요에 의해서 만들어진 패턴이라고 볼 수 있다.
2) 예제
다음과 같이 A, B, C, D라는 객체가 있다.
이것들을 컨트롤 하는 과정을 통해 복합체를 설명해보겠다.
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) 게임에서의 활용
스타크래프트를 보면 유닛을 하나씩 컨트롤 할 수도 있지만, 드래그 하여 다수의 개체를 선택하여 하나를 컨트롤 할 때와 같이 컨트롤 할 수 있는데 이런것도 복합체의 예이다.
비슷한 예로 윈도우 탐색기에서도 파일/폴더/드라이브는 사실 상위, 하위 구조가 나뉘어져 있는 다른 객체인데, 한꺼번에 복사를 하거나 이동을 하는 등의 기능이 사용되는데 이것도 복합체의 예이다.
울티마 온라인에서 가방이라는 요소가 있는데 가방안에 가방을 넣고 그 가방안에 또 가방을 넣고 그 가방안에 또 가방을 넣는 등 가방이라는 객체가 계속해서 겹칠 수 있고 유저는 가장 바깥에 있는 가방하나를 이동하면 그 안에 있는 모든 가방들이 딸려 이동되는 데 이것도 복합체의 한 예라고 할 수 있다.
이 처럼 복합체는 보기에 매우 단순해 보이는 패턴이지만, 굉장히 많은 곳에서 응용되는 패턴이다.