
프록시는 다른 객체에 대한 대체제나 대변자를 제공하는 구조적 디자인 패턴이다. 프록시는 원래 객체에 대한 접근을 제어하므로, 요청이 실제 객체에 전달되기 전후에 추가적인 작업을 수행할 수 있도록 한다.
이는 현실 세계에서 신용카드가 현금의 프록시 역할을 수행하며 동일한 결제 인터페이스를 제공하는 것과 유사하다.
ㅤ

프록시 패턴은 서비스 인터페이스, 실제 서비스 클래스, 프록시 클래스, 클라이언트로 구성된다. 프록시는 서비스 객체와 동일한 인터페이스를 구현하여 서비스 객체로 위장한다.
클라이언트로부터 요청을 받으면 프록시는 실제 서비스 객체를 생성하고 작업을 위임하며, 이 과정에서 객체의 수명 주기를 직접 관리한다.
ㅤ
지연 초기화 (가상 프록시): 자원 소모가 큰 객체를 실제로 필요할 때만 초기화하여 시스템 자원을 절약한다.
접근 제어 (보호 프록시): 클라이언트의 권한을 확인하여 특정 조건이 충족될 때만 요청을 전달한다.
원격 서비스 실행 (원격 프록시): 서비스 객체가 원격 서버에 있을 때 네트워크 통신의 복잡한 세부 사항을 프록시가 대신 처리한다.
로깅 및 캐싱: 서비스 객체에 대한 요청 기록을 유지하거나, 동일한 요청에 대해 결과를 캐싱하여 성능을 향상시킨다.
스마트 참조: 객체를 사용하는 클라이언트가 없을 때 자원을 해제하기 위해 참조 상태를 추적한다.
ㅤ
클라이언트가 알지 못하는 상태에서 서비스 객체를 제어하거나 수명 주기를 관리할 수 있다는 것이 큰 장점이다. 또한 개방/폐쇄 원칙(OCP)을 준수하여 기존 코드를 수정하지 않고 새로운 프록시를 도입할 수 있다.
하지만 새로운 클래스 도입으로 인한 코드 복잡성 증가와 프록시를 거치는 과정에서 발생하는 응답 지연은 단점으로 작용할 수 있다.
ㅤ
Adapter : 어댑터는 다른 인터페이스를 통해 객체에 접근하지만, 프록시는 동일한 인터페이스를 유지한다.
Decorator : 구조는 유사하나 데코레이터는 기능 추가에 중점을 두는 반면, 프록시는 객체의 수명 주기를 직접 관리한다.
Facade : 복잡한 엔티티를 제어한다는 점은 비슷하지만, 프록시는 서비스 객체와 상호 교환이 가능하다는 특징이 있다.
ㅤ