프록시 패턴이란?

어떤 객체에 대한 접근을 제어하는 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴

다른 객에 대한 접근 제어나 가상 객체로 실제 처리시에만 처리 가능하게 하는 패턴

구조

structure.png

  • Subject
    Proxy와 RealSubject의 인터페이스
  • Proxy
    클라이언트 요구를 처리할 수 있을 만큼 처리, 자신만으로 처리가 안될시 실 객체에 위임
  • RealSubject
    실제 처리하는 객체

종류

  • 원격 프록시
    원격 객체에 대한 접근 제어가 가능합니다
  • 가상 프록시 Virtual Proxy
    객체의 생성비용이 많이 들어 미리 생성하기 힘든 객체에 대한 접근 및 생성시점 등을 제어합니다
  • 보호 프록시 Protection Proxy
    객체에 따른 접근 권한을 제어해야하는 객체에 대한 접근을 제어할 수 있습니다
  • 방화벽 프록시
    일련의 네트워크 자원에 대한 접근을 제어함으로써 주 객체를 나쁜 클라이언트들로부터 보호하는 역할을 합니다
  • 스마트 레퍼런스 프록시 Smart Reference Proxy
    주 객체가 참조될 때마다 추가 행동을 제공합니다
  • 캐싱 프록시 Caching Proxy
    비용이 많이 드는 작업의 결과를 임시로 저장 하고
    추후 여러 클라이언트에 저장된 결과를 실제 작업처리 대신 보여주고 자원을 절약하는 역할을 합니다
  • 동기화 프록시 Synchronization Proxy
    여러 스레드에서 주 객체에 접근하는 경우에 안전하게 작업을 처리할 수 있게 해줍니다
    주로 분산 환경에서 일련의 객체에 대한 동기화 된 접근을 제어해주는 자바 스페이스에서 쓰입니다
  • 복잡도 숨김 프록시 Complexity Hiding Proxy
    복잡한 클래스들의 집합에 대한 접근을 제어하고, 복잡도를 숨깁니다
  • 지연 복사 프록시 Copy-On-Write Proxy
    클라이언트에서 필요로 할 때까지 객체가 복사되는 것을 지연시킴으로써 객체의 복사를 제어합니다
    변형된 가상 프록시라고 할 수 있으며 Java 5 의 CopyOnWriteArrayList 에서 쓰입니다

장점

실제 처리되는 로직이 비용이 클 경우

처리 순서를 미뤄 효율적으로 대처할 수 있다.

실제 처리하는 객체에 대해 앞서 처리과정을 거친 후 처리할 수 있다.

단점

추가적으로 객체가 생성되어, 오히려 성능이 저하될 수 있다.

올바른 처리과정을 위해 스레드 처리 및 동기화 로직을 적절히 구사해야한다.

시스템 자체의 코드 복잡도가 늘어난다.


참조