디자인 패턴/구조 패턴

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 클래스만 가지고는 이를 제어하기 어렵기에 런타임 점검이 들어가게 됩니다.

'디자인 패턴 > 구조 패턴' 카테고리의 다른 글

Facade 패턴  (0) 2021.10.05
Bridge 패턴  (0) 2021.10.02
Adapter 패턴  (0) 2021.09.11
Decorator 패턴  (0) 2021.09.07
Proxy 패턴  (0) 2021.09.05