상세 컨텐츠

본문 제목

[Design Pattern] Proxy Pattern

JAVA

by jeonghojin 2023. 3. 29. 00:55

본문

Proxy Pattern

 
인터페이스를 사용하고 실행시킬 클래스에 대한 객체가 들어갈 자리에 대리자 객체를 대신 투입해 클라이언트 쪽에서 실제 실행시킬 클래스에 대한 객체를 통해 메서드를 호출하고 반환값을 받는지, 대리자 객체를 통해 메서드를 호출하고 반환값을 받는지 전혀 모르게 처리하는 것이다.
 
흐름 제어만 할 뿐 결과값을 조작하거나 변형시키면 안된다.
 
어떤 객체를 사용하고자 할 떄, 객체를 직접적으로 참조하는 것이 아닌 해당 객체를 대항하는 객체를 통해 대상 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고, 실제 객체의 기능이 필요한 시점까지 객체의 생성을 미룰 수 있다.
 


프록시 패턴의 종류

 

가상 프록시

꼭 필요로 하는 시점까지 객체의 생성을 연기하고, 해당 객체가 생성된 것처럼 동작하도록 만들고 싶을 때 사용하는 패턴이다. 프록시 클래스에서 자잘한 작업들을 처리하고 리소스가 많이 요구되는 작업들이 필요로 할 때에만 주체 클래스를 사용하도록 구현한다.
 

원격 프록시

원격 객체에 대한 접근을 제어 로컬 환경에 존재하며, 원격 객체에 대한 대변자 역할을 하는 객체 서로 다른 주소 공간에 있는 객체에 대해 마치 같은 주소 공간에 있는 것처럼 동작하게 해주는 패턴이다.
 

보호 프록시

주체 클래스에 대한 접근을 제어하기 위한 경우에 객체에 대한 접근 권한을 제어하거나 객체마다 접근 권한을 달리하고 싶을 경우 사용하는 패턴으로 프록시 클래스에서 클라이언트가 주체 클래스에 대한 접근을 허용할지 말지 결정하도록 할 수 있다.
 


기본형 프록시 (Normal Proxy)
 
Interface ISubject

public interface ISubject {
    void action();
}

class RealSubject

public class RealSubject implements ISubject{

    @Override
    public void action() {
        System.out.println("원본 객체 Action");
    }
}

class Proxy

public class Proxy implements ISubject{

    private RealSubject subject; // 대상 객체를 composition
    public Proxy(RealSubject subject) {
        this.subject = subject;
    }
    @Override
    public void action() {
        subject.action(); // 위임
        /* do something*/
        System.out.println("프록시 객체 Action");
    }
}

Main

public class Main {
    public static void main(String[] args) {

        ISubject subject = new Proxy(new RealSubject());
        subject.action();
    }
}

 


 

 

Proxy Pattern 장/단점

장점 :
- 사이즈가 큰 객체가 로딩되기 전에도 프록시를 통해 참조를 할 수 있다.
- 실제 객체의 public, proteted 메서드를 숨기고 인터페이스를 통해 노출시킬 수 있다.
- 로컬에 있지 않고 떨어져 있는 객체를 사용할 수 있다.
- 원래 객체에 접근에 대해 사전처리를 할 수 있다.
- 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다. (OCP 원칙)
- 기존 코드가 해야하는 일만 유지할 수 있다. (SRP 원칙)
 
 
단점 :
- 객체를 생성할 때 한 단계를 거치게 되므로, 빈번한 객체 생성이 필요한 경우 성능이 저하될 수 있다.
- 프록시 내부에서 객체 생성을 위해 스레드가 생성, 동기화가 구현되어야 하는 경우 성능이 저하될 수 있다.
- 코드가 복잡해질 수 있다.


참고 :

더보기

https://limkydev.tistory.com/79

[Design_Pattern] 프록시 패턴(Proxy Pattern)

안녕하세요. Limky 입니다. 이번 시간은 프록시 패턴(Proxy Pattern)에 대해서 알아보겠습니다. Proxy는 우리말로 대리자, 대변인 이라는 뜻입니다. 대리자, 대변인은 다른 누군가를 대신해서 그 역할을

limkydev.tistory.com

https://velog.io/@newtownboy/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-%ED%94%84%EB%A1%9D%EC%8B%9C%ED%8C%A8%ED%84%B4Proxy-Pattern

[디자인패턴] 프록시패턴(Proxy Pattern)

프록시(Proxy)를 번역하면 대리자, 대변인의 의미를 갖고 있다. 대리자, 대변인은 누군가를 대신해서 그 역할을 수행하는 존재이다. 이는 프로그램에도 똑같이 적용된다. 즉, 프록시에게 어떤 일

velog.io

https://coding-factory.tistory.com/711

[Design Pattern] 프록시 패턴(Proxy Pattern)에 대하여

프록시 패턴이란? 프록시는 대리인이라는 뜻으로, 무엇인가를 대신 처리하는 의미입니다. 일종의 비서라고 생각하시면 됩니다. 사장님한테 사소한 질문을 하기보다는 비서한테 먼저 물어보는

coding-factory.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://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

 

관련글 더보기