상세 컨텐츠

본문 제목

Java - 리플렉션 (reflect)

개발/Java

by 뉴에이스 2018. 10. 8. 10:46

본문

	리플렉션 API : 로딩된 클래스에 대한 정보를 꺼내서 확인 (동적 코딩 가능)
				: 클래스 정보
				: 클래스 필드값
				: 클래스명.class, Class.forName(패키지포함클래스명), 생성된클래스객체.getClass()

 

Dog Class 소스

 

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;
	}
}

 

소스

 

// 클래스 정보를 접근하기
private static void exam01() throws Exception {
	//String test = "test.Dog";
	// 일반적인 객체 생성 방식
	// Dog d = new Dog();
	
	// 1번 방식,  어떤 타입이든 받기
	// 사용하고자 하는 클래스에 대한 정보를 Class 객체로 받는다
	Class clz = Dog.class;
	
	// 2번 방식, 패키지명을 포함한 클래스명 입력, 문자열을 통한 클래스 정보 입력..
	Class clz2 = Class.forName("test.Dog");
	
	// 3번 방식, 생성되어 있는 객체를 통해 클래스 정보를 가져옴, getClass()는 모든 객체에 있음 (Object에 있는 메서드)
	Dog d = new Dog();
	Class clz3 = d.getClass();
	
	// 모두 Dog 클래스에 접근해서 정보를 가져오기 때문에 같은 주소를 가지고 있다
	System.out.println(clz == clz2);
	System.out.println(clz2 == clz3);
	
	// 패키지명을 포함한 클래스명
	System.out.println( clz.getName() );
	// 클래스명
	System.out.println( clz.getSimpleName() );
}

private static void exam02() throws Exception {
	Object obj = getObject();
	// obj가 어떤 객체를 받았는지 화면에 출력
	// 문자열 객체, Dog 객체, ArrayList 객체
	
	// 넘겨받은 객체의 클래스 정보 확인
	Class clz = obj.getClass();
	//System.out.println(clz.getSimpleName() + " 객체");
	
	switch(clz.getSimpleName()) {
	case "String":
		System.out.println("문자열 객체가 넘어왔음..");
		break;
	case "Dog":
		System.out.println("Dog 객체가 넘어왔음..");
		break;
	case "ArrayList":
		System.out.println("ArrayList 객체가 넘어왔음..");
		break;
	}
}

private static Object getObject() throws Exception {
	Object arr[] = {
			new String("a"),
			new Dog(),
			new ArrayList()
	};
	return arr[new Random().nextInt(arr.length)];
}

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

 

결과

 

true
true
test.Dog
Dog
==================
ArrayList 객체가 넘어왔음.. // ArrayList, Dog, String 중 랜덤 출력

 

관련글 더보기

댓글 영역