상세 컨텐츠

본문 제목

Java - 리플렉션, 클래스의 메서드 정보 확인

개발/Java

by 뉴에이스 2018. 10. 12. 14:52

본문

Dog 클래스

 

public class Dog {
	private String name;
	private int age;
	
	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;
	}
}

 

exam01 클래스

 

private static void exam01() throws Exception {
	// Dog 클래스의 메서드 정보
	Class clz = Dog.class;
	
	// Dog 클래스의 모든 메서드 정보 조회하기
	Method[] mArr = clz.getDeclaredMethods();
	
	for(Method m : mArr) {
		System.out.println("-------------------------------------------------");
		System.out.println("이름 : " + m.getName()); // 메서드 이름, getName()
		Class rClz = m.getReturnType(); // 메서드 반환타입, getReturnType()
		System.out.println("반환타입 : " + rClz.getSimpleName());
		System.out.println("파라미터 정보");
		Parameter[] pArr = m.getParameters(); // 파라미터 정보, getParameters()
		for (Parameter p : pArr) {
			Type t = p.getParameterizedType();
			System.out.println("파라미터 타입 : " + t.getTypeName() + ", 파라미터 이름 : " + p.getName()); // 파라미터 타입, getTypeName()
		}
	}
}

 

exam02 클래스

 

private static void exam02() throws Exception {
	Class clz = Dog.class;
	
	// Dog 클래스의 특정 메서드 정보 조회하기, getDeclaredMethods(클래스명, 매개변수타입(생략가능))
	// public String getName();
	//Method m = clz.getDeclaredMethod("getName");
	
	// 매개변수가 String 일 경우, String.class
	// public String setName();
	// Method m = clz.getDeclaredMethod("setName", String.class);

	// public String setAge();
	Method m = clz.getDeclaredMethod("setAge", int.class);
	
	System.out.println("이름 : " + m.getName());
	Parameter[] pArr = m.getParameters();
	for (Parameter p : pArr) {
		Type t = p.getParameterizedType();
		System.out.println("파라미터 타입 : " + t.getTypeName() + ", 파라미터 이름 : " + p.getName());
	}
	System.out.println("-------------------------------------------------");
	
	/*
	Method[] mArr = clz.getDeclaredMethods();
	for(Method m : mArr) {
		System.out.println("-------------------------------------------------");
		System.out.println("이름 : " + m.getName());
		Class rClz = m.getReturnType();
		System.out.println("반환타입 : " + rClz.getSimpleName());
		System.out.println("파라미터 정보");
		Parameter[] pArr = m.getParameters();
		for (Parameter p : pArr) {
			Type t = p.getParameterizedType();
			System.out.println("파라미터 타입 : " + t.getTypeName() + ", 파라미터 이름 : " + p.getName());
		}
	}
	*/
}

 

quiz01 클래스 - ArrayList에 있는 메서드 중에서 "i"로 시작하는 메서드의 이름을 화면에 출력

 


private static void quiz01() throws Exception {
	// ArrayList 클래스의 Class 객체 얻기
	Class clz = ArrayList.class;
	// Class 객체에서 모든 메서드 조회하기
	Method[] mArr = clz.getDeclaredMethods();
	// 메서드를 반복하면서 메서드의 이름이 i로 시작하는지 체크하고 출력
	for(Method m : mArr) {
		if(m.getName().startsWith("i")) {
			System.out.println(m.getName());
		}
	}
}

 

quiz02 클래스 - Dog 클래스의 메서드 중에서 반환타입이 void이고 set으로 시작하는 메서드의 이름을 화면에 출력

 

private static void quiz02() throws Exception {
	// ArrayList 클래스의 Class 객체 얻기
	Class clz = Dog.class;
	// Class 객체에서 모든 메서드 조회하기
	Method[] mArr = clz.getDeclaredMethods();
	// 메서드를 반복하면서 메서드의 이름이 set으로 시작고, 반환타입이 void인지 확인
	for(Method m : mArr) {
		//Class rClz = m.getReturnType();
		//if(m.getName().startsWith("set") && rClz.getSimpleName().equals("void")) {
		if(m.getName().startsWith("set") && m.getReturnType() == void.class) {
			System.out.println(m.getName());
		}
	}
}

 

main 소스

 

public static void main(String[] args) {
	try {
		System.out.println("============ exam01 ============");
		exam01();
		System.out.println("============ exam02 ============");
		exam02();
		System.out.println("============ quiz01 ============");
		quiz01();
		System.out.println("============ quiz02 ============");
		quiz02();
	} catch(Exception e) {
		e.printStackTrace();
	}
}

 

결과

 

============ exam01 ============
-------------------------------------------------
이름 : getName
반환타입 : String
파라미터 정보
-------------------------------------------------
이름 : setName
반환타입 : void
파라미터 정보
파라미터 타입 : java.lang.String, 파라미터 이름 : arg0
-------------------------------------------------
이름 : setAge
반환타입 : void
파라미터 정보
파라미터 타입 : int, 파라미터 이름 : arg0
-------------------------------------------------
이름 : getAge
반환타입 : int
파라미터 정보
============ exam02 ============
이름 : setAge
파라미터 타입 : int, 파라미터 이름 : arg0
-------------------------------------------------
============ quiz01 ============
indexOf
isEmpty
iterator
============ quiz02 ============
setName
setAge

 

관련글 더보기

댓글 영역