디자인 패턴/구조 패턴
Composite 패턴
언린이
2021. 9. 4. 10:22
Composite 패턴은 단일 객체와 그 객체들을 가지는 집합 객체를 같은 타입으로 취급하며, 트리 구조로 객체들을 엮는 패턴입니다.
구조
- Component
- Leaf와 Composite가 구현해야하는 인터페이스로, Leaf와 Composite는 모두 Component라는 같은 타입으로 다뤄집니다.
- Leaf
- 단일 객체로 Composite의 부분 객체로 들어가게 됩니다. 이때, Component의 형태로 들어갑니다.
- Composite
- 집합 객체로 Leaf 객체나 Composite를 자식으로 둡니다. 이때, Component의 형태로 들어갑니다.
- 클라이언트는 이 Composite를 통해 부분 객체들(Leaf나 Composite)을 다룰 수 있습니다.
활용 상황
- 객체들 간에 계급 및 계층구조가 있고 이를 표현해야할때 유용합니다.
- 클라이언트가 단일 객체와 집합 객체를 구분하지 않고 동일한 형태로 사용하고자 할때 유용합니다.
Composite 패턴의 장단점
- 장점
- 객체들이 모두 같은 타입으로 취급되기 때문에 새로운 클래스 추가가 용이합니다.
- 단일 객체 및 집합 객체를 구분하지 않고 코드 작성이 가능하여 사용자 코드가 단순해집니다.
- 단일 객체와 집합 객체로 구성된 하나의 일관된 클래스 계통을 정의합니다. 런타임 단일 객체와 집합 객체를 구분하지 않고 일관된 프로그래밍이 가능합니다.
- 단점
- 설계가 지나치게 범용성을 많이 가집니다. 복합체의 구성 요소에 제약을 가하기 힘듭니다. 복합체가 오직 한개의 구성 요소만 있었으면 할때가 있는데 Composite 클래스만 가지고는 이를 제어하기 어렵기에 런타임 점검이 들어가게 됩니다.