java.lang.Class는 자바에서 가장 중요한 클래스 중 하나로, 클래스를 찾아 로드하는 getClass(), forName() 같은 다양한 유틸리티 메서드를 제공합니다. 또한 Class.newInstance() 메서드는 리플렉션(reflection)의 핵심 기반으로, new 연산자를 사용하지 않고도 클래스의 인스턴스를 생성할 수 있게 해줍니다.
java.lang.Class의 중요성
- Class의 인스턴스는 실행 중인 자바 애플리케이션에서 클래스, 인터페이스, 열거형(enum), 애노테이션(annotation)을 표현합니다.
- 자바 파일이 컴파일될 때, 컴파일러는 생성된 .class 파일 안에 java.lang.Class 타입의 public, static, final 필드인 Class를 자동으로 삽입합니다.
- 모든 클래스는 java.lang.Class의 인스턴스 형태로 자신의 코드와 메타데이터를 노출합니다.
- Class에는 공개된(public) 생성자가 없습니다. 대신 Class 객체는 클래스가 로드될 때 JVM(자바 가상 머신)에 의해 자동으로 생성되며, 클래스 로더의 defineClass() 메서드 호출을 통해서도 만들어집니다.
리플렉션과의 관계
java.lang.Class 객체는 리플렉션 API의 출발점입니다. Class 객체를 통해 클래스의 필드, 메서드, 생성자 등 내부 구조를 런타임에 동적으로 조회하고 조작할 수 있습니다. 실제로 스프링(Spring)과 같은 프레임워크가 빈(bean)을 생성하거나 의존성을 주입할 때 이 메커니즘이 널리 활용됩니다.
예제 코드
public class TutorialsPoint {
public static void main(String []args){
// class 필드를 통해 getName() 메서드에 접근
System.out.println("클래스의 이름은: "+ TutorialsPoint.class.getName());
}
}실행 결과
클래스의 이름은: TutorialsPoint