3. Context
• 클라이언트가 특정 서비스 혹은 모듈
(Component) 에 접근 하는데 , 언어마
다 , OS 마다 방법이나 구현이 틀리고
복잡하다 .
4. Problem
• Component 를 사용 / 접근 하는데 안전해
야 한다 .
• 클라이언트 입장에서 환경 (OS, 언어… )
에 상관없이 동작이나 구문이 비슷해야
한다 .
• 환경에 의한 성능하락이나 비용 손실을
고민해야 한다 .
5. Solution
• 클라이언트가 Component 에 직접 접근
하지 않고 대리자를 통해 원하는 동작이
나 결과를 얻을 수 있게 한다 .
• 대리자는 Component 의 Interface 를
제공하고 , 클라이언트가 원하는 값 / 동
작에 대하여 안전 하게 결과를 얻을 수
있도록 추가적인 작업을 해야 한다 .
6. Structure
Class
•Client
협력자
•Proxy
책임
• Proxy 를 통해 인터페이스
를 사용 .
•자체 작업을 수행 .
Class
•AbstractOriginal
협력자
책임
• Proxy 와 원본 클래스
의 추상 base 클래스
.
Class
•Proxy
협력자
•Original
책임
• 원본 (Original) 인터페
이스를 Client 에 제공 .
•안전하게 접근하고 올바
른 동작을 보장해야 한다
.
Class
•Original
협력자
책임
• 특정 서비스 , 동작을
구현 한다 .
8. Implementation
• Proxy 에서 처리할 것과 Original 에서 처
리할 항목을 파악한다 .
• 추상 기본 클래스에서 Original 과 Proxy
클래스를 파싱한다 .
• Proxy 클래스의 동작을 구현한다 .
• Proxy 클래스에 옮겨진 작업이 Client 와
Origin 클래스에 중복되어있다면 제거한다
.
• Proxy 클래스와 Origin 클래스를 연결한
다 .
• Origin 과 클라이언트간 직접적인 관계를
제거 한다 .
9. Variant(1)
• Remote Proxy : 원본의 물리적 위치를
저장하고 클라이언트는 Proxy 를 이용해
원본데이터를 얻어올 수 있다 .
• Protection Proxy : 권한이 필요한 작
업이나 데이터를 엑세스 할때 프록시가
권한을 검사하고 결과를 클라이언트에게
준다 .
10. Variant(2)
• Cache Proxy : Proxy 는 원본
(Original) 의 데이터를 미리 받아 두고
Client 는 빠르게 데이터를 처리 할 수
있다 . Proxy 는 데이터의 유효성 검사나
Client 의 반복적인 데이터 요청에 대한
처리가 필요하다 .
11. Variant(3)
• Synchronization Proxy : 다수의 쓰레드가 원본 데이터에 접근
하려 할 때 동기화 작업을 Proxy 에서 수행 하도록 한다 .
template <class T>
class LockingProxy
{
public:
LockingProxy(T* pObj) : pointee_ (pObj)
{ pointee_->Lock(); }
~LockingProxy()
{ pointee_->Unlock(); }
T* operator->() const
{ return pointee_; }
private:
LockingProxy& operator=(const LockingProxy&);
T* pointee_;
};
출처 : Modern C++ Design
12. Variant(4)
• Counting Proxy : 어떤 instance 의 사
용 counting 을 Proxy 에서 계산하고
생성 / 삭제 작업을 하는 구조에 사용
될 수 있다 .
• Virtual Proxy : client 가 데이터를 요
청하면 Proxy 는 로컬에 저장된 데이터
를 클라이언트에 주고 , 존재하지 않는
데이터는 원본에 요청하여 필요한 데이
터를 얻어온다 .
14. Known Use
• NeXTSTEP
• OMG – CORBA(Common Object Request
Broker Architecture)
• World Wide Web
• OLE(Object Linking & Embedding)
15. Consequence – 장점 -
• 효율을 향상 시키고 비용을 감소시킨다 .
• 서버 Component 의 위치와 Client 가 분
리되어 네트워크가 변경이 되더라도
Client 는 거기에 상관없이 코드를 안정
적으로 사용할 수 있다 .
• Proxy 클래스로 인해 Client 가 수행해
야할 불필요한 코드를 덜어준다 .
16. Consequence – 단점 -
• 우회 방식을 사용하기 때문에 성능이 저
하된다 .
• 지나치게 사용하면 과부하를 가져올수
있다 .