디자인 패턴 중 하나로, 다른 무언가와 이어지는 인터페이스 역할을 하는 클래스를 의미한다.
프록시의 사전적 정의는 '대리인'이라는 의미로, 원래 자신이 해야할 역할을 다른 무엇이가가 대신 하는 것이라는 뜻으로 접근할 수 있다.
예를 들어, 보안 분야에서 보안상의 이유로 서버를 외부에 노출시키지 않기 위해 서버와 클라이언트 중간에서 연결을 담당하는 서버를 프록시서버라고 부른다.
인터페이스를 사용하고 싶을 때 클래스에 대해 객체가 들어갈 자리에 대리자 객체를 대신 투입하여,
클라이언트는 실제 실행시킬 클래스에 대한 메소드를 호출하여 반환값을 받는지 대리 객체의 메소드를 호출해서 반환값을 받는지 모르게 하는 것을 말한다.
위의 그림을 보면, Client에서 request()를 호출하면 Proxy가 request()를 호출하여 RealSubject의 request()를 호출하게 된다.
Client → Procy → RealSubject
실제 메소드가 호출되기 이전에 필요한 기능(전처리...)을 구현 객체 변경없이 추가할 수 있다.
→ 코드 변경의 최소화
캐시를 사용할 수 있다.
→ 프록시가 내부 캐시를 통해 데이터가 캐시에 존재하지 않는 경우에만 주체 클래스에서 작업이 실행될 수 있도록 제어 할 수 있다.
⇒ 부하 감소
기존 객체를 수정하지 않고 일련의 로직을 프록시 패턴을 통해 추가할 수 있다.
프록시는 기존 객체와 클라이언트의 요청 사이에 위치해 있기 때문에 하나의 방패 역할을 하기도 한다.
https://esoongan.tistory.com/180
https://today-retrospect.tistory.com/102 ← 정리 엄청 잘 해 두심