text/Java

프록시 패턴(Proxy pattern) 간단 정리

hoonzii 2023. 3. 9. 13:07
반응형

프록시 패턴 (내가 이해한)

  • 실제 클래스를 대체하는 대리자 클래스를 구성
  • 실제 클래스를 변경하지 않고도, 클래스의 동작 수행 이전 혹은 이후에 무언가를 실행 가능
  • 고로 동작은 똑같이 한다는 걸 보장, 허나 동작의 흐름?을 제어
    • 실제 동작 객체가 수행하기전 까진 초기화 x, 동작시 초기화 수행 가능 (ex. 지연된 초기화)
      • 무거운 객체를 항상 초기화 하는게 아니라 가벼운 프록시 객체만 로딩
      • 추후 실제 동작 필요시 그때서야, 무거운 객체를 로딩
    • 실제 동작 객체의 동작전 대리자 객체만의 동작을 추가 수행 (ex. 로그 남기기)
      • 실제 동작 객체는 변경하지 않고, 프록시의 객체 동작전, 후 로그 생성 및 변경 가능
    • 실제 동작 객체의 동작 후, 결과를 보관 및 사용자의 재요청시 보관된 결과를 반환 (ex. 캐시)
      • 반복 수행되는 결과 반환에 대해 동작 수행후 결괏값을 보관 및 재요청 시 반환 (key-value mapping)

 

 

대충 예제를 만들어 봅시다.

원하는 바는

  • real 클래스는 무거우니 proxy 객체가 대신 선언
    • 그러기 위해서 real, proxy 둘다 ObjectInterface를 implements 함
  • real 클래스의 doThing 함수가 동작하기 전까지는 real 클래스 선언 필요 x
    • 필요시 선언을 위해 proxy 객체의 field 값 = null 로 선언
  • proxy doThing 실행시 real 클래스의 생성 및 실행값 전달

위 다이어그램을 토대로 코드 구현해보자.

// ObjectInterface
public interface ObjectInterface {
    public void doThing();
}

// proxy
public class proxy implements ObjectInterface{

    private real real = null;
    @Override
    public void doThing() { // proxy doThing 실행시
        if(real == null) { // real 객체 초기화
            real = new real();
        }
        real.doThing(); // real 객체의 doThing 함수 호출
    }
}

// real
public class real implements ObjectInterface{
    @Override
    public void doThing() {
        System.out.println("real do thing");
    }
}

//mainClass
public class mainClass {

    public static void main(String[] args) {
        ObjectInterface obj = new proxy(); // real 대신 proxy 선언
        obj.doThing();
    }

}

 

proxy 객체의 편리한 점

real 클래스와 호출하는 main 클래스는 변하지 않게끔 proxy 객체를 수정할 수 있다.

 

예를 들어

만약 doThing함수 호출 시 콘솔창에 해당 호출 내역이 필요하다면?

public class proxy implements ObjectInterface{

    private real real = null;
    @Override
    public void doThing() {

        System.out.println("실행 전 기록이 찍혔으면 좋겠어요.");

        if(real == null) {
            real = new real();
        }
        real.doThing();

        System.out.println("실행 후 기록이 찍혔으면 좋겠어요.");
    }
}

 

proxy 간단 정리 끝

 

참고

반응형