Decorator Pattern (데코레이터 패턴)
Decorator Pattern
정의
상속 또는 interface를 이용하여 Type을 맞춰 객체의 추가적인 요건을 동적으로 추가한다. 서브클래스(decorator class)를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제시한다. 중요한점은 Decorator는 상속을 통해서 행동을 물려받는 것이 목적이 아니라는 것이다.
구성
1. 각 구성요소는 직접 쓰일 수도 있고 decorator로 감싸져서 쓰일 수 있다.
2. ConcreteComponent에 새로운 행동을 동적으로 추가하게 된다.
3. 각 decorator 안에는 Component 객체가 들어있다.
4. Decorator는 자신이 decorate할 구성요소와 같은 interface나 abstract class를 implement 한다.
5. Decorator는 component의 상태를 확장할 수 있다.
6. ConcreteDecorator에는 그 Object가 decorate하고 있는 것을 위한 interface 변수가 있다.
7. decorator에서 새로운 method를 추가할 수 있다.
l OCP (Open-Closed Principle) : class는 확장에 대해서는 open 해야 하지만 코드 수정에 대해서는 close 해야 한다. 즉 기존 코드는 건드리지 않은 채로 확장을 통해서 새로운 행동을 추가할 수 있도록 코드의 수정을 허용한다는 것으로 기능 추가에 유연하기에 튼튼한 디자인을 할 수 있다.
장점
1. 기존 코드를 수정하지 않고도 행동을 확장하는 방법이 된다.
2. Composition과 delegate를 통해서 실행 중에 새로운 행동을 추가할 수 있다.
3. 상속대신 decorator pattern을 통해서 행동을 확장할 수 있다.
4. OCP 에 충실하면서 유연한 디자인을 만들어 낼 수 있다.
단점
1. 잡다한 클래스들이 많아 질 수 있다.
2. 객체가 다른 객체들로 쌓여 있을 수 있기 때문에 파악하기 힘들 수 있다.
3. 디자인 유연성 면에서는 좋지 않다.
구현 (Coffee 제조)
'SW > DesignPattern' 카테고리의 다른 글
Singleton Pattern (싱글턴 패턴) (0) | 2017.09.05 |
---|---|
Factory Pattern (팩토리 패턴) (0) | 2017.09.05 |
Observer Pattern (옵저버 패턴) (0) | 2017.09.05 |
Strategy Pattern (스트레테지 패턴) (0) | 2017.09.05 |
DesignPattern이란? 왜쓰지? (0) | 2017.09.05 |