리셋 되지 말자

프록시 패턴(Proxy Pattern) 본문

Java(폐지)/디자인 패턴

프록시 패턴(Proxy Pattern)

kyeongjun-dev 2020. 8. 4. 14:39

프록시란


프록시는 대리자, 대변인이라는 뜻을 가진다. 다른 누군가를 대신해 그 역할을 수행한다고 할 수 있다.

프록시가 없는 예제-runSomething() 메서드르 직접 호출

  • Service.java
package proxyPattern;

public class Service {
    public String runSomething() {
        return "Service!!";
    }
}
  • ClientWithNoProxy.java
package proxyPattern;

public class ClientWithNoProxy {
    public static void main(String args[]) {
        Service service = new Service();
        System.out.println(service.runSomething());
    }

}

프록시가 적용된 예제

  • IService.java
package proxyPattern;

public interface IService {
    public abstract String runSoemthing();
}
  • Service.java
package proxyPattern;

public class Service implements IService{
    public String runSomething() {
        return "Service!!!";
    }
}
  • Proxy.java
package proxyPattern;

public class Proxy implements IService{
    IService service1;

    public String runSomething() {
        System.out.println("호출에 대한 흐름 제어가 주목적, 반환 결과를 그대로 전달");
        service1 = new Service();
        return service1.runSomething();
    }
}
  • ClientWithProxy.java
package proxyPattern;

public class ClientWIthProxy {
    public static void main(String[] args) {
        //프록시를 이용한 호출
        IService proxy = new Proxy();
        System.out.println(proxy.runSomething());
    }
}
  • 결과

프록시 패턴의 중요 포인트


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

핵심 포인트


프록시 패턴은 실제 서비스 메서드의 반환값에 가감(반환값을 조절하는 등)하는것이 목적이 아닌, '흐름 제어'가 목적이다.
프록시 패턴은 개방 폐쇄 원칙(OCP)와 의존 역전 법칙(DIP)가 적용된 설계 패턴이다.

Comments