상세 컨텐츠

본문 제목

[Design Pattern] Proxy Pattern : Virtual Proxy

JAVA

by jeonghojin 2023. 3. 30. 02:13

본문

가상 프록시 (Virtual Proxy) :

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

 


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();
    }
}

Proxy Pattern 장/단점

장점 :
- 기존 객체를 수정하지 않고 일련의 로직을 프록시 패턴을 통해 추가할 수 있다. (OCP)
- 실제 객체를 수행하기 전에 전처리를 하거나, 기존 객체를 캐싱할 수 있다.
> 기존 객체의 리소스가 무거울 경우, 이러한 캐싱 과정을 통해 부하를 줄일 수 있다.
- 기존 객체와 클라이언트의 요청 사이에 위치해 잇기 때문에 하나의 보안 역할을 한다.
 
단점 :
- 코드의 복잡도가 증가한다.
- 성능이 저하될 수 있다.
* 객체를 생성할 때 한 단계를 거치게 되므로, 빈번한 객체 생성이 필요한 경우
* 객체 생성을 위해 스레드 생성 및 동기화가 구현되어야 하는 경우


 
참고 : 

더보기

https://inpa.tistory.com/entry/GOF-%F0%9F%92%A0-%ED%94%84%EB%A1%9D%EC%8B%9CProxy-%ED%8C%A8%ED%84%B4-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90

[GOF] 💠 프록시(Proxy) 패턴 - 완벽 마스터하기

Proxy Pattern 프록시 패턴(Proxy Pattern)은 대상 원본 객체를 대리하여 대신 처리하게 함으로써 로직의 흐름을 제어하는 행동 패턴이다. 프록시(Proxy)의 사전적인 의미는 '대리인'이라는 뜻이다. 즉, 누

inpa.tistory.com

https://jdm.kr/blog/235

프록시 패턴(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

 

관련글 더보기