• 방대한 시스템 자원 소비하는 객체 필요하긴 한데, 항상 필요한 것은 아니다
    • 이때를 위한 프록시 패턴
  • 프록시는 AOP를 구현하는 기술 중 하나로, 대상 객체에 대한 접근을 제어하고 추가 기능을 수행
  • 프록시를 통해 실제 객체를 감싸서 클라이언트가 실제 객체인지 프록시 객체인지 모르게 하면서 추가적인 기능을 제공
  • AspectJ
  • 이게 뭐 AOP 와 관련있다는데…

예제

public interface ExpensiveObject {  
    void process();  
}
public class ExpensiveObjectImpl implements ExpensiveObject {  
  
    public ExpensiveObjectImpl(){  
        heavyInit();  
    }  
  
    @Override  
    public void process() {  
        System.out.println("Expensive Object Impl ~~");  
    }  
  
    private void heavyInit() {  
        System.out.println("HEAVY");  
    }  
}
public class ExpensiveObjectProxy implements ExpensiveObject {  
  
    private ExpensiveObject object;  
    @Override  
    public void process() {  
        if (object == null) {  
            object = new ExpensiveObjectImpl();  
        }  
        object.process();  
    }  
}
public class Client {  
    public static void main(String[] args) {  
        ExpensiveObject object = new ExpensiveObjectProxy();  
        object.process();  
        object.process();  
    }  
}