Class — 런타임 클래스 객체

Class — 런타임 클래스 객체

Class 클래스의 인스턴스는 실행 중인 Java 애플리케이션의 클래스와 인터페이스를 나타냅니다. 열거형 클래스(enum class)와 레코드 클래스(record class)도 일종의 클래스이며, 애너테이션 인터페이스는 일종의 인터페이스입니다. 모든 배열도 요소 타입과 차원 수가 같은 배열들끼리 공유하는 Class 객체로 반사되는 클래스에 속합니다.

출처: Java API Reference

본문

원시 Java 타입(boolean, byte, char, short, int, long, float, double)과 키워드 voidClass 객체로 표현됩니다. Class는 public 생성자가 없습니다. 대신 클래스 파일의 바이트에서 클래스가 파생될 때 JVM이 Class 객체를 자동으로 생성합니다.

public final class Class<T> extends Object
    implements Serializable, GenericDeclaration, Type, AnnotatedElement,
               TypeDescriptor.OfField<Class<?>>, Constable

Class 클래스의 메서드는 클래스나 인터페이스의 많은 특성을 노출합니다. 대부분의 특성은 클래스 로더가 JVM에 전달한 클래스 파일에서 파생됩니다.

주요 메서드

public static Class<?> forName(String className) throws ClassNotFoundException
public String getName()
public boolean isInterface()
public boolean isArray()
public boolean isPrimitive()
public boolean isAnnotation()
public ClassLoader getClassLoader()
public Module getModule()
public Class<? super T> getSuperclass()
public Class<?>[] getInterfaces()
public Class<?> getComponentType()
public String getSimpleName()
public String getCanonicalName()
public T[] getEnumConstants()
public T cast(Object obj)
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
public boolean isRecord()
public boolean isSealed()
public Class<?>[] getPermittedSubclasses()

예를 들어 다음 코드는 객체의 클래스 이름을 출력합니다.

void printClassName(Object obj) {
    System.out.println("The class of " + obj + " is " + obj.getClass().getName());
}

더 알아보기 (Learn more)