본문 바로가기

Programming/DesignPattern

Decorator Pattern (데코레이터 패턴)

1. 데코레이터 패턴이란?

소프트웨어 디자인 패턴중 구조 패턴에 속하는 디자인 패턴입니다. Decorator Pattern은 주어진 상황 및 용도에 따라 어떤 객체에 기능을 동적으로 덧붙이는 패턴으로, 서브 클래스를 이용해 기능을 유연하게 확장할 수 있습니다.

데코레이터 패턴

2. 데코레이터 패턴 구현

2.1 Component Interface(or Abstract Class)

public interface Component {
      public void method();
      ...
}

2.2 ConcreteComponent Class

public class ConcreteComponent implements Component {
      @Override
      public void method() {
             ...
      }
      ...
}

2.3 Decorator Abstract Class

public abstract class Decorator implements Component {
      protected Component component;

      public Decorator(Component component) {
             this.component = component;
      }

      @Override
      public abstract void method();
      ...
}

2.4 ConcreteDecorator Class

public class ConcreteDecorator extends Decorator {

      public ConcreteDecorator(Component component) {
             super(component);
      }

      @Override
      public void method() {
             //이곳에 component.method()를 확장한 기능으로 정의하면 됩니다. 
             //기존의 component를 파라미터로 가지고 있기에 이를 활용할 수 있습니다.
             ...
      }
      ...
}

2.5 사용 예제

public class MainTestClass {
      public static void main(String[] args) {
             Component component = new ConcreteComponent();
             
             component = new ConcreteDecorator(component);

             component.method(); //ConcreteDecorator의 method가 호출됩니다.
      }
      ...
}

3. 정리

데코레이터 패턴의 대표적인 예로는 자바 API의 파일 I/O가 있습니다. 데코레이터 패턴을 이용하면 기존 클래스의 변경없이 유연하게 기능을 확장할 수 있게됩니다. 하지만 각각의 데코레이터 클래스를 구현해야하기 때문에 각 데코레이터 클래스의 역할을 확실히 알고 있어야 합니다. 따라서 너무 많은 데코레이터 클래스가 생기지 않도록 적절한 위치에 데코레이터 패턴을 활용해야합니다.

참고 사이트


'Programming > DesignPattern' 카테고리의 다른 글

Adapter Pattern (어댑터 패턴)  (0) 2019.02.24
Singleton Pattern (싱글톤 패턴)  (0) 2019.02.24