프록시는 클라이언트가 백그라운드에서 실제 서빙 객체에 액세스 하기 위해 호출하는 래퍼 또는 에이전트 객체다. 프록시의 사용은 단순히 실제 객체로 전달하거나 추가 로직을 제공할 수 있다. 실제 개체에 대한 작업이 리소스 집약적인 경우 캐싱하거나 실제 개체에 대한 작업이 호출되기 전에 전제 조건을 확인하는 등의 추가 기능을 제공할 수 있다. 클라이언트의 경우 프록시 객체를 사용하는 것은 실제 객체를 사용하는 것과 유사하며, 이는 둘 다 동일한 인터페이스를 구현하기 때문이다.
프록시 디자인 패턴은 다음과 같은 문제를 해결한다.
- 서빙 객체에 대한 접근을 제어해야 한다.
- 객체에 접근할 때 추가 기능을 제공해야 한다.
- 로깅, 캐싱, 지연 초기화, 접근 횟수 제한 등
프록시 디자인 패턴이 제안하는 해결책
- 프록시 객체는 서빙 객체와 동일하게 사용될 수 있다.
- 프록시 객체는 서빙 객체에 대한 접근을 제어하기 위한 추가적인 기능을 구현할 수 있다.
- 지연 초기화: 객체 초기화를 실제로 초기화가 필요한 시점까지 지연할 수 있다.
- 로깅: 각 요청을 서비스에 전달하기 전에 로깅할 수 있다.
- 캐싱: 항상 같은 결과를 생성하는 반복 요청들에 대해 캐싱을 구현할 수 있다. 프록시 객체는 요청들의 매개변수들을 캐시 키들로 사용할 수 있다.
다른 패턴과의 관계
- 어댑터 패턴
- 프록시 패턴은 서빙 객체와 같은 인터페이스를 사용하지만 어댑터는 대상 객체와 다른 인터페이스를 사용한다.
- 파사드 패턴
- 프록시 패턴은 서빙 객체와 같은 인터페이스를 사용하기에 서로 상호 교환이 가능하지만 퍼사드 패턴은 서브 시스템을 위한 새로운 인터페이스가 필요하여 서로 상호 교환이 어렵다.
- 데코레이터 패턴
- 프록시 패턴은 자체적으로 자신의 서비스 객체의 생명 주기를 관리하지만 데코레이터의 합성은 항상 클라이언트에 의해 제어된다.
- 프록시 패턴 위키: https://en.wikipedia.org/wiki/Proxy_pattern
- 프록시 패턴 구루: https://refactoring.guru/ko/design-patterns/proxy
'자바' 카테고리의 다른 글
구조 패턴 정리 (0) | 2025.04.29 |
---|---|
Composite Pattern 정리 (0) | 2025.04.18 |
Facade Pattern 정리 (0) | 2025.04.17 |
Delegation Pattern 정리 (0) | 2025.04.14 |
Decorator Pattern 정리 (0) | 2025.04.11 |