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