자바 프로그램이 실행 중에 클래스, 인터페이스, 메소드, 필드 등의 정보를 동적으로 탐색하고 조작할 수 있는 기능.
주로 프레임워크나 라이브러리에서 사용.
[ Class 클래스 ]
자바에서 모든 클래스와 인터페이스의 메타데이터를 표현하는 클래스.
클래스 이름, 상속 관계, 인터페이스 구현 여부 등
(메소드)
- getName() : 클래스의 전체 이름(패키지 포함)을 반환.
- getSimpleName() : 클래스의 이름(패키지 제외)을 반환.
- getSuperclass() : 부모 클래스의 class 객체를 반환.
- getInterfaces() : 클래스가 구현하는 인터페이스의 배열을 반환.
- getSDeclaredFields(), getDeclaredMethods(), getDeclaredConstructors() :
클래스에 선언된 모든 필드, 메소드, 생성자의 정보를 배열로 반환.
Class<?> clazz = MyClass.class;
System.out.println("클래스 이름: " + clazz.getName());
[ Constructor 클래스 ]
특정 클래스의 생성자를 나타내며, 해당 생성자에 접근하고 객체를 생성할 수 있음.
(메소드)
- newInstance(Object... initargs) : 해당 생성자를 사용해 객체를 생성.
** initargs 배열에 전달된 값들을 해당 생성자의 인자로 사용하여 새 객체를 생성.
- getParameterTypes() : 생성자의 파라미터 타입들을 배열로 반환.
- setAccessible(boolean flag) : private 생성자에 접근할 수 있도록 설정.
Constructor<?> constructor = MyClass.class.getDeclaredConstructor(String.class);
constructor.setAccessible(true); // private 생성자에 접근 허용
Object obj = constructor.newInstance("파라미터 값");
[ Field 클래스 ]
특정 클래스의 필드(멤버 변수)를 나타내며, 해당 필드에 접근하고 값을 가져오거나 설정할 수 있음.
(메소드)
- get(Object obj) : 지정한 객체의 필드 값을 반환.
- set(Object obj, object value) : 지정한 객체의 필드 값을 변경.
- getType() : 필드의 타입을 반환.
- setAccessible(boolean flag) : private 필드에 접근할 수 있도록 설정.
Field field = MyClass.class.getDeclaredField("name");
field.setAccessible(true); // private 필드 접근 허용
String value = (String) field.get(obj);
field.set(obj, "새로운 값");
[ Method 클래스 ]
특정 클래스의 메소드를 나타내며, 해당 메소드에 접근하고 호출할 수 있음.
(메소드)
- invoke(Object obj, object... args) : 지정한 객체에서 해당 메소드를 호출.
- getReturnType() : 메소드의 반환 타입을 반환.
- getParameterTypes() : 메소드의 파라미터 타입을 배열로 반환.
- setAccessible(boolean flag) : private 메소드에 접근할 수 있도록 설정.
Method method = MyClass.class.getDeclaredMethod("sayHello", String.class);
method.setAccessible(true); // private 메소드 접근 허용
String result = (String) method.invoke(obj, "안녕하세요");
'Java > 공부공부' 카테고리의 다른 글
[Java] Stream API (Collectors 클래스) (0) | 2024.10.29 |
---|---|
[JAVA] objectMapper, modelMapper (0) | 2024.10.25 |
[JAVA/JSP] jsp include (0) | 2024.10.16 |
[JAVA/JPA] CompletableFuture 자바 비동기 처리 (멀티스레드) (0) | 2024.10.16 |
[Java] 자바 HTTP통신 (HttpURLConnection) (0) | 2024.09.25 |