文書の過去の版を表示しています。
the Definition of Proxy Pattern
원격 프록시(Remote Proxy)는 일반적인 프록시 패턴(Proxy Pattern)을 구현하는 방법 가운데 하나입니다. 이 외에도 몇 가지 변형된 방법이 있는데, 잠시 후에 알아보도록 하겠습니다. 일단 지금은 일반 프록시 패턴 에 대해서 살표보도록 하겠습니다.
프록시 패턴은 다음과 같이 정의됩니다.
프록시 패턴 - 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴
프록시는 다른 객체에 대한 대변자라고 봐도 무방합니다. 하지만 접근을 제어하는 프록시는 어떤 것일까요? 조금 이상하게 들릴수도 있겠지만, 너무 어렵게 생각하진 않으셔도 됩니다. 뽑기 기계의 경우에는 프록시가 원격 객체에 대한 접근을 제어하고 있다고 생각하면 되거든요. 클라이언트인 모니터링용 객체에서 원격 객체하고 직접 데이터를 주고 받을 수 없었기 때문에 프록시에서 접근을 제어해 줘야 했습니다. 따라서 어떤 면에서 보면 원격 프록시가 접근을 제어해서 네트워크 관련 사항을 챙겨 줬다고 할 수도 있는 거죠. 프록시 패턴에는 수많은 변종이 있습니다. 그리고 그러한 변종들은 대개 프록시에서 접근을 제어하는 방법면에서 차이를 보입니다. 자세한 내용은 나중에 알 아보기로 하고, 일단 프록시에서 접근을 제어하는 몇가지 방법을 나열해 보면 다음과 같습니다.
- 원격 프록시를 써서 원격 객체에 대한 접근을 제어할 수 있습니다.
- 가상 프록시(virtual proxy)를 써서 생성하기 힘든 자원에 대한 접근을 제어할 수 있습니다.
- 보호 프록시(protection proxy)를 써서 접근 권한이 필요한 자원에 대한 접근을 제어할 수 있습니다.
프록시 패턴의 정의에 대해서는 이 정도면 된 것 같으니까 클래스 다이어그램을 살펴볼까요?
Class Diagram
다이어그램을 훑어볼까요?
우선 RealSubject와 Proxy의 인터페이스를 제공하는 Subject 인터페이스가 있습니다. 두 객체에서 똑같은 인터페이스를 구현하기 때문에 RealSubject가 들어가야 할 자리에 Proxy를 대신 집어넣을 수 있습니다.
실제 작업은 RealSubject 객체에서 처리됩니다. Proxy는 이 객체의 대변인 역할을 하면서 이 객체에 대한 접근을 제어하죠.
Proxy에는 RealSubject에 대한 레퍼런스가 들어있습니다. Proxy에서 RealSubject를 생성하거나 제거하는 역할을 책임지는 경우도 있습니다.클라이언트는 항상 Proxy를 통해서 RealSubject하고 데이터를 주고 받습니다. Proxy와 RealSubject는 똑같은 인터페이스(Subject)를 구현하기 때문에 RealSubject 객체가 들어갈 자리라면 어디든지 Proxy를 대신 집어넣을 수 있습니다. Proxy는 RealSubject에 대한 접근을 제어하는 역할도 맡게 됩니다. RealSubject가 원격 시스템에서 돌아가거나, 그 객체를 생성하는 데 비용이 많이 들거나, 어떤 방식으로든지 RealSubject에 대한 접근이 통제되어 있는 경우에 접근을 제어하는 객체가 필요할 수 있습니다.
지금까지 일반적인 프록시 패턴에 대해서 살펴봤습니다. 이제 프록시를 활용하는 다른 방법을 살펴보도록 하죠.