자바 클래스 로더

2018-07-05

클래스 로더란?

한번 작성하면 플랫폼에 상관없이 쓸 수 있다.

자바의 특징을 실행할 수 있게 한 기술이 바로 클래스 로더(Class Loader) 다.

자바 코드를 작성한 후 컴파일하면 해당 코드는 JVM에서 실행 가능한 상태가 된다.

이때 JVM이 클래스를 실행하기 위해서는 클래스를 로딩하는 과정이 필요하다.

그 과정을 수행해 주는 역할을 하는 것이 클래스 로더다.

클래스 로더의 특징

  • 구조가 계층적이다.
    • 상위 클래스 로더에서 하위 클래스 로더를 갖는 방식.
    • 최상위 클래스 로더는 부트스트랩 클래스 로더
  • 클래스 로딩을 위임할 수 있다.

  • 클래스 로더는 가시적인 규약이 있다.
    • 자식 클래스 로더는 클래스 로딩 요청 위임을 통해 부모 클래스 로더가 로딩한 클래스를 찾을 수 있지만, 부모 클래스 로더는 자식 클래스 로더가 로딩한 클래스를 알 수 없다.
  • 클래스 언로딩이 불가능하다.
    • 클래스 로더로 로딩한 클래스들을 언로딩할 수 없다.
    • 클래스 로더가 로딩한 클래스를 언로딩할 수 없으므로 GC가 동작하거나 WAS가 재시작할때 초기화된다.

클래스 로더의 유형

  • 부트스트랩 로더
    • JVM 런타임 실행을 위해 기반이 되는 파일들을 로드한다.
  • 확장 클래스 로더
    • 부트스트랩 로더가 로딩이 끝나면 확장 클래스 로더가 자바의 최상위 객체인 Object를 포함한 자바 API를 호출한다.
  • 시스템 클래스 로더
    • 확장 클래스 로더의 로드가 끝나면 시스템 클래스 로더가 클래스패스에 포함된 클래스들을 로드한다.
  • 개발자가 만든 사용자 정의 클래스 로더
    • 사용자는 시스템 클래스 로더가 로드하는 클래스 패스 영역에만 접근할 수 있다.
    • 그래서 로컬에서 외부 라이브러리를 실행할 때 클래스 패스를 지정해서 실행하기도 한다.