자바(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

댓글

이 블로그의 인기 게시물

맥(Mac) | 마우스 휠(스크롤) 반전, Scroll Reverser 설치

OpenLayers | 2. 오픈레이어스(OpenLayers) 배경지도 추가(Google, OpenStreetMap(OSM), Vworld, Naver, Daum(Kakao))

웹(Web) | Request 파라미터(parameter) JavScript에서 암호화(Encryption) Java에서 복호화(Decryption), base64