- 생성하는데에 많은 비용이 드는 객체를 대신하는 역할을 맡는다.
- 실제 객체의 사용 시점을 제어할 수 있다. 클라이언트가 처음 요청 및 접근할 때만 실제 객체가 생성되며 이후는 프록시를 참조하여 실제 객체를 대신할 수 있다.
* 늦은 초기화
* 프로그램의 실행속도를 개선, 무거운 객체의 생성을 유보


Interface ISubject
public interface ISubject {
void action();
}
public class RealSubject implements ISubject{
public RealSubject(String name) {
heavyJob(name);
}
@Override
public void action() {
System.out.println("원본 객체 Action");
}
private void heavyJob(String name) {
System.out.println(name + "생성 시작");
for (int i = 0; i < 5; i++) {
try {
System.out.println(name + "생성중...");
Thread.sleep(1000);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(name + "생성 완료");
}
}
- RealSubject 는 5초가 걸리는 무거운 작업을 한다. heavyJob()
public class Proxy implements ISubject{
private String name;
private ISubject subject;
public Proxy(String name) {
this.name = name;
}
@Override
public void action() {
realize();
subject.action();
System.out.println("프록시 객체 Action");
}
private synchronized void realize() {
if (subject == null) {// lazy 하게 초기화
this.subject = new RealSubject(name);
}
}
}
- Proxy는 RealSubject를 처음부터 초기화하지 않는다.
- 생성 시점에 초기화 하지 않고, 필요한 시점에 초기화될 수 있도록 한다.
public class Main {
public static void main(String[] args) {
ISubject subject = new Proxy("테스트 객체");
subject.action();
}
}

장점 :
- 기존 객체를 수정하지 않고 일련의 로직을 프록시 패턴을 통해 추가할 수 있다. (OCP)
- 실제 객체를 수행하기 전에 전처리를 하거나, 기존 객체를 캐싱할 수 있다.
> 기존 객체의 리소스가 무거울 경우, 이러한 캐싱 과정을 통해 부하를 줄일 수 있다.
- 기존 객체와 클라이언트의 요청 사이에 위치해 잇기 때문에 하나의 보안 역할을 한다.
단점 :
- 코드의 복잡도가 증가한다.
- 성능이 저하될 수 있다.
* 객체를 생성할 때 한 단계를 거치게 되므로, 빈번한 객체 생성이 필요한 경우
* 객체 생성을 위해 스레드 생성 및 동기화가 구현되어야 하는 경우
참고 :
[GOF] 💠 프록시(Proxy) 패턴 - 완벽 마스터하기
Proxy Pattern 프록시 패턴(Proxy Pattern)은 대상 원본 객체를 대리하여 대신 처리하게 함으로써 로직의 흐름을 제어하는 행동 패턴이다. 프록시(Proxy)의 사전적인 의미는 '대리인'이라는 뜻이다. 즉, 누
inpa.tistory.com
프록시 패턴(Proxy Pattern) :: JDM's Blog
프록시 패턴 정의 실제 기능을 수행하는 객체Real Object 대신 가상의 객체Proxy Object를 사용해 로직의 흐름을 제어하는 디자인 패턴입니다. 프록시 패턴 특징 원래 하려던 기능을 수행하며 그외의
jdm.kr
https://dev-coco.tistory.com/177
[Design Pattern] 프록시 패턴(Proxy Pattern) 알아보기
프록시 패턴(Proxy Pattern)이란? 프록시는 대리인이라는 뜻으로, 무엇인가를 대신 처리하는 의미이다. 일종의 비서라고 생각하면 된다.사장실에 바로 들어가서 사장님을 바로 만나는게 아닌 비서
dev-coco.tistory.com
https://esoongan.tistory.com/180
[Java] 프록시패턴 (Proxy Pattern)
프록시 패턴이란? 디자인패턴중 하나로, 다른 무언가와 이어지는 인터페이스 역할을 하는 클래스를 의미한다. 먼저 프록시라는 용어를 이해하고 넘어가보자. 0. 프록시 라는 용어의 의미 소프트
esoongan.tistory.com
https://today-retrospect.tistory.com/102
Java 디자인 패턴 두번째 이야기 - 프록시 패턴(Proxy Pattern)
[목차] 1. 프록시 패턴이란? 2. 프록시 패턴은 왜 사용하는 것일까? 3. 프록시 패턴의 종류 3-1. 가상 프록시 3-2. 원격 프록시 3-3. 보호 프록시 4. 구현을 보기 전에 알아두면 좋은 부분 5. 프록시 패턴
today-retrospect.tistory.com
https://brownbears.tistory.com/551
[Design Pattern] 프록시 패턴 (Proxy Pattern)
프록시 패턴이란 프록시 의미 그대로 실제 기능을 수행하는 주체(RealSubject)를 바로 호출하는 대신 대리자(Proxy)를 거쳐서 호출하는 것입니다. 즉, 클라이언트 → 실제 기능을 담당하는 객체 가 아
brownbears.tistory.com
| [Design Pattern] Proxy Pattern : Remote Proxy (0) | 2023.04.02 |
|---|---|
| [Design Pattern] Proxy Pattern : Protection Pattern (0) | 2023.04.01 |
| [Design Pattern] Proxy Pattern (0) | 2023.03.29 |
| [Design Pattern] Adapter Pattern (0) | 2023.03.28 |
| [Design Pattern] Composite Pattern (0) | 2023.03.28 |