자바

Proxy Pattern 정리

belljun 2025. 4. 28. 00:02

프록시는 클라이언트가 백그라운드에서 실제 서빙 객체에 액세스 하기 위해 호출하는 래퍼 또는 에이전트 객체다. 프록시의 사용은 단순히 실제 객체로 전달하거나 추가 로직을 제공할 수 있다. 실제 개체에 대한 작업이 리소스 집약적인 경우 캐싱하거나 실제 개체에 대한 작업이 호출되기 전에 전제 조건을 확인하는 등의 추가 기능을 제공할 수 있다. 클라이언트의 경우 프록시 객체를 사용하는 것은 실제 객체를 사용하는 것과 유사하며, 이는 둘 다 동일한 인터페이스를 구현하기 때문이다.

 

프록시 디자인 패턴은 다음과 같은 문제를 해결한다.

  • 서빙 객체에 대한 접근을 제어해야 한다.
  • 객체에 접근할 때 추가 기능을 제공해야 한다.
    • 로깅, 캐싱, 지연 초기화, 접근 횟수 제한 등

 

프록시 디자인 패턴이 제안하는 해결책

  • 프록시 객체는 서빙 객체와 동일하게 사용될 수 있다.
  • 프록시 객체는 서빙 객체에 대한 접근을 제어하기 위한 추가적인 기능을 구현할 수 있다.
    • 지연 초기화: 객체 초기화를 실제로 초기화가 필요한 시점까지 지연할 수 있다.
    • 로깅: 각 요청을 서비스에 전달하기 전에 로깅할 수 있다.
    • 캐싱: 항상 같은 결과를 생성하는 반복 요청들에 대해 캐싱을 구현할 수 있다. 프록시 객체는 요청들의 매개변수들을 캐시 키들로 사용할 수 있다.

 

다른 패턴과의 관계

  • 어댑터 패턴
    • 프록시 패턴은 서빙 객체와 같은 인터페이스를 사용하지만 어댑터는 대상 객체와 다른 인터페이스를 사용한다.
  • 파사드 패턴
    • 프록시 패턴은 서빙 객체와 같은 인터페이스를 사용하기에 서로 상호 교환이 가능하지만 퍼사드 패턴은 서브 시스템을 위한 새로운 인터페이스가 필요하여 서로 상호 교환이 어렵다.
  • 데코레이터 패턴
    • 프록시 패턴은 자체적으로 자신의 서비스 객체의 생명 주기를 관리하지만 데코레이터의 합성은 항상 클라이언트에 의해 제어된다.