[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);
'Java' 카테고리의 다른 글
[JAVA] 자바 - JDBC (Statement / createStatement / executeUpdate) (0) | 2022.08.21 |
---|---|
[JAVA] 자바 - JDBC (Java Database Connectivity) (Connection, DriverManager) (0) | 2022.08.21 |
[JAVA] 자바 - String 클래스 정보 얻기 (0) | 2022.08.03 |
[JAVA] 자바 - Enumeration 인터페이스와 Properties (0) | 2022.08.03 |
[JAVA] 자바 - annotation / 빌트인 어노테이션, 메타 어노테이션 (0) | 2022.08.02 |
블로그의 정보
개발자 미니민의 개발로그
mini_min