1. Class 클래스란?
자바의 모든 클래스와 인터페이스는 컴파일 후에 class 파일로 생성되고 파일에 클래스나 인터페이스에 대한 변수, 메서드, 생성자 등의 정보가 담겨있다.
Class 클래스는 컴파일된 calss 파일에 저장된 클래스나 인터페이스의 정보를 가져오는데 사용한다.
모르는 클래스의 정보를 사용할 경우에 Class 클래스를 활용해 클래스 정보를 직접 찾는다.
1번 방식은 이미 생성된 인스턴스가 있어야하고 2, 3번 방식은 컴파일된 클래스 파일이 있다면 클래스 이름만으로 Class 클래스를 반환받는다.
1. Object 클래스의 getClass() 메서드 사용하기
String s = new String();
Class c = s.getClass();
2. 클래스 파일 이름을 Class 변수게 직접 대입하기
Class c = String.Class;
3. Class.forName("클래스 명") 메서드 사용하기
여기서 클래스 명은 패키지 이름을 포함한 것으로 매개변수로 받은 문자열에 해당하는 클래스가 없으면 ClassNotFoundException 오류가 발생한다.
Class c = Class.forName("java.lang.String");
2. Class 클래스를 활용해 클래스 정보 알아보기
사용하려는 클래스의 자료형을 모르는 상태에서 Class 클래스를 활용하여 그 클래스의 정보를 가져오고 이 정보를 활용하여 인스턴스를 생성하거나 메서드를 호출하는 방식을 리플렉션이라고 한다.
3. newInstance()를 사용해 클래스 생성하기
Class 클래스의 newInstance() 메서드는 해당 클래스 정보를 바탕으로 인스턴스를 생성하는 메서드다.
반환형이 Object 이므로 생성된 객체형으로 형 변환이 필요하다.
리플렉션 프로그래밍은 컴파일 시점에 알 수 없는 클래스, 즉 프로그램 실행 중에 클래스를 메모리에 로딩하거나 객체가 다른 곳에 위치해서 원격으로 로딩하고 생성할 때 사용한다.
4. Class.forName()을 사용해 동적 로딩하기
프로그램 실행 이후 클래스의 로딩이 필요한 경우, 클래스의 동적 로딩 방식을 사용한다.
자바는 Class.forName() 메서드를 통해 동적 로딩을 제공한다.
(주의) forName("클래스 명") 메서드로 Class 클래스를 가져올 때 클래스명이 문자열이므로 문자열에 오류가 있어도 컴파일 할떄는 그 오류를 알 수 없다.
'Java > Do It! 자바 프로그래밍' 카테고리의 다른 글
[JAVA] 12-2.컬렌션 프레임워크_컬렉션 프레임워크 (0) | 2022.05.09 |
---|---|
[JAVA] 12-1.컬렉션 프레임워크_제네릭 (0) | 2022.05.09 |
[JAVA] 11-3. 기본 클래스_Wrapper 클래스 (0) | 2022.05.08 |
[JAVA] 11-2. 기본 클래스_String 클래스 (0) | 2022.05.07 |
[JAVA] 11-1. 기본 클래스_Object 클래스 (0) | 2022.05.07 |