* Proxy Pattern (Surrogate Pattern)
: 객체를 사용하는 시점까지 생성과 초기화에 드는 비용 및 시간을 절약하기위해, 다른 객체에 접근하여 중간 대리 역할을 하는 객체를 만드는 패턴. 예) 객체의 생성이 완료되기 이전에 이 객체를 가상으로 사용할 수 있는 방법을 제공하여, 실제 객체가 필요한 경우만 proxy를 생성하여 부하를 최소화 하는데, 외부에서는 실행되는 진짜 객체가 보이지 않는다.
예) 객체의 생성이 완료되기 이전에 이 객체를 가상으로 사용할 수 있는 방법을 제공한다.
Image load 전에 image정보를 사용방법을 제공하며, 실제 그 이미지가 쓰일 때 loading 한다.
< 적용 영역 및 결과 >
* Remote Proxy(원격 프록시) : 서로 다른 주소 공간에 존재하는 객체에 대한 로컬의 대리자(local representative)를 제공.
요청 메시지와 Argument를 인코딩하여 이를 다른 주소 공간에 있는 실제 대상에게 전달한다.
-> 객체의 원격지 존재여부를 숨길 수 있다.
* Virtual Proxy(가상 프록시) : 많은 비용이 요구되는 객체를 생성하는 경우에 사용. -> 성능 최적화
* Protection Proxy(보호 프록시) : 보호가 요구되는 객체 자체에 대한 실제 접근을 제어하고 대리자를 통해 접근 가능한
정도만 노출. (객체별 접근 권한이 다를 때 유용)
* Smart Reference(스마트 참조) : 단순한 접근 이외의 부가적인 작업을 수행할 필요가 있을 때 사용. (다른 객체가 사용하
지 못하도록 접근 금지 장치를 한다. )
[보호, 스마트]-> 객체에 접근할 때, 수반되는 부가적인 작업이 수행되는 것을 가능하게 해준다.
Proxy: 실제로 참조할 대상에 대한 참조자를 관리한다. Subject 와 동일한 인터페이스를 제공하여
실제 대상을 대체할 수 있어야 한다. 실제 대상에 대한 접근을 제어하고 실제 대상의 생성과
삭제를 책임진다.
Subject: RealSubject 와 Proxy 에 공통적인 인터페이스를 정의하고 있어, RealSubject 가 요청되는
곳에 Proxy 를 사용할 수 있게 한다.
RealSubject: 프록시가 대표하는 실제 객체이다.
* 프록시 패턴 vs 데코레이터 패턴
프록시(Proxy) 패턴은 데코레이터(Decorator) 패턴과 투과적이라는 면에서 유사한 구조를 가지고 있지만, 이 두 가지 패턴은 서로 다른 목적을 가지고 있다. Decorator는 새로운 기능 추가를 쉽게 하는 것이 그 주요 목적인 반면, proxy의 경우 기존에 구현되어 있는 기능의 효율성, 원격 제어, 접근 권한 제어 등을 그 목적으로 한다. 즉, 결과적으로 보면 둘의 차이는 어디에서 진짜 객체가 생성되는가의 문제로 볼 수 있다.



Prev