본문 바로가기
Java

[Java] 리플렉션 (Reflection)

by 스응 2023. 6. 18.
728x90
728x90

리플렉션 (Reflection)

  - 프로그램 실행 중에 클래스의 정보를 분석/조작할 수 있는 부분

  - 런타임 시점에 동작으로 클래스의 메서드/필드/생성자 등에 접근하고 호출할 수 있음

  - 자바의 핵심 기능

  - java.lang.reflect 패키지

 

#  클래스 정보 가져오기

1
2
3
4
5
6
7
8
9
// 1) Class.forName() 사용 
Class<?> clazz = Class.forName("com.example.MyClass");
 
// 2) 객체.getClass() 사용 
MyClass obj = new MyClass();
Class<?> clazz = obj.getClass();
 
// 3) 리터럴로 직접 .class를 붙여서 사용 
Class<?> clazz = MyClass.class;
cs

 

#  필드 정보 가져오기

1
2
3
4
5
// public 필드에만 접근 가능 
Field field = clazz.getField("fieldName");
 
// 모든 접근제한자에 접근 가능 
Field field = clazz.getDeclaredField("fieldName");
cs

 

#  메서드 정보 가져오기

1
2
3
4
5
// public 메서드에만 접근 가능
Method method = clazz.getMethod("methodName", parameterTypes);
 
// 모든 접근제한자에 접근 가능 
Method method = clazz.getDeclaredMethod("methodName", parameterTypes);
cs

 

#  생성자 정보 가져오기

1
2
3
4
5
6
7
8
9
10
11
// 클래스 정보 가져오기
Class<?> clazz = MyClass.class;
 
// public 생성자에만 접근 가능
Constructor<?> publicConstructor = clazz.getConstructor(String.class);
 
// 모든 접근제한자 생성자에 접근 가능
Constructor<?>[] constructors = clazz.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
    System.out.println(constructor);
}
cs
320x100
반응형

'Java' 카테고리의 다른 글

[Java] IntelliJ (인텔리제이) 단축키  (0) 2023.06.18
[Java] 어노테이션  (0) 2023.06.18
[Java] JVM (Java Virtual Machine)  (0) 2023.06.18
[Java] Garbage Collection  (0) 2023.06.18
[Java] 객체 지향 프로그래밍 (OOP)과 SOLID 원칙  (0) 2023.06.18

댓글