리셋 되지 말자

데코레이터 패턴(Decorator Pattern) 본문

Java(폐지)/디자인 패턴

데코레이터 패턴(Decorator Pattern)

kyeongjun-dev 2020. 8. 4. 15:07

프록시 패턴 vs 데코레이터 패턴


프록시 패턴은 실제 서비스 메서드의 결과값에 영향을 주지 않지만, 데코레이터 패턴은 클라이언트가 받는 반환값에 장식을 더한다.

  • 프록시 패턴

제어의 흐름을 변경하거나 별도의 로직 처리를 목적으로 한다. 클라이언트가 받는 반환값을 특별한 경우가 아니면 변경하지 않는다.

  • 데코레이터 패턴
    클라이언트가 받는 반환값에 장식을 더한다.

예시 코드

  • IService.java
package decoratorPattern;

public interface IService {
    public abstract String runSomething();
}
  • Service.java
package decoratorPattern;

public class Service implements IService{
    public String runSomething() {
        return "Service !!!";
    }

}
  • Decorator.java
package decoratorPattern;

public class Decorator implements IService{
    IService service;

    public String runSomething() {
        System.out.println("호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식을 더하여 전달");
        service = new Service();
        return "Good" + service.runSomething();
    }
}
  • ClientWithDecorator.java
package decoratorPattern;

public class ClientWIthDecorator {
    public static void main(String[] args) {
        IService decorator = new Decorator();
        System.out.println(decorator.runSomething());
    }
}
  • 결과

프록시 패턴과 정말 유사한데, 결과값에 장식을 더한다는 차이가 있다.

중요 포인트


  • 장식자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 '인터페이스'를 사용
  • 장식자는 실제 서비스에 대한 참조 변수를 갖는다.
  • 장식자는 실제 서비스와 같은 이름을 가진 메서드를 호출하고, 그 반환값에 '장식'을 더해 클라이언트에게 돌려준다.
  • 장식자는 실제 서비스의 멘서드 호출 전후에 별도의 로직을 수행할 수도 있다.

장식자 패턴 한 문장 정리


메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴
프록시 패턴과 마찬가지로 개방 폐쇄 워칙(OCP)와 의존 역전 원칙(DIP)이 적용된 설계 패턴이다.

Comments