Decorator Pattern

윤세영·2023년 7월 6일
0

DesignPattern

목록 보기
12/15

정의

  • 상속 또는 interface를 이용하여 Type을 맞춰 객체의 추가적인 요건을 동적으로 추가한다.
  • 서브클래스(decorator class)를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제시한다.
  • 중요한점은 Decorator는 상속을 통해서 행동을 물려받는 것이 목적이 아니라는 것이다.

구성

  • 각 구성요소는 직접 쓰일 수도 있고 decorator로 감싸져서 쓰일 수 있다.
  • ConcreteComponent에 새로운 행동을 동적으로 추가하게 된다.
  • 각 decorator 안에는 Component 객체가 들어있다.
  • Decorator는 자신이 decorate할 구성요소와 같은 interface나 abstract class를 implement 한다.
  • Decorator는 component의 상태를 확장할 수 있다.
  • ConcreteDecorator에는 그 Object가 decorate하고 있는 것을 위한 interface 변수가 있다.
  • decorator에서 새로운 method를 추가할 수 있다.
OCP (Open-Closed Principle) : class는 확장에 대해서는 open 해야 하지만 코드 수정에 대해서는 close 해야 한다. 즉 기존 코드는 건드리지 않은 채로 확장을 통해서 새로운 행동을 추가할 수 있도록 코드의 수정을 허용한다는 것으로 기능 추가에 유연하기에 튼튼한 디자인을 할 수 있다.

장점

  • 기존 코드를 수정하지 않고도 행동을 확장하는 방법이 된다.
  • Composition과 delegate를 통해서 실행 중에 새로운 행동을 추가할 수 있다.
  • 상속대신 decorator pattern을 통해서 행동을 확장할 수 있다.
  • OCP 에 충실하면서 유연한 디자인을 만들어 낼 수 있다.

단점

  • 잡다한 클래스들이 많아 질 수 있다.
  • 객체가 다른 객체들로 쌓여 있을 수 있기 때문에 파악하기 힘들 수 있다.
  • 디자인 유연성 면에서는 좋지 않다.

구현 (Coffee 제조)

profile
Frontend

0개의 댓글