반응형
Class 클래스
자바는 클래스와 인터페이스의 메타데이터를 java.lang 패키지에 소속된 Class 클래스로 관리한다.
(메타 데이터 : 클래스의 이름, 생성자 정보, 필드 정보, 메소드 정보)
Class 객체 얻기(getClass(), forName())
최상위 클래스인 Object의 getClass()메소드를 이용해서 Class 객체를 얻을 수 잇다.
// 해당 클래스로 객체를 생성했을 때
Class clazz = obj.getClass();
// 객체를 생성하기전 Class 객체 얻기
try{
Class clazz = Class.forName(String className);
}catch(ClassNotFoundException e){
}
예제코드
package basic;
public class ClassExample {
public static void main(String[] args) {
ClassExample car = new ClassExample();
Class clazz1 = car.getClass();
System.out.println(clazz1.getName());
System.out.println(clazz1.getSimpleName());
System.out.println(clazz1.getPackage().getName());
System.out.println();
try {
Class clazz2 = Class.forName("basic.ClassExample");
System.out.println(clazz2.getName());
System.out.println(clazz2.getSimpleName());
System.out.println(clazz2.getPackage().getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
basic.ClassExample
ClassExample
basic
basic.ClassExample
ClassExample
basic
리플렉션(getDeclaredConstructors(), getDeclaredFields(), getDeclaredMethods())
Class 객체를 이용하면 클래스의 생성자, 필드, 메소드 정보를 알아낼 수 있다.(리플렉션)
Constructor[] constructors = clazz.getDeclaredConstructors();
Field[] fields = clazz.getDeclaredFields();
Method[] methods = clazz.getDeclaredMethods();
동적 객체 생성(newInstance())
Class 객체를 이용하면 new연산자를 사용하지 않고 동적으로 객체를 생성할 수 있다.
⇒ 런타임 시에 클래스 이름이 결정되는 경우 유용하게 사용할 수 있다.
try{
Class clazz = Class.forName("런타임 시 결정되는 클래스 이름");
Object obj = clazz.newInstance();
}catch(Exception e){
}
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] LocalDate, LocalDateTime, LocalTime 문자열 파싱(parsing), 포맷팅(Formatting) (0) | 2019.10.23 |
---|---|
[JAVA] Format 클래스 (0) | 2019.10.23 |
[JAVA] 메소드 참조 (0) | 2019.08.07 |
[JAVA] Predicate 함수적 인터페이스 (Functional Interface) (0) | 2019.07.25 |
[JAVA] Operator 함수적 인터페이스 (Functional Interface) (0) | 2019.07.25 |