High Level Programming Language/Reflection(18)
-
Proxy Target Class 조건
프록시 클래스의 타겟 클래스가 되기 위한 조건은 다음과 같습니다:인터페이스여야 한다:프록시 클래스는 인터페이스를 구현해야 하며, 클래스 또는 기본 타입이어서는 안 됩니다. 즉, Proxy.newProxyInstance 메서드의 interfaces 배열에 포함되는 모든 객체는 인터페이스의 Class 객체여야 합니다.숨겨지지 않고(non-hidden) 봉인되지 않은(non-sealed) 인터페이스여야 한다:인터페이스는 package-private(패키지 전용)이거나 그보다 더 공개된 접근 수준을 가져야 합니다. private로 선언된 인터페이스는 프록시 생성에 사용할 수 없습니다.또한, 인터페이스는 sealed로 선언되지 않아야 합니다. sealed 인터페이스는 구현할 수 있는 클래스나 인터페이스를 제한하므..
2023.05.17 -
sealed interface
sealed interface는 Java 15에서 도입된 기능으로, 인터페이스가 특정 클래스들만을 상속하거나 구현할 수 있도록 제한하는 기능을 제공합니다. 이를 통해 인터페이스를 상속하거나 구현할 수 있는 클래스들을 명시적으로 지정함으로써, 보다 강력한 캡슐화와 제어를 가능하게 합니다.주요 특징:제한된 상속:sealed로 선언된 인터페이스는 permits 키워드를 사용하여 상속이나 구현할 수 있는 클래스 또는 인터페이스를 명시합니다.sealed interface를 구현할 수 있는 클래스들은 반드시 같은 모듈 또는 패키지에 있어야 하며, 명시적으로 상속을 허용한 클래스만 가능합니다.하위 클래스의 종류:sealed interface를 구현하는 클래스는 세 가지로 구분될 수 있습니다:final: 더 이상 다른..
2023.05.08 -
Structuring method calls
"인코딩"이라는 개념을 사용하는 이유는 다이나믹 프록시에서 메서드 호출이 단순히 다른 객체로 전달되는 것이 아니라, 호출된 메서드와 아규먼트들이 일종의 데이터로 변환(또는 인코딩)되어 전달되기 때문입니다. 이 과정을 통해 메서드 호출에 대한 상세한 정보가 포함된 java.lang.reflect.Method 객체와 아규먼트들이 Object[] 배열로 표현되어, Invocation Handler에 전달될 수 있게 됩니다.왜 인코딩이라고 설명하는가?메서드 호출의 구조화: 메서드 이름, 파라미터 타입, 리턴 타입, 아규먼트 등의 정보는 단순한 값이 아니라, 복잡한 구조로 이루어진 데이터입니다. 이 정보를 java.lang.reflect.Method 객체와 Object[] 배열로 변환하는 과정은 마치 데이터를 인..
2023.05.02 -
Java Class Object
보호되어 있는 글입니다.
2023.05.02 -
Java Dynamic Proxy Classes
Introduction다이나믹 프록시 클래스는 런타임에, 지정된 인터페이스 리스트를 구현하는 클래스입니다. 이러한 클래스의 인스턴스를 통해 인터페이스의 메서드를 호출하면 해당 호출이 인코딩되어 다른 객체로 전달됩니다.[structuring method calls]이 객체는 일관된 인터페이스를 통해 호출을 처리하게 됩니다. 따라서 다이나믹 프록시 클래스는 컴파일 타임 도구를 사용하지 않고도 인터페이스 목록에 대한 타입 안전한 프록시 객체를 생성하는 데 사용할 수 있습니다.다이나믹 프록시 클래스의 인스턴스에서 메서드가 호출되면, 이 호출은 해당 인스턴스의 Invocation Handler에 있는 단일 메서드[invoke]로 전달되며, 호출된 메서드를 식별하는 java.lang.reflect.Method 객체..
2023.04.28 -
Lesson: Members
리플렉션은 java.lang.reflect.Member 인터페이스를 정의하며, 이 인터페이스는 java.lang.reflect.Field, java.lang.reflect.Method, java.lang.reflect.Constructor에 의해 구현됩니다. 이 레슨에서는 이러한 객체들에 대해 논의할 것입니다. 각 멤버에 대해, 선언 및 타입 정보를 검색하는 관련 API, 멤버에 고유한 작업(예를 들어, 필드의 값을 설정하거나 메서드를 호출하는 것), 일반적으로 발생하는 오류를 설명할 것입니다. 각 개념은 일부 예상되는 리플렉션 용도와 유사한 코드 샘플 및 관련 출력과 함께 설명됩니다.참고: 자바 언어 사양(Java Language Specification), Java SE 7 에디션에 따르면 클래스의 ..
2023.04.17