티스토리 뷰

IT/Java

Java 리플렉션 reflection

forest-33 2024. 8. 6. 20:37

Java 리플렉션(Reflection)

  • 런타임에 클래스를 조사하고 조작할 수 있는 기능
  • 리플렉션을 사용하면 클래스, 메소드, 필드 등의 정보를 런타임에 동적으로 가져오거나 수정할 수 있음.
  • 컴파일 타임에 알 수 없는 클래스의 정보를 다루거나, 동적으로 객체를 생성하고 메소드를 호출하는 데 유용
    • Shallow Reflection은 주로 공용 멤버에 대한 접근과 조작을 제공하는 일반적인 리플렉션
    • Eeep Reflection : java 리플렉션의 확장된 형태로, 비공개 멤버, 상속된 멤버, 내부 클래스 등 일반적인 리플렉션으로 접근하기 어려운 부분에 접근하고 조작 가능 -> field.setAccessible(true); 
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectionExample {
    public static void main(String[] args) throws Exception {
        // 클래스 정보 얻기
        Class<?> clazz = Class.forName("com.example.MyClass");
        System.out.println("Class name: " + clazz.getName());

        // 생성자 접근 및 객체 생성
        Constructor<?> constructor = clazz.getConstructor(String.class);
        Object instance = constructor.newInstance("Hello");

        // 필드 접근 및 수정
        Field field = clazz.getDeclaredField("myField");
        field.setAccessible(true); // 접근 제어 무시 
        field.set(instance, "New Value");
        System.out.println("Field value: " + field.get(instance));

        // 메소드 호출
        Method method = clazz.getDeclaredMethod("myMethod", String.class);
        method.setAccessible(true);
        method.invoke(instance, "Hello");

        // 애노테이션 접근
        if (clazz.isAnnotationPresent(MyAnnotation.class)) {
            MyAnnotation annotation = clazz.getAnnotation(MyAnnotation.class);
            System.out.println("Annotation value: " + annotation.value());
        }
    }
}

 

 

장점

  • 동적 클래스 로딩: 런타임에 클래스를 로드하고 사용할 수 있어 유연성을 높임
  • 라이브러리 및 프레임워크 개발: 리플렉션을 사용하면 범용 라이브러리나 프레임워크에서 특정 클래스의 메소드나 필드를 동적으로 호출할 수 있음.
  • 테스트 및 디버깅 도구: 테스트 프레임워크는 리플렉션을 사용하여 테스트 메소드를 자동으로 검색하고 실행할 수 있음.

단점

  • 성능 저하: 리플렉션은 일반 메소드 호출보다 느림. 많은 리플렉션 사용은 성능에 영향을 줄 수 있음.
  • 안전성: 컴파일 타임에 타입 검사를 할 수 없어 런타임 오류가 발생할 가능성이 높아짐.
  • 가독성: 리플렉션 코드는 일반 코드보다 이해하기 어려울 수 있음

 

 

'IT > Java' 카테고리의 다른 글

JAVA 9 변경 사항들  (0) 2024.08.06
[JAVA] JPMS 자바 플랫폼 모듈 시스템이란  (0) 2024.07.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함