주어진 상황 및 용도에 따라 어떤 객체에 책임(기능)을 동적으로 추가하는 패턴을 말한다.
데코레이터라는 말 그대로 장식이라고 생각하면 편하다.
기본 기능을 가지고 있는 클래스를 하나 만들어주고 추가할 수 있는 기능들을 추가하기 편하도록 설계하는 방식이다.
- Component: 실질적인 인스턴스를 컨트롤 하는 역할
- ConcreteComponent: Component의 실질적인 인스턴스의 부분으로 책임의 주체 역할
- Decorator: Component와 ConcreteDecorator를 동일시 하게 해주는 역할
- ConcreteDecorator: 실질적인 장식 인스턴스 및 정의이며 추가된 책임의 주체
- 기존 코드를 수정하지 않고도 데코레이터 패턴을 통해 행동을 확장시킬 수 있다.
- 구성과 위임을 통해서 실행중에 새로운 행동을 추가할 수 있다.
- 의미없는 객체들이 너무 많이 추가될 수 있다.
- 데코레이터를 너무 많이 사용하면 코드가 필요 이상으로 복잡해질 수 있다.
- 클래스의 요소들을 계속해서 수정하면서 사용하는 구조가 필요한 경우
- 여러 요소들을 조합해서 사용하는 클래스 구조인 경우