본문 바로가기

Java/Java 기초

Java Reflection 사용하기 (5)

이 문서는 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