프록시 패턴을 알기 위해선, 먼저 프록시(Proxy)가 무엇을 의미하는 것인지 알아야 한다. Proxy는 대리, 대신이라는 뜻을 갖고 있다. 그 말인 즉슨, 프로그래밍에서 프록시는 무엇인가를 대신, 대리로 처리해준다는 것이다. 이를 현실 추상화하여 빗대어보면 비서의 역할과 많이 닮아있다.
그래서 학문적으로 프록시 패턴은 어떤 다른 객체로 접근하는 것을 통제하기 위해 그 객체의 대리자 역할을 수행하게 하는 객체라고 정의하고 있다. 프록시는 자신의 의견 반영을 할 수 없고, 단지 제어의 흐름을 변경하거나, 다른 로직 수행 시 사용한다. 이를 다시 추상화하여 비서의 역할로 빗대어 보면 비서는 회장에게 의견을 반영해서 수정 작업을 할 수 없다. 오로지 전달만 할 뿐이다. 회장이 각 부서 팀장에게 전달을 하고자 할 때는 비서를 통해 회장의 말을 대신해서 각 부서 팀장에게 전달한다. 이를 그림으로 그려보면 아래의 그림과 같다.
발로 그렸기 때문에 그림이 엉망인 점 ..죄송.. 위와 같이 Real Subject(회장)에게 Proxy(비서)는 부서팀장들이 회장 응답 요청을 처리하기 위해 간접적으로 Proxy가 요청하게 된다. 이를 코드로 나타내보면 다음과 같다.
package DesignPattern.Proxy;
// 회사 인터페이스
public interface IService {
String run();
}
package DesignPattern.Proxy;
// 회사 (프록시)
public class Proxy implements IService {
IService iService;
@Override
public String run() {
System.out.println("호출에 대한 흐름 제어가 주 목적이며, 반환 결과를 그대로 전달");
iService = new Service();
return iService.run();
}
}
package DesignPattern.Proxy;
// 회장
public class Service implements IService {
@Override
public String run() {
return "Good Service";
}
}
package DesignPattern.Proxy;
// 각 부서 팀장
public class Client {
public static void main(String[] args) {
// 직접 호출하지 않고, 프록시를 호출한다.
IService proxy = new Proxy();
System.out.println(proxy.run());
}
}
/* 실행결과
호출에 대한 흐름 제어가 주 목적이며, 반환 결과를 그대로 전달
Good Service
*/
즉, 프록시를 클라이언트에서 요청하면 그에 대한 응답을 프록시가 대신 전달해주는 모양으로 설계되었다. 그래서 프록시는 왜, 무엇 때문에 사용하는가는 다음의 이유가 있다.
1) 실제 객체를 수행하기 전에 전처리 및 기본 객체를 캐싱.
2) 실제 객체를 수정하지 않고 추가적인 기능 삽입 가능.
'Note' 카테고리의 다른 글
[디자인패턴] Composite Pattern - 복합체 패턴 (0) | 2021.12.17 |
---|---|
[디자인패턴] Factory Pattern - 팩토리 패턴 (0) | 2021.12.16 |
[디자인패턴] Template Method Pattern - 템플릿 메서드 패턴 (0) | 2021.12.08 |
[MacOS] 응용프로그램을 열 수 있는 권한이 없습니다. (0) | 2021.10.22 |
[정보처리기사] 2021년 정보처리기사 3회 실기 기출 (0) | 2021.10.18 |