• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

콘크리트프록시를 구현시 원본 구체를 파라메터로 받는이유

24.01.31 19:23 작성 24.01.31 19:24 수정 조회수 151

2

콘크리드프록시를 생성 할 때 기존 구체를 상속을 받고 오버라이딩 할 때 아래 예시와 같이 부모 메소드를 super를 통해서 호출이 가능한데요

public class OrderControllerConcreteProxy extends OrderControllerV2 {

    private final LogTrace logTrace;

    public OrderControllerConcreteProxy(OrderServiceV2 orderService, LogTrace logTrace) {
        super(orderService);
        this.logTrace = logTrace;
    }

    @Override
    public String request(String itemId) {
        TraceStatus status = null;
        try {
            status = logTrace.begin("OrderController.request()");
            //target 호출
            String result = super.request(itemId);
            logTrace.end(status);
            return result;
        } catch (Exception e) {
            logTrace.exception(status, e);
            throw e;
        }
    }

    @Override
    public String noLog() {
        return super.noLog();
    }
}

이렇게 super를 통해서 호출하지 않고 OrderControllerV2를 따로 new 해서 멤버 변수로 받고 그 원본 구현체를 호출하는 이유가 있을까요?

답변 1

답변을 작성해보세요.

2

안녕하세요. 손영민님

프록시와 원본을 하나로 같이 사용하면 되지 않을까요? 라는 질문으로 이해했습니다.

프록시는 원본 객체를 상속 받기 때문에 프록시에서 오버라이딩 한 기능이 호출되어 버릴 수 있습니다.

이런 문제가 발생하지 않도록 프록시 객체와 원본 객체를 명확하게 분리하기 위해서 별도로 나누게 됩니다.

감사합니다.