Open dpwns523 opened 1 year ago
import java.lang.Class;
import java.lang.reflect.Method;
import java.lang.reflect.Field;
import java.lang.reflect.Constructor;
// 1. 클래스의 이름을 알 경우
Class class = Child.class;
System.out.println("Class name: " + class.getName()); // Class name: test.Child
// 2. 클래스의 이름을 모를 경우
Class class2 = Class.forName("ssafy.Child");
System.out.println("Class name: " + class2.getName()); // Class name: ssafy.Child
// 1. 인자 없는 생성자
Class class= Class.forName("ssafy.Child");
Constructor constructor = class.getDeclaredConstructor();
System.out.println("Constructor: " + constructor.getName());// Constructor: ssafy.Child
// 2. 인자가 있는 생성자
// getDeclaredConstructor 파라미터에 타입에 일치하는 인자를 넣어주기
Constructor constructor2 = class.getDeclaredConstructor(String.class);
System.out.println("Constructor(String): " + constructor2.getName());// Constructor(String): ssafy.Child
// 3. 생성자 모두 가져오기
Constructor constructors[] = class.getDeclaredConstructors();
for (Constructor cons : constructors) {
System.out.println("Get constructors in Child: " + cons);
}
// 4. public 생성자들만 가져오기
Constructor constructors2[] = class.getConstructors();
for (Constructor cons : constructors2) {
System.out.println("Get public constructors in Child: " + cons);
}
Method method1 = class.getDeclaredMethod("method", int.class);
// 출력
//public int ssafy.Child.method(int)
Method method2 = class.getDeclaredMethod("method", null);
// 출력
//public int ssafy.Child.method()
리플렉션을 사용하여 패키지의 모든 종류와 멤버들에 접근하는 것이 가능
→ 실질적으로 캡슐화 없음
다른 모듈들이 우리의 클래스에 대한 리플랙션을 사용할 수 있는지의 여부를 명시적으로 표현
open module my.module { }
module my.module { opens com.my.package; }
module my.module { opens com.my.package to moduleOne, moduleTwo, etc.; }
문제
contents - 세부 내용
14장을 읽다보니 리플렉션을 언급하면서 강력한 기능이지만 흘러가듯 설명하고 있어서 개념, 다양한 사용 사례, 활용 방안에 대해서 알아보고 정리하면 좋을 것 같습니다!
참고
Chapter14 - p456