책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다.
본인 객체를 대신해서 대리인 객체가 일을 대신 처리
대신 대리인 객체가 할 수 없는 일일 때 본인 객체를 생성
→ 초기화에 시간이 오래 걸리는 시스템이라면 대리인을 사용하여 작업 처리 속도를 올릴 수 있다, 유지보수 용이
Subject 본인, Proxy와 RealSubject를 동일시하기 위한 인터페이스(API), 공통 인터페이스
Proxy 대리인, Subject 인터페이스 구현
- client 요청을 최대한 처리하는데 자기 혼자 처리할 수 없다면 RealSubject에게 맡긴다.
- 이때서야 RealSubject 인스턴스를 생성한다.
RealSubject 실제 본인, Subject 인터페이스 구현
- Proxy만으로 감당할 수 없는 일일 때 등장
- 실제 본인 객체는 Proxy의 존재를 모른다
public class PrinterProxy implements Printable {
private String name;
private Printer real; // 본인 객체 포함
public PrinterProxy() {
this.name = "No Name";
this.real = null;
}
public PrinterProxy(String name) {
this.name = name;
this.real = null; // 이때도 본인 객체는 생성되지 않음
}
@Override
public synchronized void setPrinterName(String name) {
if(real != null) {
real.setPrinterName(name);
}
this.name = name;
}
@Override
public String getPrinterName() {
return this.name;
}
@Override
public void print(String string) {
realize();
real.print(string); // 본인 객체에게 위임
}
private synchronized void realize() {
if(real == null) {
real = new Printer(name);
}
}
}
프록시 종류
- HTTP 프록시 - HTTP 서버와 HTTP 클라이언트 사이에서 웹 페이지 캐싱 등을 하는 소프트웨어
- Virtual Proxy(가상 프록시) - 실제로 인스턴스가 필요한 시점에서 생성 및 초기화
- Remote Proxy(원격 프록시) - RealSubject가 네트워크 저편에 있음에도 불구하고 마치 자기 옆에 있는 것처럼 메서드 호출 가능 (ex. Java RMI - Remote Method Invocation; 원격 메서드 호출)
- Access Proxy(보호 프록시) - RealSubject 역의 기능에 대해 접근 제한을 설정, 즉 허락된 사용자만 접근 가능하도록
cf. Decorator, Proxy 패턴 모두 투과적인 인터페이스를 사용하고 있지만, 두 패턴의 목적이 다르다.
Decorator | Proxy |
새로운 기능 추가 | 본인의 작업을 위임하여 본인에 대한 액세스를 줄인다 |
'문제 및 이론 정리 > 디자인패턴' 카테고리의 다른 글
[디자인패턴] State - 상태를 클래스로 표현한다 (0) | 2025.02.25 |
---|---|
[디자인패턴] Composite - 그릇과 내용물을 동일시한다 (0) | 2025.02.23 |
[디자인패턴] Decorator - 장식틀과 내용물을 동일시한다 (0) | 2025.02.21 |
[디자인패턴] Visitor - 데이터 구조를 돌아다니면서 처리한다 (0) | 2025.02.18 |
[디자인패턴] Iterator - 처리를 반복한다 (1) | 2025.02.18 |