-
Computer Science
Runtime에서 Structure나 Behavior를 Observe하거나 Modify하는 것
-
OOL / Java
Runtime에서 메시지를 만들거나 하여, 관찰하고 변경시킨다.
-
확장성을 좋게 만들기 위해서 사용한다.
-
Class Browsers and Visual Development Environments
Class의 정보, 변수, 메소드를 알고 싶을 때 사용한다.
-
Debuggers and Test Tools에서 사용한다.
-
Class Related Operations
- Class Object를 가져온다. e.g. 이름
- Class Modifiers and Type을 가져온다. e.g. static, public
- Class Members를 가져온다. e.g. Constructors, Fields, Methods, Nested Classes
-
Field Related Operations
- Field Types를 가져온다. e.g. int
- Field Modifiers를 가져온다. e.g. public
- Field Values의 값을 Get, Set 할 수 있다.
-
Methods Related Operations
- Method Type을 가져온다. e.g. int
- Method Modifiers를 가져온다. e.g. public, protected
- Method를 메시지를 만들어서 Invoke한다.
-
Constructor Related Operations
- Constructor를 찾는다.
- Constructor Modifiers를 가져온다.
- 새로운 인스턴스를 만들 수 있다.
-
Arrays and Enumerated Types Related Operations
- Array Types를 가져온다.
- 새로운 Array를 만들 수 있다.
- Array와 요소를 Get, Set 할 수 있다.
- Enums를 가져온다.
- Enums Fields를 Get, Set 할 수 있다.
- Junit
- Spring
- Tomcat
- Eclipse
- Struts
- Hibernate
DoubleOperator douOper = new DoubleOperator();
Class<?> cla = Class.forName("DoubleOperator");
//We need 'Class' for 'getmethod()'.
Class paratypes[] = new Class[] {Double.TYPE, Double.TYPE};
//"Class.getMethod(String name, Class parameterTypes)"
methMet = cla.getMethod("add", paratypes);
//We need 'Object' for 'invoke()'.
Object arglist[] = new Object[2];
arglist[0] = new Double(5.0);
arglist[1] = new Double(5.0);
//"Method.invoke(Object obj, Object args)"
methMet.invoke(douOper, arglist);
//10.0
-
Pros
- Exploring Binary Objects, 확장성
- 프로그램을 동적으로 적용할 수 있다.
-
Cons
- 성능이 저하될 수 있다.
- 보안 공격이 들어올 수 있다.
- 보안 이슈가 발생할 수 있다.
- 높은 유지보수성을 요구한다.