상세 컨텐츠

본문 제목

Java - 리플렉션을 이용한 객체 생성

개발/Java

by 뉴에이스 2018. 10. 12. 17:15

본문

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 클래스

 

// 리플렉션을 이용한 객체 생성하기
public static void exam01() throws Exception {
	// Dog d = new Dog();
	Class clz = Dog.class;
	// 객체 생성하기
	//Object obj = clz.newInstance(); // 1.9 부터 비권장처리 (deprecated)
	Object obj = clz.getDeclaredConstructor().newInstance(); // Declared 가 들어가는건 자기것만사용, 부모에게 접근X, 매개변수가 없는 생성자 생성
	Dog d = (Dog)obj;
	d.setName("리플렉션 테스트");
	System.out.println(d.getName());
}

 

exam02 클래스

 

// 리플렉션을 이용한 메서드 실행하기
private static void exam02() throws Exception {
	/*
	Dog d = new Dog();
	d.setName("a");
	System.out.println(d.getName());
	 */
	Class clz = Dog.class;
	Object obj = clz.newInstance(); // obj == d

	// setNae 메서드 추출
	Method m = clz.getDeclaredMethod("setName", String.class); // m = setName

	// 메서드 실행하기
	m.invoke(obj, "쫑"); // d.setName("쫑")

	// System.out.println(d.getName());
	m = clz.getDeclaredMethod("getName"); // mGet = getName
	System.out.println(m.invoke(obj)); // System.out.pringln(d.getName());
}

 

main 소스

 

public static void main(String[] args) {
	try {
		exam01();
		exam02();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

 

결과

 

리플렉션 테스트
쫑

관련글 더보기

댓글 영역