Java Reflection 이란,
Reflection이란 객체를 통해 클래스의 정보를 분석해 내는 것을 말한다. ( 투명, 반사라는 사전적인 의미를 지니고 있다. )
객체의 메모리 정보만 알고 있고, 객체의 형에 대해서는 모른다는 가정하에 Reflection을 통해 아래와 같은 정보를 가져 올 수 있으며. 이 정보를 통해 객체를 생성하거나 메소드를 호출하거나 변수의 값을 변경 할 수 있다.
- Class
- Constructor
- Method
- Field
Class reflection = Data.class;
// Data class Method 정보
Method[] m = reflection.getMethods();
// Data class Field 정보
Field[] f = reflection.getFields();
// Data class 생성자 정보
Constructor[] cs = reflection.getConstructors();
// Data class Interface 정보
Class[] inter = reflection.getInterfaces();
// Data class 부모 클래스 정보
Class superClass = reflection.getSuperclass();
※ Class에 정의 된 Method 정보 조회
try {
Class c = Class.forName("java.util.Stack");
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++) { {
Method m = methlist[i];
System.out.println("name = " + m.getName());
System.out.println("decl class = " + m.getDeclaringClass());
Class pvec[] = m.getParameterTypes();
for (int j = 0; j < pvec.length; j++) {
System.out.println(" param #" + j + " " + pvec[j]);
Class evec[] = m.getExceptionTypes();
for (int j = 0; j < evec.length; j++) {
System.out.println("exc #" + j + " " + evec[j]);
}
System.out.println("return type = " + m.getReturnType());
System.out.println("-----");
}
}
} catch (Throwable e) {
System.err.println(e);
}
※ Class의 Constructors 정보 조회
try {
Class cls = Class.forName("java.util.Stack");
Constructor ctorlist[] = cls.getDeclaredConstructors();
for (int i = 0; i < ctorlist.length; i++) {
Constructor ct = ctorlist[i];
System.out.println("name = " + ct.getName());
System.out.println("decl class = " + ct.getDeclaringClass());
Class pvec[] = ct.getParameterTypes();
for (int j = 0; j < pvec.length; j++)
System.out.println("param #" + j + " " + pvec[j]);
Class evec[] = ct.getExceptionTypes();
for (int j = 0; j < evec.length; j++)
System.out.println("exc #" + j + " " + evec[j]);
System.out.println("-----");
}
}
} catch (Throwable e) {
System.err.println(e);
}
※ Class의 Fields 정보 조회
try {
Class cls = Class.forName("java.util.Stack");
Field fieldlist[] = cls.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
System.out.println("name = " + fld.getName());
System.out.println("decl class = " + fld.getDeclaringClass());
System.out.println("type = " + fld.getType());
int mod = fld.getModifiers();
System.out.println("modifiers = " + Modifier.toString(mod));
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
'Java' 카테고리의 다른 글
[Java] 공개키(Public Key) 와 개인키(Priviate Key) (0) | 2020.12.10 |
---|---|
[Java] 암호 알고리즘 / 운용 모드 / Padding (0) | 2020.11.28 |
[Java] Optional (0) | 2020.11.15 |
[Java] CPU 점유율이 높은 스레드 상태 분석(Thread dump) (0) | 2020.11.10 |
[Java] Lombok (0) | 2020.10.20 |