이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다.
Using Java Reflection
https://www.oracle.com/technetwork/articles/java/javareflection-1536171.html
이름으로 함수 호출하기
지금까지의 포스팅은 모두 reflection을 이용하여 class 정보를 가져오는 것이었지만, 단순히 정보를 가져오는 것에서 그치는 것이 아니라 이름을 이용하여 함수를 호출하는 등의 다른 활용방법도 존재합니다.
import java.lang.reflect.*;
public class method2 {
public int add(int a, int b) {
return a + b;
}
public static void main(String args[]) {
try {
Class cls = Class.forName("method2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Method meth = cls.getMethod("add", partypes);
method2 methobj = new method2();
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = meth.invoke(methobj, arglist);
Integer retval = (Integer) retobj;
System.out.println(retval.intValue());
} catch (Throwable e) {
System.err.println(e);
}
}
}
프로그램이 add 함수를 호출하려고 하지만, 실행 시점까지 그 사실을 모른다고 가정해봅시다. 즉 함수의 이름은 실행시점에 확정되는 것입니다 (예를 들어 JavaBean 개발환경에서 이루진다고 하는 경우). 위 프로그램은 실제로 어떻게 작동하는가를 보여줍니다. getMethod는 두 개의 정수 매개변수를 갖고 있고, "add"라는 이름의 함수를 찾아줍니다. 이 함수를 찾아 Method 객체로 할당하게 되면, 적절한 타입의 인스턴스를 통해 실행되어집니다. 함수를 실행하기 위해 매개변수로 (37), (47)의 wrapping된 정수형 객체를 전달하였고 그 결과 (84)라는 wrapping된 정수형 객체가 return됩니다.
'Java > Java 기초' 카테고리의 다른 글
Java Reflection 사용하기 (7) (0) | 2019.02.18 |
---|---|
Java Reflection 사용하기 (6) (0) | 2019.02.15 |
Java Reflection 사용하기 (4) (0) | 2019.02.15 |
Java Reflection 사용하기 (3) (0) | 2019.02.13 |
Java Reflection 사용하기 (2) (0) | 2019.02.12 |