자바 클래스 로더
2018-07-05
클래스 로더란?
한번 작성하면 플랫폼에 상관없이 쓸 수 있다.
자바의 특징을 실행할 수 있게 한 기술이 바로 클래스 로더(Class Loader) 다.
자바 코드를 작성한 후 컴파일하면 해당 코드는 JVM에서 실행 가능한 상태가 된다.
이때 JVM이 클래스를 실행하기 위해서는 클래스를 로딩하는 과정이 필요하다.
그 과정을 수행해 주는 역할을 하는 것이 클래스 로더다.
클래스 로더의 특징
- 구조가 계층적이다.
- 상위 클래스 로더에서 하위 클래스 로더를 갖는 방식.
- 최상위 클래스 로더는 부트스트랩 클래스 로더
-
클래스 로딩을 위임할 수 있다.
- 클래스 로더는 가시적인 규약이 있다.
- 자식 클래스 로더는 클래스 로딩 요청 위임을 통해 부모 클래스 로더가 로딩한 클래스를 찾을 수 있지만, 부모 클래스 로더는 자식 클래스 로더가 로딩한 클래스를 알 수 없다.
- 클래스 언로딩이 불가능하다.
- 클래스 로더로 로딩한 클래스들을 언로딩할 수 없다.
- 클래스 로더가 로딩한 클래스를 언로딩할 수 없으므로 GC가 동작하거나 WAS가 재시작할때 초기화된다.
클래스 로더의 유형
- 부트스트랩 로더
- JVM 런타임 실행을 위해 기반이 되는 파일들을 로드한다.
- 확장 클래스 로더
- 부트스트랩 로더가 로딩이 끝나면 확장 클래스 로더가 자바의 최상위 객체인 Object를 포함한 자바 API를 호출한다.
- 시스템 클래스 로더
- 확장 클래스 로더의 로드가 끝나면 시스템 클래스 로더가 클래스패스에 포함된 클래스들을 로드한다.
- 개발자가 만든 사용자 정의 클래스 로더
- 사용자는 시스템 클래스 로더가 로드하는 클래스 패스 영역에만 접근할 수 있다.
- 그래서 로컬에서 외부 라이브러리를 실행할 때 클래스 패스를 지정해서 실행하기도 한다.