데코레이터 패턴을 이해한다.

Goal

  • 데코레이터 패턴의 개념을 이해한다.
  • 예시를 통해 데코레이터 패턴을 이해한다.

데코레이터 패턴이란

참고

예시

도로 표시 방법 조합하기

문제점

  1. 또 다른 도로 표시 기능을 추가로 구현하는 경우
    • 기본 도로 표시에 교통량을 표시하고 싶다면?
    • // 기본 도로 표시 + 교통량 표시 클래스
      public class RoadDisplayWithTraffic extends RoadDisplay {
         public void draw() {
           super.draw(); // 상위 클래스, 즉 RoadDisplay 클래스의 draw 메서드를 호출해서 기본 도로 표시
           drawTraffic(); // 추가적으로 교통량 표시
         }
         private void drawTraffic() { System.out.println("교통량 표시"); }
      }
      

  2. 여러 가지 추가 기능을 조합해야 하는 경우
    • 기본 도로 표시에 차선 표시 기능과 교통량 표시 기능을 함께 제공하고 싶다면?
    • 위와 같이 상속을 통해 조합의 각 경우를 설계한다면 각 조합별로 하위 클래스(7개)를 구현해야 한다.
    • 즉, 다양한 기능의 조합을 고려해야 하는 경우 상속을 통한 기능의 확장은 각 기능별로 클래스를 추가해야 한다 는 단점이 있다.

해결책

문제를 해결하기 위해서는 각 추가 기능별로 개별적인 클래스를 설계하고 기능을 조합할 때 각 클래스의 객체 조합을 이용하면 된다.

추가 예시

관련된 Post

References