728x90
728x90
리플렉션 (Reflection)
- 프로그램 실행 중에 클래스의 정보를 분석/조작할 수 있는 부분
- 런타임 시점에 동작으로 클래스의 메서드/필드/생성자 등에 접근하고 호출할 수 있음
- 자바의 핵심 기능
- java.lang.reflect 패키지
# 클래스 정보 가져오기
1 2 3 4 5 6 7 8 9 | // 1) Class.forName() 사용 Class<?> clazz = Class.forName("com.example.MyClass"); // 2) 객체.getClass() 사용 MyClass obj = new MyClass(); Class<?> clazz = obj.getClass(); // 3) 리터럴로 직접 .class를 붙여서 사용 Class<?> clazz = MyClass.class; | cs |
# 필드 정보 가져오기
1 2 3 4 5 | // public 필드에만 접근 가능 Field field = clazz.getField("fieldName"); // 모든 접근제한자에 접근 가능 Field field = clazz.getDeclaredField("fieldName"); | cs |
# 메서드 정보 가져오기
1 2 3 4 5 | // public 메서드에만 접근 가능 Method method = clazz.getMethod("methodName", parameterTypes); // 모든 접근제한자에 접근 가능 Method method = clazz.getDeclaredMethod("methodName", parameterTypes); | cs |
# 생성자 정보 가져오기
1 2 3 4 5 6 7 8 9 10 11 | // 클래스 정보 가져오기 Class<?> clazz = MyClass.class; // public 생성자에만 접근 가능 Constructor<?> publicConstructor = clazz.getConstructor(String.class); // 모든 접근제한자 생성자에 접근 가능 Constructor<?>[] constructors = clazz.getDeclaredConstructors(); for (Constructor<?> constructor : constructors) { System.out.println(constructor); } | cs |
320x100
반응형
'Java > Base' 카테고리의 다른 글
[Java] 어노테이션 (Annotation) (0) | 2023.06.18 |
---|---|
[Java] JVM (Java Virtual Machine) (0) | 2023.06.18 |
[Java] Garbage Collection (0) | 2023.06.18 |
[Java] 객체 지향 프로그래밍 (OOP)과 SOLID 원칙 (0) | 2023.06.18 |
[Java] 데이터 형식 지정 (0) | 2023.04.20 |