컴포지트 패턴
- 구조 패턴
- 객체들을 트리 구조로 구성하여 그릇 객체와 내용물 객체를 동일하게 취급할 수 있도록 만들기 위한 패턴이다.
- 단일 객체와 집합 객체로 구성된 하나의 일관된 클래스를 정의한다.
컴포지트 패턴의 Object
Base Component
- 클라이언트가 composition 내의 Object들을 다루기 위해 제공되는 인터페이스이다.
- 인터페이스 또는 추상 클래스로 정의된다.
- 모든 Object들에게 공통되는 메소드를 정의해야 한다.
Leaf
- composition 내 Object의 행동을 정의한다.
- Base Component를 구현한다.
- 다른 Component에 대해 참조를 가지지 않는다.
Composite Object
- Leaf Object로 이루어져 있으며 Base Component 내 명령들을 구현한다.
컴포지트 패턴 예시
- Entry 객체는 File과 Directory를 동일 취급 하기 위한 공통 인터페이스를 정의.
- Directory는 그릇으로 또 다른 디렉토리 또는 파일을 포함하고 관리 할 수 있는 메서드를 구현
컴포티트 패턴 장단점
장점
- 객체들이 모두 같은 타입으로 취급되어 새로운 클래스 추가가 용이하다.
- 단일 객체 및 집합 객체를 구분하지 않고 코드를 작성하여 사용자 코드가 단순해진다.
- 런타임 단일 객체와 집합 객체를 구분하지 않고 일관된 프로그래밍이 가능하다.
- 객체들 간에 계급 및 계층구조가 있을 때 유용하다.
단점
- 설계가 지나친 범용성을 가진다.
- Composite의 구성 요소에 제약을 가하기 힘들다
참고
https://jhtop0419.tistory.com/99
https://lktprogrammer.tistory.com/49