티스토리 뷰

728x90
반응형

프록시 패턴이란?


  • 프록시는 대리인이라는 뜻으로, 무언가를 대신 처리하는 역할을 담당합니다. 어떠한 객체를 사용하고자 할때 객체를 직접적으로 참조 하는것이 아니라 해당 객체를 대행(proxy)하는 객체를 통해 대상 객체에 접근하는 방식입니다. 
  • 이렇게 접근을 하면 접근하고자 하는 객체가 메모리상에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고 또한 실제 객체의 기능이 필요한 시점까지 객체의 생성을 지연시킬 수 있습니다. 

 

클래스 다이어그램


Subject
  • Proxy와 RealSubject가 구현해야하는 인터페이스
  • 두 객체를 동일하게 다루기 위해서 존재
Proxy
  • RealSubject와 Client 요청 사이에 존재하는 객체
  • Subject를 구현함으로써 클라이언트는 RealSubject를 사용하는 것과 차이가 없어야한다.
RealSubject
  • 실질적으로 요청에 대해 주된 기능을 수행하는 객체
  • Proxy 객체는 내부적으로 RealSubject 객체를 로직에 맞게 사용한다.(위임)

 

예제


Subject 역할을 하는 인터페이스
public interface MailSender {
    String send(String message);
}

 

RealSubject 역할을 하는 클래스
public class RealMailSender implements MailSender {

    @Override
    public String send(String message) {
        return message;
    }
}

 

Proxy 역할을 하는 클래스
public class ProxyMailSender implements MailSender {

    private RealMailSender realMailSender;

    @Override
    public String send(String message) {
        if (realMailSender == null) {
            realMailSender = new RealMailSender();
        }
        return realMailSender.send(message);
    }
}

 

클라이언트
public class Client {
    public static void main(String[] args) throws Exception{
        MailSender mailSender = new ProxyMailSender();
        System.out.println(mailSender.send("안녕하세요."));
    }
}

 

장점
  • 기본 객체의 리소스가 무거운 경우, 프록시 객체에서 간단한 처리를 하거나 기본 객체를 캐싱 처리함으로써 부하를 줄일 수 있습니다.
  • 프록시는 기본 객체와 요청 사이에 있기 때문에, 일종의 방패(보안)의 역할도 합니다.

 

단점
  • 캐싱이 안되어 있는 초기 사용의 경우 프록시 객체가 중간에 껴있기 때문에, 간혹 응답이 느려질 수 있습니다.

 

728x90
반응형