컴포지트 패턴 = 여러개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별없이 다루게 해주는 패턴. (클라이언트가 복합 객체(group of object)나 단일 객체를 동일하게 취급하는 것을 목적으로 함) / 컴포지트의 의도는 계층적으로 구성된 정보를 트리 구조로 작성하여, 전체-부분(whole-part) 관계 표현 / 전체와 부분의 관계를(Directory와 File같은) 갖는 객체들 사이의 관계를 정의할 때 유용함. / 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스 사용 가능.
컴포지트 패턴은 언제 사용하는가 - 복합 객체와 단일 객체의 처리 방법이 다르지 않을 경우, 전체-부분 관계로 정의 가능. 이 관계를 효율적으로 정의할때 유용함.
역할이 수행하는 작업
- Component : 구체적인 부분 / Leaf 클래스와 전체에 해당하는 Composite 클래스에 공통 인터페이스를 정의 / 모든 component들을 위한 추상화된 개념으로써, Leaf와 Composite 클래스의 인터페이스이다.
- Leaf : 구체적인 부분 클래스 / Composite 객체의 부품으로 설정. / Component 인터페이스를 구현하고, 구체 클래스를 나타냄.
- Composite : 전체 클래스 / 복수 개의 Component를 갖도록 정의 / 복수개의 Leaf, 심지어 복수개의 Composite 객체를 부분으로 가질 수 있음. / Component 인터페이스를 구현하고, 구현되는 자식(leaf or composite)들을 가지고, 이러한 자식들을 관리하기 위한 메서드(addChild, removeChild...)를 구현. / 일반적으로 인터페이스에 작성된 메소드는 자식에게 위임하는 처리를 함. /
Client 클래스는 Leaf와 Composite 클래스를 직접 참조하지 않고, 공통 인터페이스 Component를 참조함. / Leaf 클래스는 Component 인터페이스를 구현함. / Composite 클래스는 Component 객체 자식들을 유지하고, operation()같은 요청을 통해 자식들에게 전달함.
구조(Structural) 패턴 - 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴 / 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴
컴포지트 패턴은 타입의 안정성보다는 일관성을 더 강조한다고 함.
'Design Pattern' 카테고리의 다른 글
디자인 패턴 - Proxy Pattern (0) | 2022.05.17 |
---|---|
디자인 패턴 - State Pattern (0) | 2022.04.27 |
디자인 패턴 - Template Method pattern (0) | 2022.04.12 |
디자인 패턴 - Iterator pattern (0) | 2022.04.12 |
디자인 패턴 - Facade pattern (0) | 2022.04.12 |
댓글