Class c1 = String.class;
String str = new String();
Class c2 = str.getClass();
Class c3 = Class.forName("java.lang.String");
Class 클래스는 위와 같은 방법으로 불러올 수 있고 그중에 forName을 통해 가져오는 방법이 많이 사용되고 이를 동적 로딩이라고 부릅니다.
동적 로딩이라고 부르는 이유는 보통 다른 클래스 파일을 불러올때는 컴파일 시 스태틱에 그 클래스파일이 같이 바인딩이 되지만 forName으로 class파일을 불러올 때는 컴파일에 바인딩이 되지않고 런타임때 불러오게 되기 때문입니다.
즉 실행시에 불러서 사용할 수 있기 때문에 동적 로딩이라고 부르게됩니다.
단점은 클래스파일명을 직접 적게 되어 있어 만약 파일명에 오타가 나면 에러가 발생할 수 있기 때문에 주의해야합니다.
public static void main(String[] args) throws ClassNotFoundException {
Class c1 = String.class;
String str = new String();
Class c2 = str.getClass();
Class c3 = Class.forName("java.lang.String");
Constructor[] cons = c3.getConstructors();
for(Constructor con: cons) {
System.out.println(con);
}
System.out.println();
Method[] methods = c3.getMethods();
for(Method method : methods) {
System.out.println(method);
}
}
Constructor와 Method를 모를 때 위와 같은 방식으로 모든 Constructor와 Method를 출력시킬 수 있습니다.
하지만 보통 .을 누루면 어떤 것들이 가능한지 알 수 있기 때문에 사용할 일은 많이 없습니다.