[JAVA] 자바 - Class 클래스로 객체 생성 방법!
by mini_min
[JAVA]
자바 - 다른 객체 생성방법!
✔️ 또다른 객체 생성방법
지금까지 Book obj = new Book(); 이렇게 객체를 생성해왔지만, Class 클래스로 객체를 생성하는 방법이 따로 있었다. 포인트는 문자열로 객체를 넘겨받고 클래스 정보를 구하는 Class<?> cls 선언하기
ch10.unit2.Book <= 이놈의 객체를 생성해줄 것.
//1. 문자열로 객체 넘겨받고, 클래스 정보구하는 Class<?> cls 선언. className = "ch10.unit2.Book"; Class<?> cls = Class.forName(className); //문자열에 있는 놈의 객체를 생성해야하는 상황
◼️ 인자가 없는 생성자로 객체 만들 때,
Constructor<?> con1 = cls.getConstructor(); Book book1 = (Book)con1.newInstance(); book1.disp();
◼️ 인자가 있는 생성자로 객체 만들 때,
Constructor<?> con2 = cls.getConstructor(String.class); Book book2 = (Book)con2.newInstance("스프링"); book2.disp();
◼️ static 필드 값 가져올 때 (그대로)
s = (String)f1.get(null); : null 이 들어가는 이유, static 은 객체 생성할 필요가 없으니까, 객체 없어서 null이다.
(스트링) : 스트링으로 다운캐스팅해준 것.
System.out.println("static 필드 접근..."); Field f1 = cls.getDeclaredField("publisher"); s = (String)f1.get(null); System.out.println("static 필드 값 :" + s);
◼️ static 필드 값 가져올 때 (변경해서)
f1.set(null, "사랑"); s = (String)f1.get(null); System.out.println("변경된 필드 값 : " +s);
◼️ private 필드 값 가져올 때 (그대로)
private 필드에 접근하기 위해서는 setAccessible 선언을 꼭 해줘야한다!
System.out.println("private 필드 접근..."); Field f2 = cls.getDeclaredField("subject"); //setAccessible 해야됨 무조건~~! f2.setAccessible(true); //private 필드 접근 가능하도록 설정 s = (String)f2.get(book2); //book2 객체 넣었다...?
◼️ private 필드 값 가져올 때 (변경해서)
f2.set(book2, "너자바"); s = (String)f2.get(book2); System.out.println("변경된 필드 값 : " +s);
◼️ 메소드 접근해서 가져올 때 (마찬가지로 private 메소드는 setAccessible 해줘야한다.)
Method m1 = cls.getDeclaredMethod("bookName"); m1.setAccessible(true); //private 접근 허용 s = (String)m1.invoke(book2); //메소드 호출 System.out.println("private 메소드 호출 결과 : " +s);
블로그의 정보
개발자 미니민의 개발로그
mini_min