취업과 기본기 튼튼/빽 투더 기본기
[디자인 패턴 7편] 구조 패턴, 컴퍼지트(Composite)
흠시
2020. 2. 20. 18:13
1. 개념
컴퍼지트 패턴은 단일 객체와 그 객체들을 가지는 집합 객체를
같은 타입으로 취급하며, 트리 구조로 객체들을 엮는 패턴이다.
1.1. 장점
- 객체들이 모두 같은 타입으로 취급되기 때문에 새로운 클래스 추가가 용이하다.
- 단일객체, 집합객체 구분하지 않고 코드 작성이 가능하다.
1.2. 단점
- 설계를 일반화 시켜 객체간의 구분, 제약이 힘들다.
1.3. 활용 상황
- 객체들 간에 계급 및 계층구조가 있고 이를 표현해야할 때
- 클라이언트가 단일 객체와 집합 객체를 구분하지 않고 동일한 형태로 사용하고자 할 때
2. 구조
- Component
- Leaf와 Composite 가 구현해야하는 Interface 로, Leaf 와 Composite 는 모두 Component 라는 같은 타입으로 다뤄진다.
- Leaf
- 단일 객체로 Composite 의 부분(자식) 객체로 들어가게 된다.
이 때, Component 의 형태로 들어간다.
- 단일 객체로 Composite 의 부분(자식) 객체로 들어가게 된다.
- Composite
- 집합 객체로 Leaf 객체나 Composite 를 부분(자식)으로 둔다.
이 때, Component 의 형태로 들어간다. - 클라이언트는 이 Composite 를 통해 부분 객체들 (Leaf 나 Composite) 을 다룰 수 있다.
- 집합 객체로 Leaf 객체나 Composite 를 부분(자식)으로 둔다.
3. 구현
개인적으로 아래 두 포스팅이 제일 잘 정리되어 있어 링크만 남긴다.
순서대로 읽어보면 좋을 것 같다.
특히 첫 번째 포스팅의 File - Directory 구조를 떠올려 보면 쉽게 이해가 간다.
가장 핵심이 되는 부분은 Component
인터페이스를 정의하고, Leaf
와 Composite
가 이를 구현하는 것이다. 두 클래스가 동등하게 다뤄지는 핵심적인 이유이다.