본문 바로가기

취업과 기본기 튼튼/빽 투더 기본기

[디자인 패턴 7편] 구조 패턴, 컴퍼지트(Composite)

1. 개념

컴퍼지트 패턴은 단일 객체와 그 객체들을 가지는 집합 객체를
같은 타입으로 취급하며, 트리 구조로 객체들을 엮는 패턴이다.

1.1. 장점

  • 객체들이 모두 같은 타입으로 취급되기 때문에 새로운 클래스 추가가 용이하다.
  • 단일객체, 집합객체 구분하지 않고 코드 작성이 가능하다.

1.2. 단점

  • 설계를 일반화 시켜 객체간의 구분, 제약이 힘들다.

1.3. 활용 상황

  • 객체들 간에 계급 및 계층구조가 있고 이를 표현해야할 때
  • 클라이언트가 단일 객체와 집합 객체를 구분하지 않고 동일한 형태로 사용하고자 할 때

2. 구조

https://ko.wikipedia.org/wiki/컴포지트_패턴

  • Component
    • Leaf와 Composite 가 구현해야하는 Interface 로, Leaf 와 Composite 는 모두 Component 라는 같은 타입으로 다뤄진다.
  • Leaf
    • 단일 객체로 Composite 의 부분(자식) 객체로 들어가게 된다.
      이 때, Component 의 형태로 들어간다.
  • Composite
    • 집합 객체로 Leaf 객체나 Composite 를 부분(자식)으로 둔다.
      이 때, Component 의 형태로 들어간다.
    • 클라이언트는 이 Composite 를 통해 부분 객체들 (Leaf 나 Composite) 을 다룰 수 있다.

3. 구현

개인적으로 아래 두 포스팅이 제일 잘 정리되어 있어 링크만 남긴다.
순서대로 읽어보면 좋을 것 같다.

특히 첫 번째 포스팅의 File - Directory 구조를 떠올려 보면 쉽게 이해가 간다.

 

컴포지트 패턴(Composite Pattern) :: JDM's Blog

개요 컴포지트 패턴Composite Pattern은 간단하게 말해 단일 객체Single Instance든 객체들의 집합Group of Instance이든 같은 방법으로 취급하는 것입니다. 다시 말해, 개별적인 객체들과 객체들의 집합간의 처리 방법의 차이가 없을 경우 사용하면 됩니다. 여기서 컴포지트Composite의 의미는 일부 또는 그룹을 표현하는 객체들을 트리 구조Tree Structures로 구성한다는 겁니다. 컴포지트 패턴의 활용 예를 하나 들어봅

jdm.kr

 

컴포지트 패턴(Composite Pattern) :: 마이구미

이 글은 디자인 패턴 중 컴포지트 패턴(Composite Pattern) 을 다룬다. 위키피디아의 내용을 기반으로 정리할 예정이다. 위키 - https://en.wikipedia.org/wiki/Composite_pattern 글의 주제를 다루기에 앞서, 글..

mygumi.tistory.com

가장 핵심이 되는 부분은 Component 인터페이스를 정의하고, LeafComposite 가 이를 구현하는 것이다. 두 클래스가 동등하게 다뤄지는 핵심적인 이유이다.

4. 참고