새소식

반응형
Java

[JAVA] 로드타임, 런타임 동적로딩 (Load-Time, Run-Time Dynamic Loading)

  • -
반응형

JVM은 ClassLoader를 이용해 필요한 Class를 Loading 한다

ClassLoader는 Class가 참조되는 순간 동적으로 Load 및 Link가 이루어지는 Dynamic Loading을 담당하는 주체이다

즉 JVM내로 Class를 Load, Link를 통해 적절히 배치하는 일련의 작업을 수행하는 모듈이라고 정의 내릴 수 있다

 

ClassLoader에서 Class를 Load 하는 시점에 따라

Load-Time Dynamic Loading과 Run-Time Dynamic Loading으로 구분된다 

우선, 두 단어 모두 포함하고 있는 동적 로딩(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클래스에서 어떤 클래스를 참조하는지 알 수 없다

Hello클래스의 main() 메서드가 실행되고 Class.forName(args[0])을 호출하는 순간에

args [0]에 해당하는 클래스를 읽어온다


즉, 클래스를 로딩할 때가 아닌 코드를 실행하는 순간에 클래스를 로딩하는 것.

public class Hello {  
	public static void main(String[] args) {  
		Class c1 = Class.forName(args[0]); 
	}  
} 

 

참고 사이트 :)

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.