티스토리 뷰

정의

💡 그룹의 여러 요소들을 동일한 인터페이스를 구현한 개별 객체 하나로 묶어 동일한 인터페이스로 접근하여 처리할 수 있는 패턴이다.

 

설명

하나의 인터페이스를 최상위 노드로 가지는 트리형태의 하위 타입 요소(Component)와 이를 포함하는 복합 객체(Composite)를 만들어 최상위 노드의 인터페이스로 복합요소를 사용하는 디자인패턴을 얘기한다.

 

객체 모델

 

Composite
  • 복합 객체로 여러 Component 들을 포함하고 있는 객체이다.
public class Composite implements Component{
  List<Component> components;
  public Composite(List<Component> components) {
    this.components = components;
  }
  @Override
  public void operation() {
    components.forEach(Component::operation);
  }
}
Leaf
  • Component를 구현한 구현체 들로 복합 객체에서 포함할 수 있는 구현체를 의미한다.
Component
  • 복합 객체및 각 요소들을 사용할 수 있도록 돕는 인터페이스
@Slf4j
public class Leaf implements Component{
  @Override
  public void operation() {
    log.info("Leaf - {}", 1);
  }
}
public interface Component {
  void operation();
}
Client
  • Component 를 통해 복합 객체를 사용할 객체이다.
  public static void main(String[] args) {
    List<Component> components = 
Arrays.asList(new FirstLeaf(), new SecondLeaf()); composite = new Composite(components); composite.operation(); }

 

예제코드

 

GitHub - icraft2170/Blog-Example-Code

Contribute to icraft2170/Blog-Example-Code development by creating an account on GitHub.

github.com

 

👍 장점

클라이언트를 변경하지 않아도 새로운 요소를 추가할 수 있어 OCP(Open-Closed Principle)를 지킬 수 있다.

 

 

개인적인 생각에 활용 방법

여러개의 정책을 동시 적용할 때 트리구조로 정책을 만들고 스프링 빈(Bean)으로 등록해 동적으로 추가해 나갈 수 있을 것으로 보인다.

참조

코딩으로 학습하는 GoF의 디자인 패턴

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

GoF의 디자인 패턴

 

GoF의 디자인 패턴 :재사용성을 지닌 객체지향 소프트웨어의 핵심요소 - 교보문고

▶ 이 책은 디자인 패턴을 다룬 이론서입니다. 디자인 패턴의 기초적이고 전반적인 내용을 학습할 수 있습니다.

www.kyobobook.co.kr

 

댓글