Proxy Target Class 조건

2023. 5. 17. 16:51High Level Programming Language/Reflection

프록시 클래스의 타겟 클래스가 되기 위한 조건은 다음과 같습니다:

  1. 인터페이스여야 한다:
    • 프록시 클래스는 인터페이스를 구현해야 하며, 클래스 또는 기본 타입이어서는 안 됩니다. 즉, Proxy.newProxyInstance 메서드의 interfaces 배열에 포함되는 모든 객체는 인터페이스의 Class 객체여야 합니다.
  2. 숨겨지지 않고(non-hidden) 봉인되지 않은(non-sealed) 인터페이스여야 한다:
    • 인터페이스는 package-private(패키지 전용)이거나 그보다 더 공개된 접근 수준을 가져야 합니다. private로 선언된 인터페이스는 프록시 생성에 사용할 수 없습니다.
    • 또한, 인터페이스는 sealed로 선언되지 않아야 합니다. sealed 인터페이스는 구현할 수 있는 클래스나 인터페이스를 제한하므로, 프록시 생성에 적합하지 않습니다.
  3. interfaces 배열의 모든 Class 객체는 서로 다르고 중복되지 않아야 한다:
    • Proxy.newProxyInstance 메서드를 사용할 때, interfaces 배열에 동일한 인터페이스를 중복해서 포함시킬 수 없습니다. 모든 인터페이스는 고유해야 하며, 두 엘리먼트가 동일한 Class 객체를 참조해서는 안 됩니다.
  4. 인터페이스는 지정된 클래스 로더를 통해 로드할 수 있어야 한다:
    • 프록시 인스턴스를 생성할 때, interfaces 배열에 포함된 모든 인터페이스는 지정된 ClassLoader에 의해 로드 가능해야 합니다. 그렇지 않으면 프록시 생성이 실패할 수 있습니다.
  5. 타겟 클래스는 반드시 하나 이상의 인터페이스를 구현해야 한다:
    • 프록시를 생성하려면 프록시 클래스의 타겟 클래스가 반드시 인터페이스를 구현하고 있어야 합니다. 만약 클래스가 인터페이스를 구현하지 않았다면, 프록시 인스턴스를 생성할 수 없습니다.

정리

프록시 클래스를 생성하려는 타겟 클래스는 인터페이스를 구현하고 있어야 하며, 그 인터페이스들은 숨겨지지 않고 봉인되지 않은 상태여야 하고, 서로 중복되지 않아야 하며, 지정된 클래스 로더에 의해 로드 가능해야 합니다. 기본 클래스나 기본 타입은 프록시의 타겟이 될 수 없습니다.

'High Level Programming Language > Reflection' 카테고리의 다른 글

CGLib MethodInterceptor  (0) 2023.06.20
CGLIB Enhancer  (0) 2023.05.19
sealed interface  (0) 2023.05.08
Structuring method calls  (0) 2023.05.02
Java Class Object  (0) 2023.05.02