본문 바로가기

Development Note

Design Pattern : Proxy Pattern

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
위키피디아에 Proxy Pattern에 관련한 글이 있어서 발췌 & 해석해 보았습니다. (출처 : Wikipedia "Proxy Pattern")


In computer programming, the proxy pattern is a software design pattern.

A proxy, in its most general form, is a class functioning as an interface to another thing. The other thing could be anything: a network connection, a large object in memory, a file, or some other resource that is expensive or impossible to duplicate.
A well-known example of the proxy pattern is a reference counting pointer object, also known as an "auto pointer". (See auto_ptr for the C++ standard library's version of this pattern.)

컴퓨터 프로그래밍에서, 프록시 패턴은 소프트웨어 디자인 패턴입니다.

대부분 프록시라는 일반적인 형식은 다른 클래스의 인터페이스처럼 기능을 하는 클래스입니다. 또는 는 복사하기 어렵거나 비용이 많이 드는 네트워크 접속, 메모리의 많은 객체, 파일, 또는 어떤 다른 리소스들을 의미 할 수 있습니다.
프록시 패턴으로 잘 알려진 예로는 “Auto Pointer" 라고 알려진 a reference counting pointer object 가 있습니다.
The proxy pattern can be used in situations where multiple copies of a complex object must exist. In order to reduce the application's memory footprint in such situations, one instance of the complex object is created, and multiple proxy objects are created, all of which contain a reference to the single original complex object. Any operations performed on the proxies are forwarded to the original object. Once all instances of the proxy are out of scope, the complex object's memory may be deallocated.

프록시 패턴은 complex object의 다수의 복사본들이 반드시 존재해야 하는 상황들에 쓰일 수 있습니다. 이런 상황에서 application이 메모리에 영향을 미치는 것을 줄여주는 대신에 한 개의 complex object의 인스턴스가 만들어지고, 모두 다 한 개의 원래의 complex object의 레퍼런스를 포함하고 있는 다수의 프록시 객체들이 만들어집니다. 프록시들에서 실행되는 어떤 연산들은 원래의 객체를 가르키게 됩니다. 프록시의 모든 인스턴스 들은 범위 밖이 되고, complex object의 메모리는 해제될 것입니다.



Types of proxy pattern include:

   * Remote proxy: Provides a reference to an object located in a different address space on the same or different machine.
   * Virtual proxy: Allows the creation of a memory intensive object on demand. The object will not be created until it is really needed. (See also Lazy evaluation.)
   * Copy-on-write proxy: Defers copying (cloning) a target object until required by client actions. This is really a special case of the "virtual proxy" pattern.
   * Protection (access) proxy: Provides different clients with different levels of access to a target object.
   * Cache proxy: Provides temporary storage of the results of expensive target operations so that multiple clients can share the results. (See also Memorization.)
   * Firewall proxy: Protects targets from bad clients (or vice versa).
   * Synchronization proxy: Provides concurrency control over an unsynchronized target object.
   * Smart reference proxy: Provides additional actions whenever a target object is referenced, such as counting the number of references to the object.


프록시 패턴의 형식에 포함되는 것들:

Remote proxy : 레퍼런스를 같거나 다른 머신에서의 다른 주소 공간에 있는 객체에 제공합니다.
Virtual proxy : 객체가 요구하는 메모리의 생성을 허가합니다. 그 객체는 실체로 필요하기 전까지 만들어지지 않을 것입니다. (Lazy evaluation을 확인하세요)
Copy-on-write proxy : 클라이언트의 행동에 의해서 필요할 때 까지 대상 객체를 복사하는 것을 늦춥니다. 이것은 virtual proxy 패턴의 아주 특별한 경우입니다.
Protection (access) proxy : 다른 클라이언트에게 대상 객체에 접근할 수 있는 다른 레벨을 제공합니다.
Cache proxy : 다수의 클라이언트들이 그 결과 값들을 공유하기 위해서 있는 고비용의 대상 오퍼레이터들의 결과들의 임시 저장소를 제공합니다.(Memorization 참조)
Firewall proxy : 악의를 가진 클라이언트로부터 대상들을 보호합니다.
Synchronization proxy : 동기화되지 않은 대상 객체를 동시에 제어하는 것들 제공합니다.
Smart reference proxy : 객체의 레퍼런스들의 숫자를 셀 때와 같이 대상 객체가 참조될 때마다 추가적인 동작들을 제공합니다.

프록시 패턴에 대해서 한마디로 요약을 하자면
Proxy 패턴은 인스턴스를 만드는데 비용이 많이 드는 좀더 복잡한 클래스에 대하여 간단한 place-holder 클래스를 제공한다.