레알윙 2020. 6. 9. 09:00
반응형

리플렉션의 시작은 Class<T>

 

Class<T>에 접근하는 방법

  • 모든 클래스를 로딩 한 다음 Class<T>의 인스턴스가 생긴다. “타입.class”로 접근할 수 있다.
  • 모든 인스턴스는 getClass() 메소드를 가지고 있다. “인스턴스.getClass()”로 접근할 수 있다.
  • 클래스를 문자열로 읽어오는 방법
    • Class.forName(“FQCN”)
    • 클래스패스에 해당 클래스가 없다면 ClassNotFoundException이 발생한다.

 

Class<T>를 통해 할 수 있는 것

  • 필드 (목록) 가져오기
  • 메소드 (목록) 가져오기
  • 상위 클래스 가져오기
  • 인터페이스 (목록) 가져오기
  • 애노테이션 가져오기
  • 생성자 가져오기

 

 

예시

public class MyBook extends Book implements MyInterface {

}

 

public class Book {
	private String a = "a";

	private static String B = "BOOK";
	private static final String C = "BOOK";

	public String d = "d";
	protected String e = "e";

	public Book() {

	}

	public Book(String a, String d, String e) {
		super();
		this.a = a;
		this.d = d;
		this.e = e;
	}

	private void f() {
		System.out.println("F");
	}
	
	public void g() {
		System.out.println("g");
	}

	public int h() {
		return 100;
	}
}

 

public interface MyInterface {

}

 

 

public class StartMain {

	public static void main(String[] args) throws ClassNotFoundException {
		// 클래스 타입을 이용해서 가져오기
		Class<Book> bookClass = Book.class;
		
		Book book = new Book();
		// 클래스 인스턴스를 이용해서 가져오기
		Class<? extends Book> aClass = book.getClass();
		// 클래스 위치로 접근할 때
		Class<?> aClass1 =  Class.forName("kr.co.study.test");	
	}
}
반응형