-
[JAVA] Class 클래스자바 2024. 11. 14. 12:42
DataField annotation = field.getAnnotation(DataField.class);
새로운 프로젝트를 시작하며 소스를 보고 있던 중 "클래스명.class"을 보고 왜 굳이 .class를 붙였을까 고민하던 중
JAVA의 Class 클래스가 생각났고 다시 정리를 해봤습니다.
Class 클래스
자바에서 ` Class` 클래스는 클래스의 정보(메타데이터)를 다루는데 사용됩니다.
`Class` 클래스를 통해 개발자는 실행 중인 자바 애플리케이션 내에서 필요한 클래스의 속성과 메서드에 대한 정보를 조회하고 조작할 수 있습니다.
Class 클래스 주요 기능
1. 타입 정보 얻기 : 클래스의 이름, 슈퍼클래스, 인터페이스, 접근 제한자 등과 같은 정보를 조회
2. 리플렉션 : 클래스에 정의된 메서드, 필드, 생성자 등을 조회하고, 이들을 통해 객체 인스턴스를 생성하거나 메서드를 호출하는 등의 작업
3. 동적 로딩과 생성 : ` Class.forName()` 메서드를 사용하여 클래스를 동적으로 로드하고, ` newInstance()` 메서드를 통해 새로운 인스턴스를 생성
4. 애노테이션 처리 : 클래스에 적용된 애노테이션(annotation)을 조회하고 처리하는 기능
public class ClassMetaMain { public static void main(String[] args) throws Exception { //Class 조회 Class clazz = String.class; // 1.클래스에서 조회 //Class clazz = new String().getClass();// 2.인스턴스에서 조회 //Class clazz = Class.forName("java.lang.String"); // 3.문자열로 조회 // 모든 필드 출력 Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { System.out.println("Field: " + field.getType() + " " + field.getName()); } // 모든 메서드 출력 Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { System.out.println("Method: " + method); } // 상위 클래스 정보 출력 System.out.println("Superclass: " + clazz.getSuperclass().getName()); // 인터페이스 정보 출력 Class[] interfaces = clazz.getInterfaces(); for (Class i : interfaces) { System.out.println("Interface: " + i.getName()); } } }
cf. 리플랙션 : 파일타임이 아닌 런타임에 동적으로 특정 클래스의 정보를 추출할 수 있는 프로그래밍 기법
(자바는 컴파일 시점에 타입을 결정하는 정적 언어)
@interface 커스텀 어노테이션에 대해 찾아보다 알게 된 용어인데 Class 클래스와도 연관이 있는 부분이어 간단하게 정리해 봤습니다. (.class부분이 리플렉션 객체를 호출하는 부분)
Class를 사용하면 클래스의 메타 정보를 기반으로 클래스에 정의된 메서드, 필드, 생성자 등을 조회하고, 이들을 통해 객체 인스턴스를 생성하거나 메서드를 호출하는 작업을 할 수 있습니다. 이런 작업을 리플렉션이라 하며 추가로 애노테이션 정보를 읽어서 특별한 기능을 수행할 수 도 있습니다.728x90'자바' 카테고리의 다른 글
[JAVA] 자바 basic 1 - 4 강 요약 (0) 2024.11.19 [JAVA] 커스텀 어노테이션 @interface (0) 2024.11.14 [JAVA] Int & Integer 차이점 그리고 wrapper 클래스 (0) 2024.08.22 [JAVA] Static 키워드 (0) 2024.08.20 [JAVA] 불변 객체 (0) 2024.08.19