Proxy 패턴
디자인 패턴 ·프록시 패턴(Proxy Pattern)은 코드의 기능을 대리자가 실행하게 해, 코드의 흐름을 제어하면서 객체지향 5원칙중 OCP와 DIP를 적용해 의존성을 낮춘 디자인 패턴이다

프록시 패턴의 흐름은 위 그림을 통해 쉽게 알 수 있다.
Client는 Proxy(대리자)에게 어떤 기능을 수행할것을 명령하면 Proxy는 상황에 따라 Service의 기능을 호출할지 결정하게 된다.
프록시 패턴은 아래와 같은 구조로 이루어져있다.

잡설을 하자면, 개인적으로 패턴을 기억할 때 이름의 의미와 구조도 모양으로 기억하면 잘 외워진다. 예를들어서 proxy 패턴은 대리자의 의미와 구조도 모양인 ㅈ을 기억하는 식, 이렇게 기억하면 사용방법과 설계 방법을 간략하게 기억할 수 있다!
본론으로 다시 넘어와서, 수행할 기능들이 선언된 Subject 인터페이스를 두고 상속 받는 형식으로 되어있어서, 변경에 폐쇄적이며, 확장에는 개방적인것을 알 수 있다. 또한 실제 기능을 수행하는 RealSubject의 의존성 방향이 클라이언트로 향하므로 의존성 역전이 일어나 OCP와 DIP를 원칙을 지키고 있는것을 확인할 수 있다.
구현
public class Client{
public static void main(String[] args){
// Subject realSubject = new RealSubject();
// realSubject.doAction();
Subject proxy = new Proxy();
proxy.doAction(); // realSubject와 호출하는 메소드가 똑같다
}
}
public interface Subject{
public void doAction();
}
public class Proxy implements Subject{
private static Subject subject;
@Override
public void doAction(){
if(subject == null){
subject = new RealSubject();
}
System.out.println("Proxy doAction");
subject.doAction();
}
}
public class RealSubject implements Subject{
@Override
public void doAction(){
System.out.println("RealSubject doAction");
}
}
클라이언트의 실행결과는 아래와 같다
Proxy doAction
RealSubject doAction
결론
코드의 흐름을 제어할 수 있는 프록시 패턴에 대해 알아보았다. 좀 더 자세히 알아보려면 https://www.baeldung.com/java-proxy-pattern를 참고하면 좋을거 같다