리플렉션 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 중 랜덤 출력
Java - 리플렉션을 이용한 객체 생성 (0) | 2018.10.12 |
---|---|
Java - 리플렉션, 클래스의 메서드 정보 확인 (0) | 2018.10.12 |
Java - ServerSocket, 클라이언트에 응답하기 (0) | 2018.10.04 |
Java - ServerSocket, Thread를 적용한 에코메시지 테스트 (0) | 2018.10.04 |
Java - Jsoup을 이용한 크롤링으로 네이버 실시간 순위 가져오기 (20.07.30 수정) (1) | 2018.10.04 |
댓글 영역