자바의 Class
클래스는 자바 리플렉션(reflection) 기능의 핵심이다.
이것을 이해하면 "자바 프로그램이 자기 자신을 들여다보는 방법"을 알 수 있다.
실행 중에 클래스의 메타데이터(클래스명, 필드, 메서드, 생성자 등)를 조사하고 다룰 수 있는 기능
java.lang.reflect
패키지에 있다..
연산자로 직접 메서드 호출하거나 필드에 접근한다.리플렉션은 일반 코드로는 할 수 없는 "동적 동작"이 가능해서 프레임워크나 라이브러리에서 많이 사용한다. 예를 들어:
new
대신 리플렉션으로 객체를 만듦@Test
가 붙은 메서드를 자동으로 찾아 실행JVM 안에서 로드된 클래스나 인터페이스를 표현하는 객체
java.lang.Class<T>
로 정의되어 있음.자바에서는 Class
객체를 얻는 여러 가지 방법이 있다:
Class<?> clazz = String.class;
👉 컴파일 시점에 바로 가져오는 방법
String s = "hello";
Class<?> clazz = s.getClass();
👉 이미 만들어진 객체가 어떤 클래스인지 확인할 때 사용
Class<?> clazz = Class.forName("java.lang.String");
👉 문자열로 클래스 이름을 넣어서 동적으로 로드. (예외 처리 필요)
Class
객체를 얻으면 다음과 같은 것들을 할 수 있다:
Class<?> clazz = String.class;
System.out.println(clazz.getName()); // java.lang.String
System.out.println(clazz.getSimpleName()); // String
System.out.println(clazz.getPackageName()); // java.lang
Method[] methods = clazz.getDeclaredMethods();
for (Method m : methods) {
System.out.println(m.getName());
}
Class<?> clazz = Class.forName("java.lang.String");
Object obj = clazz.getConstructor(String.class).newInstance("hi");
System.out.println(obj); // hi
Class
클래스 = 자바에서 클래스 자체를 표현하는 메타 데이터 객체