우선, 두 단어 모두 포함하고 있는 동적 로딩(Dynamic Loading)이 무엇인지 정의해보자
동적인 클래스 로딩 (dynamic loading)
런타임 시 JVM이 동적으로 참조할 클래스 로딩. JVM이 클래스에 대한 정보를 갖고 있지 않으므로 즉, 자바는 동적으로 클래스를 읽어온다
그럼 다음으로 각각의 동적 로딩에 대해서 설명하도록 하겠다
Load Time Dynamic Loading
하나의 Class를 Loading 하는 과정에서 이와 관련된 Class들을 한꺼번에 Loading 한다. 아래의 예제를 보면 Hello라는 Class에서 String객체를 Parameter로 사용하고 있고 System객체를 호출하고 있다 이 경우 Hello Class가 ClassLoader에 의해 JVM내로 Loading 될 때
java.lang.String Class와 java.lang.System Class가 동시에 Loading이 이루어진다.
Hello클래스 실행 시, 부트스트랩 클래스 로더 생성> Object 클래스 읽음> Hello.class파일 읽음> Hello 클래스 로딩 시
java.lang.String Class와 java.lang.System클래스 필요 즉, 하나의 클래스(Hello)를 로딩하는 과정에서 동적으로 클래스를 로딩하는 것
public class Hello {
public static void main(String[] args) {
System.out.println(“Hello Java”);
}
}
call : java Hello output : Hello Java
Runtime Dynamic Loading
객체를 참조하는 순간에 동적으로 Loading 하는 방식이다
Class.forName()이 실행되기 전까지는 Hello클래스에서 어떤 클래스를 참조하는지 알 수 없다