Decorator 패턴은 원래 클래스를 수정하지 않고 객체를 감싸(wrap) 행위나 책임을 동적으로 추가합니다. 기능을 확장하기 위한 서브클래싱의 유연한 대안을 제공하여, 행위를 조합할 수 있게 합니다.
Decorator 패턴이 하는 일
DECORATOR → 동일한 인터페이스를 유지하면서 객체를 감싸 행위를 추가함:
→ decorator가 원본을 감싸고, 자신의 행위를 추가하며, 원본에 위임함
→ decorator를 쌓을(stack) 수 있음(감싼 객체를 다시 감쌈) → 여러 행위를 조합
→ 원래 클래스를 수정하거나 서브클래싱을 쓰지 않고 기능을 추가함
→ "감싸서 확장" — 유연하고 조합 가능한 행위 추가
예시
coffee = { : , : };
() {
{ : c.() + , : c.() + };
}
() {
{ : c.() + , : c.() + };
}
coffee = ((coffee));
coffee.();
