- 프록시 패턴

부가기능을 통해 핵심기능을 이용하게 되는것.

부가기능 코드에서는 핵심기능으로 요청을 위임해주는 과정에서 자신이 가진 부가적인 기능을 적용

해줄 수 있다. 비즈니스 로직 코드에 트랜잭션 기능을 부여해주는 것이 바로 대표적인 경우이다.


이렇게 마치 자신이 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것을 대리자, 대리인과 같은 역할을 한다고 해서 프록시(Proxy) 라고 부른다.


그리고 프록시를 통해 최종적으로 요청을 위임받아 처리하는 실제 오브젝트를 타깃(target) 또는

실체(real subject)라고 부른다.


프록시는 사용 목적에 따라 두 가지로 구분 할 수 있다.

첫째는 클라이언트가 타깃에 접근하는 방법을 제어하기 위해서다.

두번째는 타깃에 부가적인 기능을 부여해주기 위해서다.



- 데코레이터 패턴

데코레이터 패턴은 타깃에 부가적인 기능을 런타임 시 다이내믹하게 부여해주기 위해 프록시를

사용하는 패턴을 말한다.


다이내믹하게 기능을 부가한다는 의미는 컴파일 시점, 즉 코드상에서는 어떤 방법과 순서로 프록시와 타깃이 연결되어 사용되는지 정해져 있지 않다는 뜻이다.


이 패턴의 이름이 데코레이터라고 불리는 이유는 마치 제품이나 케잌 등을 여러 겹으로 포장하고 그 위에 장식을 붙이는 것처럼 실제 내용물은 동일하지만 부가적인 효과를 부여해줄 수 있기 때문이다.


따라서 데코레이터 패턴에서는 프록시가 꼭 한 개로 제한되지 않는다.

프록시가 직접 타깃을 사용하도록 고정시킬 필요도 없다. 그저 프록시가 여러개라면 순서를 정해서 단계적으로 위임하는 구조로 만들면 된다.


예를 들어, 소스코드를 출력하는 기능을 가진 핵심기능이 있다고 생각해보자.


이 클래스에 데코레이터 개념을 부여해서 타깃과 같은 인터페이스를 구현하는 프록시를 만들 수 있다. 예를 들어 소스코드에 라인넘버를 붙여준다거나, 문법에 따라 색을 변경해주거나, 특정 폭으로 소스를 잘라주거나, 페이지를 표시해주는 등의 부가적인 기능을 각각 프록시로 만들어주고 런타임 시에 이를 적절한 순서로 조합해서 사용하면 된다.



'Server Enterprise > Doc' 카테고리의 다른 글

[HashMap] 다중 리스트 데이터 담기  (0) 2014.02.18
[AOP] 애스펙트 지향 프로그래밍  (0) 2014.01.24
[Templet & Callback] 패턴  (0) 2014.01.24
[JSPF] Jsp Include 방식의 차이와 JSPF 설명  (0) 2013.10.30
URI Encoding  (0) 2013.02.17

+ Recent posts