자바(Java) | 클래스(Class)의 변수(Variable), 메소드(Method) 가져오기, 메소드 동적실행, 리플렉션(Reflection)
자바(Java) | 클래스(Class)의 변수(Variable), 메소드(Method) 가져오기, 메소드 동적실행, 리플렉션(Reflection)
java.lang.reflect.Field, java.lang.reflect.Method
1. DavaVo
public class DataVo { private String name; private int age; private String phoneNum; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } }
2. 클래스 변수 가져오기, 메소드 동적실행(Get class Variable, Execute method dynamically)
- getDeclaredFields() : 클래스의 변수(필드) 목록 가져오기
- invoke() : 메소드 동적실행
import java.lang.reflect.Field; import java.lang.reflect.Method; import org.apache.commons.lang3.StringUtils; public class Test { public static void main(String[] args) { try { DataVo vo = new DataVo(); vo.setName("홍길동"); vo.setAge(20); vo.setPhoneNum("010-1111-1111"); Field[] list = DataVo.class.getDeclaredFields(); for (Field f : list) { // 1. field명 String fieldName = f.getName(); System.out.println("fieldName : " + fieldName); // 2. method명 String methodName = "get" + StringUtils.capitalize(fieldName); // 필드명 첫글자 대문자로 변환 System.out.println("실행시킬 함수명 : " + methodName); Method method = DataVo.class.getMethod(methodName); // 3. method 실행 System.out.println("result : " + method.invoke(vo)); // 메소드 동적실행 System.out.println(""); } } catch (Exception e) { e.printStackTrace(); } } }
fieldName : name 실행시킬 함수명 : getName result : 홍길동 fieldName : age 실행시킬 함수명 : getAge result : 20 fieldName : phoneNum 실행시킬 함수명 : getPhoneNum result : 010-1111-1111
3. 클래스 메소드 가져오기, 메소드 동적실행(Get class method, Execute method dynamically)
- getDeclaredMethods() : 클래스의 메소드 목록 가져오기
- invoke() : 메소드 동적실행
import java.lang.reflect.Method; public class Test { public static void main(String[] args) { try { DataVo vo = new DataVo(); vo.setName("홍길동"); vo.setAge(20); vo.setPhoneNum("010-1111-1111"); Method[] list = DataVo.class.getDeclaredMethods(); for (Method m : list) { // 1. field명 String methodName = m.getName(); System.out.println("methodName : " + methodName); if (methodName.startsWith("get")) { // 2. method 실행 System.out.println("result : " + m.invoke(vo)); // 메소드 동적실행 System.out.println(""); } } } catch (Exception e) { e.printStackTrace(); } } }
methodName : getPhoneNum result : 010-1111-1111 methodName : getAge result : 20 methodName : setPhoneNum methodName : setAge methodName : getName result : 홍길동 methodName : setName
댓글
댓글 쓰기