프록시 패턴은 인터페이스를 사용하고 실행시킬 클래스에 대해 객체가 들어갈 자리에 대리자 객체를 대신 투입하여, 클라이언트는 실제 실행시킬 클래스에 대한 메소드를 호출하여 반환값을 받는지 대리 객체의 메소드를 호출해서 반환값을 받는지 모르도록 하는것을 말한다.
프록시 패턴을 사용하면 실제 메소드가 호출되기 이전에 필요한 기능(전처리등의)을 구현객체 변경없이 추가할 수 있고, 구현클래스에 직접 접근하지않고 Proxy를 통해 한번 우회하여 접근하도록 되어있기 때문에 흐름제어를 할 수 있다는 장점이 있다.
public interface HelloService {
String run();
}
public class HelloServiceImpl implements HelloService{
@Override
public String run() {
return "안녕하세요";
}
}
public class HelloServiceProxy implements HelloService{
private HelloService helloService;
@Override
public String run() {
helloService = new HelloServiceImpl();
return helloService.run();
}
}
public class App {
public static void main(String[] args) {
HelloServiceProxy helloServiceProxy = new HelloServiceProxy();
System.out.println(helloServiceProxy.run());
}
}
프록시 패턴은 어떻게 활용할 것이냐에 따라 자유롭게 구현할 수 있다. 위에서는 main에서 HelloService를 상속받은 HelloserviceImpl에 접근할때 동일한 인터페이스를 상속받은 프록시 클래스로 접근하도록 해서 HelloserviceImpl에 접근하기 전, 후에 별도의 흐름제어나 검증을 할 수 있도록 구성했다.
이 링크로 가면 코드를 볼 수 있다.