⚡복합체 패턴이란?
복합체 패턴(Composite Pattern)은 객체 지향 디자인 패턴 중 하나로 객체들을 트리 구조로 구성하여 전체 - 부분 계층을 표현하는 패턴이다. 쉽게 말해 객체들을 계층 구조로 구성하여 부분과 전체를 나타내는 패턴이다.
복합체 패턴에서는 개별 객체와 복합 객체(부분과 전체를 나타내는 객체)를 같은 인터페이스를 가진다는 특징이 있다. 이를 통해 클라이언트는 개별 객체와 복합 객체를 구분하지 않고 동일한 방식으로 다룰 수 있다. 또한 복합 객체에서는 자식 객체를 추가하거나 제거하는 등의 작업을 수행할 수 있다.
복합체 패턴은 객체들이 계층 구조로 구성되어 있는 경우 예를 들어 UI 요소나 파일 시스템 등의 경우에 유용하게 사용된다. 또한 개별 객체와 복합 객체를 동일한 인터페이스로 다룰 수 있기 때문에 클라이언트 코드를 단순화하고 확장성을 높일 수 있게 해 준다.
복합체 패턴 구성요소
- Component: 모든 객체가 구현해야 하는 공통 인터페이스를 정의한다. 이를 통해 개별 객체와 복합 객체가 동일한 방식으로 다룰 수 있다.
- Leaf: 복합체에서 가장 작은 단위인 개별 객체를 나타낸다. 이 객체는 복합 객체와는 다른 방식으로 다뤄지며 자식 객체를 가질 수 없다.
- Composite: 복합 객체를 나타낸다. 이 객체는 여러 개의 자식 객체를 가질 수 있으며 자식 객체를 추가하거나 제거하는 등의 작업을 수행할 수 있다.
- Client: 복합체를 이용하는 객체이다. 이 객체는 개별 객체와 복합 객체를 구분하지 않고, 동일한 방식으로 다룰 수 있다.
⚡복합체 패턴은 어떤 경우에 사용하는가?
- 객체들 간의 전체 - 부분 계층 구조가 존재하는 경우
복합체 패턴은 객체들을 전체-부분 계층 구조로 구성할 수 있기 때문에, 이러한 구조가 필요한 경우에 사용된다. 예를 들어 그래픽 에디터에서 그림이나 도형을 구성하는 데 사용되는 객체들은 전체 - 부분 계층 구조를 이루기 때문에 복합체 패턴을 사용할 수 있다. - 객체들이 동일한 인터페이스를 사용하는 경우
복합체 패턴에서는 개별 객체와 복합 객체를 동일한 인터페이스로 다룰 수 있기 때문에 객체들이 동일한 인터페이스를 사용하는 경우에 사용된다. 예를 들어 파일 시스템에서 파일과 디렉터리는 동일한 인터페이스를 사용하기 때문에 복합체 패턴을 사용할 수 있다. - 객체들 간의 관계가 동적으로 변경될 수 있는 경우
복합 객체에서 자식 객체를 추가하거나 제거하는 등의 작업을 수행할 수 있기 때문에 객체 간의 관계가 동적으로 변경될 수 있는 경우에 사용된다. 예를 들어 문서 처리 프로그램에서 문서의 구성 요소들은 동적으로 변경될 수 있기 때문에 복합체 패턴을 사용할 수 있다.
⚡복합체 패턴의 장단점
장점
- 객체들 간의 전체-부분 계층 구조를 쉽게 구현할 수 있다.
- 개별 객체와 복합 객체를 동일한 인터페이스로 다룰 수 있기 때문에 일관성 있는 인터페이스를 제공할 수 있다.
- 객체 간의 관계가 동적으로 변경될 수 있는 경우에도 유연하게 대처할 수 있다.
- 객체들을 재귀적으로 다룰 수 있기 때문에, 코드의 재사용성과 유지보수성이 높아진다.
단점
- 복합 객체를 다룰 때는 개별 객체와는 달리 추가적인 오버헤드가 발생할 수 있다.
- 복합 객체에서 자식 객체를 다룰 때는 예외 처리 등을 고려해야 한다.
- 복합 객체에서 자식 객체를 검색할 때는 일반적인 탐색 알고리즘보다 더 복잡한 알고리즘이 필요할 수 있다.
- 복합 객체의 구성 요소들이 너무 많은 경우, 복잡한 복합 객체가 생성될 수 있어서 이를 다루기 어려울 수 있다.
⚡복합체 패턴 소스 정리
⚡생각
복합체 패턴의 경우 솔직히 사용해보지는 않고 여러 사이트를 통해서 예제를 보고서 기본적인 내용만 인지를 하고 있다.
조직도 관련된 부분에서 적용해보려고 했지만 어떻게 적용을 해야 할지 아직은 잘 모르겠지만 객체들을 계층 구조로 구성할 때 유용한 패턴이라는 것을 알고 개발을 하면서 사용을 해보고 내용을 보강해야 할거 같다.😓
반응형
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 퍼사드 패턴에 대한 내용 정리 (0) | 2023.04.05 |
---|---|
[디자인 패턴] 데코레이터 패턴에 대한 내용 정리 (0) | 2023.03.28 |
[디자인 패턴] 브리지 패턴에 대한 내용 정리 (0) | 2023.03.25 |
[디자인 패턴] 어댑터 패턴에 대한 내용 정리 (0) | 2023.03.24 |
[디자인 패턴] 프로토 타입 패턴에 대한 내용 정리 (0) | 2023.03.21 |