리플렉션의 이란
리플렉션이란**, 프로그램이 실행 시간(Runtime)에** 자기 자신의 구조(클래스, 메서드, 필드 등)를 검사하고,
분석하며, 조작할 수 있게 해주는 자바 API이다.
기초 문법
package ex03;
// 클래스.클래스, 클래스 객체 단어를 사용하기도 한다.
public class ClassObject {
Object object;
// native - 키워드는 해당 메서드가 자바가 아닌 다른 언어로 구현되었음을 의미
// 자바 표준 API로는 접근할 수 없느느 OS 의 고유 기능이나
// 하드웨어를 직접 다뤄야 하는 메서드에 선언 한다.
public static void main(String[] args) throws ClassNotFoundException {
// 프로그래밍이 실행 시점에 특정 인스턴스(객체)에 설계도를 얻는 방법은
// 3가지 방법이 있다.
// 1. Class<?> - 클래스 리털럴
Class<?> clazz1 = String.class;
// 2. 인스턴스의 getClass() 메서드를 사용하는 방법
Class<?> clazz2 = "Hello".getClass();
// 3. 정적 메서드를 사용 (동적 로딩)
Class<?> clazz3 = Class.forName("java.lang.String");
Class<?> clazz4 = Class.forName("com.mysql.cj.jdbc.Driver");
//Class<?> clazz5 = Class.forName("oracle.jdbc.dirver.OracleDirver");
} // end of main
}
리플렉션 연습
package ex03;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class App {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Hello hello = new Hello();
// ========== 리플렉션을 활용해서 해당 인스턴스에 메서드를 실행 시켜 보자 ========
Class<?> clazz = hello.getClass();
// 클래스 객체 안에(설계도) 메서드 정보 탐색 (문자열 타입으로)
Method method = clazz.getDeclaredMethod("greeting");
// 핵심 ! 메서드를 실행시키자 (invoke)
method.invoke(hello);
// bye 메서드는 String 타입의 마라미터 1개를 가진 메서드 이다.
Method methodBye = clazz.getDeclaredMethod("bye", String.class);
methodBye.invoke(hello, "티모");
}
/**
* Class 객체 : 런타임에 클래스의 '설계도'를 가져오는 방법
* Method 객체 : Class 객체로 부터 특정 메서드의 정보를 가져오는 방법
* method.invoke(obj, args): 메서들 동적으로 실행하는 방법
*/
}
'JAVA' 카테고리의 다른 글
| 리플렉션(+어노테이션) (0) | 2025.11.14 |
|---|---|
| 우당탕탕 소셜로그인 구현(for kakao) -- 진행중 (0) | 2025.11.11 |
| 리플렉션(경직된 설계) (0) | 2025.10.27 |
| 리플렉션 (어노테이션) (0) | 2025.10.27 |
| OCP (개방-폐쇄 원칙) (0) | 2025.10.15 |