Decorator Pattern
태그 :
- 개념
- - 객체에 장식을 해가는 패턴
I. 의도
상속없이 객체에 동적으로 새로운 서비스를 추가할 수 있게 한다.
데코레이터를 사용하면 서브 클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있다
정의: 객체에 장식을 해가는 패턴
객체에 추가 요소를 동적으로 더할 수 있다.
II. 활용
- 동적으로/ 투명하게 객체에 새로운 서비스를 추가할 때, 다른 객체에 어떠한 영향도 주지 않게 된다
- 제거될 수 있는 서비스일 때
III. 결과
- 단순 상속보다 설계의 융통성 증대
- 데코레이터와 해당 컴포넌트는 동일한 것이 아니다. 데코레이터는 클라이언트에게 일관된 인터페이스를 제공하는 껍데기이다.
관련 패턴: Adpater는 인터페이스스를 변경시켜 주지만 Decorator는 객체의 책임과 행위를 변화시킨다
Decorator는 한 컴포넌트만을 갖는 Composite로 볼 수 있으나, decorator의 목적은 객체의 합성이 아니라 객체에 새로운 행위를 추가하기 위한 것이다
Strategy는 객체의 내부를 변화시키나 Decorator는 객체의 겉모양을 변경시킨다.
데코레이터를 사용함으로써 작은 규모의 객체들이 많이 생성된다.
참여자 |
역할 |
Component |
동적으로 추가할 서비스를 가질 가능성이 있는 객체들에 대한 인터페이스 |
ConcreteComponent |
추가적인 서비스가 실제로 정의되어야 할 필요가 있는 객체 |
Decorator |
Component 객체에 대한 참조자를 관리하면서 Component에 정의된 인터페이스를 만족하도록 인터페이스를 정의 |
ConcreteDecorator |
Component에 새롭게 추가할 서비스를 실제로 구현하는 클래스 |
상위클래스(Decorator)와 하위 클래스(ConcreteDecorator)의 관계
가. 하위 클래스는 상위클래스의 형식을 멤버변수로 가짐.
1) ChildDecorator 는 Decorator를 멤버변수로 받음
2)일반적으로 생성자의 인자로 받아서 멤버변수로 셋팅되며. 별도의 setter를 가지는 경우는 거의 없음.
나. 하위 클래스는 상위클래스를 상속 받아 상위클래스의 메소드 이용.
1)하위 클래스의 getMerong() 이라는 메소드는 상위 클래스의 getMerong()을 오버라이드하지만, 내부적으로 상위클래스의 getMerong()을 사용
다. Sample Code
-------------- 데코레이터 -------------
|