언린이 2021. 9. 5. 11:46

Proxy 패턴은 Proxy 객체를 통해 기본 객체에 접근하는 패턴입니다.

 

 

구조

  • Subject
    • Proxy와 RealSubject가 구현해야하는 인터페이스입니다.
    • 두 객체를 동일하게 다루기 위해 존재합니다.
  • Proxy
    • RealSubject와 Client 요청 사이에 존재하는 객체입니다.
    • Subject를 구현함으로써 Client가 RealSubject를 사용하는 것과 별 차이가 없습니다.
  • RealSubject
    • 실질적으로 요청에 대해 주된 기능을 수행하는 객체입니다.
    • Proxy 객체는 내부적으로 RealSubject 객체를 로직에 맞게 사용합니다. (위임)

 

 

활용 상황

  • 기본 객체가 리소스 집약적인 경우에 유용합니다. 자잘한 작업들은 Proxy 객체가 처리하면 됩니다.
  • 기본 객체에 접근을 제어해야하는 경우에 유용합니다. Proxy 객체가 권한에 따라 접근 로직을 다르게 처리하면 됩니다.

 

 

Proxy 패턴의 장단점

  • 장점
    • 기본 객체의 리소스가 무거운 경우, Proxy 객체에서 간단한 처리를 하거나 기본 객체를 캐싱 처리함으로써 부하를 줄일 수 있습니다.
    • 기본 객체에 대한 수정 없이, Client에서의 사용과 기본 객체 사이에 일련의 로직을 Proxy 객체를 통해 넣을 수 있습니다.
    • Proxy는 기본 객체와 요청 사이에 있기 때문에, 일종의 방패 역할을 합니다.
    • 구조와 코드 구현이 간단합니다.
  • 단점
    • Proxy 객체가 중간에 껴있기 때문에, 간혹 응답이 느려질 수 있습니다. (캐싱이 안되어있는 초기 사용의 경우)