부분과 전체의 계층을 표현하기 위해 객체들을 모아 트리 구조로 구성합니다.
전체와 부분을 하나로 추상화해야 하는 경우에 사용할 수 있는 패턴이다.
클라이언트 입장에서 메시지 수신자가 부분인지, 전체인지 상관 없이 동일한 메시지를 이용해 동일한 방식으로 대상과 상호작용하고싶을 때 사용할 수 있는 패턴이다.
그래픽 편집기 같은 경우를 보면 구성 요소들을 그룹으로 만들고 이 그룹이 다시 더 큰 그룹을 형성하기도 한다. 이 경우 간단하게 텍스트, 라인 등 클래스를 정의하고 이를 포함한 컨테이너로 동작하는 클래스를 추가로 정의하는 방법이 있다.
하지만 이 경우 각 클래스와 컨테이너를 구분하기 위한 속성들을 정의해야하고 처리 대상이 무엇인지에 대해 추가로 구현해야 하는 문제가 있다.
이를 위한 COMPOSITE 패턴의 중요한 요소는 기본 클래스와 컨테이너 클래스를 모두 표현할 수 있는 하나의 추상화 클래스를 정의하는 것이다.

이런 방식으로 설계해 다루는 대상이 그룹인지, 각각의 그림인지를 구분하지 않을 채 Draw()를 요청할 수 있다. 연산을 수행하는 객체가 Line의 인스턴스이면 Line 클래스에 정의된 Draw가 호출될 것이고 그룹이었다면 Picture 클래스에 정의된 Draw가 호출된다. 허나 사용자 입장에서는 동일하게 Graphic 클래스에 정의된 연산으로만 접근하는 일관성을 가지게된다.