Reflection은 프로그램이 런타임에 클래스, 메서드, 필드를 검사하고 조작하게 합니다 — 컴파일 시점에 알려지지 않은 것들조차도요. Annotation은 도구와 프레임워크가 (흔히 reflection을 통해) 읽어 동작을 구동하는 메타데이터를 코드에 부착합니다. 이들이 함께 Java 프레임워크의 "마법"(Spring, JPA, JUnit) 대부분을 뒷받침합니다.
Reflection — 런타임 검사와 호출
Class<?> clazz = Class.forName();
(Field field : clazz.getDeclaredFields()) {
System.out.println(field.getName() + + field.getType());
}
(Method method : clazz.getDeclaredMethods()) {
System.out.println(method.getName());
}
clazz.getDeclaredConstructor().newInstance();
clazz.getMethod(, String.class);
m.invoke(instance, );
clazz.getDeclaredField();
f.setAccessible();
