데코레이터 패턴

데코레이터 패턴(Decorator Pattern)

특정 객체에 동적으로 원하는 추가 기능을 포장하듯이 조합하여 객체의 기능을 확장하는 패턴

  • 핵심 기능을 하는 컴포넌트와 부가 기능을 담당하는 데코레이터가 동일 인터페이스를 가짐

  • 유연성과 확장성을 높이면서 클래스 폭발 문제를 피하고 단일 책임 원칙을 지킬 수 있음

    • 기능 추가 시, 상속을 사용하는 대신 객체 합성(Composition)을 통해 기능을 동적으로 확장

    • 데코레이터는 필요한 기능 수만큼만 클래스가 늘어남 (조합하여 사용하면 되므로)

    • 핵심 기능(컴포넌트)과 부가 기능(데코레이터)이 분리되어 코드가 깔끔하고 유지보수가 용이해짐

  • SOLID 원칙중 OCP(개방-폐쇄 원칙)을 준수한 패턴

    • 객체를 동적으로 구성하면 기존 코드를 고치는 대신 새로운 코드를 만들어서 기능을 추가할 수 있음

    • 기존 코드를 건드리지 않아 코드 수정에 따른 버그나 의도하지 않은 부작용을 방지할 수 있음


1. 컴포넌트 인터페이스 정의

핵심 기능을 갖는 객체와 추가 기능을 가진 데코레이터가 모두 구현해야하는 인터페이스

interface Coffee {
  cost(): number
  getDescription(): string
}

2. 구체적인 컴포넌트 정의

데코레이션될 원본 객체

3. 데코레이터 클래스 정의

모든 구체적인 데코레이터 클래스가 상속받을 추상 클래스

4. 구체적인 데코레이터 정의

데코레이터 추상 클래스를 상속받아 추가 기능을 구현

5. 클라이언트 코드

Last updated