Java 기초 Class - 생성하기
앞서 Class 객체를 사용하여 정보를 조회하는 것을 살펴보았다. 메소드를 호출하고 필드 값 또한 변경 가능하므로 예제로 인스턴스로 생성해보도록 한다.
Hello.class
public class Hello {
public String getName() {
return "Hello";
}
}
Main.class
public class Main {
public static void main(String[] args) throws Exception {
Class helloClass = Hello.class;
// 반환하면 오브젝트로 반환할 수 있고, 캐스팅을 해주어야 한다.
Hello hello = (Hello) helloClass.getDeclaredConstructor().newInstance();
String result = hello.getName();
System.out.println("hello = " + hello);
System.out.println("hello = " + result);
}
}
hello = Hello@23fc625e
hello = Hello
클래스 변수에 할당하고 새 인스턴스로 반환한다.
새로운 인스턴스는 객체를 갖게 되었고 메소드를 호출하여 정보를 출력했다.
getDeclaredConstruct().newInstance() 메소드
- getDeclaredConstruct()
- 생성자를 가져온다.
- newInstance()
- 가져온 생성자에서 인스턴스를 생성한다.
리플렉션 - reflection
Class 타입으로 메타 정보 기반으로 정의한 메소드, 필드, 생성자를 조회했을 뿐 아니라 객체의 인스턴스를 생성하고 메소드를 호출하는 모습을 볼 수 있었다.
이를 리플렉션이라 한다.
Class 메타 정보로 애노테이션 정보를 읽거나 특별한 기능을 수행할 수 있고 최근 프레임워크는 이런 기능을 적극적으로 활용하고 있다.