본문 바로가기
Design Pattern

[Design Pattern] 데코레이터 패턴(Decorator Pattern)

by jinjin98 2022. 10. 3.

이전 포스팅인 프록시 패턴에서

프록시 패턴과 데코레이터 패턴 둘 다 프록시를 사용하지만 의도에 따라서 구분할 수 있다고 설명했습니다.

프록시 패턴: 접근 제어가 목적

데코레이터 패턴: 새로운 기능 추가가 목적

데코레이터 패턴은 원본에 장식을 더하는 패턴이며 프록시 패턴과 구현 방법이 같습니다.

다만 프록시 패턴은 클라이언트가 최종적으로 돌려 받는 반환 값을 조작하지 않고 그대로 전달하는 반면

데코레이터 패턴은 클라이언트가 받는 반환값에 장식을 덧붙입니다. 

예제를 살펴보겠습니다.

 

public interface IService {
    public abstract String runSomething();
}

 

public class Decorator implements IService {
    IService service;

    @Override
    public String runSomething() {
        System.out.println("데코레이터 호출");

        service = new Service();

        return "부가 기능을 더한" + service.runSomething();
    }
}

 

public class Service implements IService {

    @Override
    public String runSomething() {
        return"서비스 호출";
    }
}

 

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

 

 

IService 라는 인터페이스를 생성하고 Decorator 와 Service 클래스 둘 다 IService 를 구현했습니다.

Client 에서 Decorator 객체를 생성해 호출해주면 Decorator 안에서

Client 가 원래 호출하려던 Service 객체를 생성하고 원래 반환하려던 값을 조작하여 반환합니다.

값을 조작해서 반환하는 부분을 제외하고는 프록시 패턴과 매우 유사한걸 확인 할 수 있습니다.

 

이 포스팅은 자바 객체 지향의 원리와 이해의 내용을 참고하여 작성했습니다.

댓글