JAVA

리플렉션(동적 분석 도구 API)

승운노트 2025. 10. 27. 10:42

리플렉션의 이란

리플렉션이란**, 프로그램이 실행 시간(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