부분- 전체 계층 구조를 보일 수 있도록 객체들을 트리 구조로 구성한다.
Problem
프로그램에서 각각의 객체 또는 계층 구조로 이루어진 객체 묶음을 다루어야 함
Solution
개별 객체와 복합 객체에 대해 동일한 작업을 적용시킬 수 있도록 한다.
- Component: 개별 객체 뿐만 아니라 이러한 개별 객체들을 계층 구조로 포함하는 복합 객체를 나타내는 인터페이스 또는 추상 클래스
- Leaf: 개별 객체에 해당되는 컴포넌트
- Composite: 다른 컴포넌트를 포함할 수 있는 요소, 개별 객체 또는 다른 복합 객체를 포함할 수 있다.
예시 - 식당 메뉴 프로그램
: 여러 개의 메뉴만 지원하는 것이 아니라 메뉴 안에 메뉴가 있을 수 있다.
- MenuItem: leaf에 해당하는 클래스로, 개별 객체
- Menu: MenuComponent를 구현하면서, MenuComponent를 포함할 수 있다.