개발자 미니민의 개발스터디

[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

활동하기