본문 바로가기

IT/디자인 패턴

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

1. 프록시 패턴이란?

실제 객체를 바로 이용하는 것 대신 가상 객체에 실제 객체를 선언하여 실제 객체의 기능과 추가적인 기능을 사용함으로 써 기능의 흐름을 제어하는 디자인 패턴입니다.

Proxy 패턴 구조

2. 프록시 패턴 장점

1) 실제 객체를 수행하기 전에 전처리를 하거나 기본 객체를 캐싱할 수 있다.
2) 실제 객체를 수정하지 않고 추가적인 기능을 삽입할 수 있다.

3. 프록시 패턴 예제

1) MainSender.java

public interface MailSender {
    public void send(String message);
}

 

2) RealMailSender.java

public class RealMailSender implements MailSender {

    @Override
    public void send(String message) {
        System.out.println("[SEND] : " + message);

    }
}
실제 MailSender를 구현하는 부분이다. 

3) ProxyMailSender.java

import java.util.Objects;

public class ProxyMailSender implements MailSender {

    private MailSender mailSender = null;

    public ProxyMailSender() {
    }

    @Override
    public void send(String message) {
        if (Objects.isNull(mailSender)) {
            mailSender = new RealMailSender();
        }

        System.out.println("proxy before process");
        mailSender.send(message);
        System.out.println("proxy after process");
    }

}
ProxyMailSender 클래스는 MailSender 인터페이스의 send 메소드를 구현하지만 실제로는 RealMailSender의 send메소드를 실행시킨다. send 메소드를 수행하기 이전에 필요한 기능을 추가할 수 있다.

4) Main.java

public class Main {
    public static void main(String[] args) {
        MailSender mailSender = new ProxyMailSender();
        mailSender.send("Hello world!");
    }
}
ProxyMailSender를 생성해서 send메소드를 수행한다.
( MailSender에는 ProxyMailSender 또는 RealMailSender를 삽입해도 아무 문제 없이 send 메소드를 수행할 수 있다. )

 

5) 결과

proxy before process
[SEND] : Hello world!
proxy after process