클래스 로더 (Class Loader)
자바는 동적 로드 특징이 있다.
이 동적 로드를 담당하는 부분이 JVM의 클래스 로더다.
계층 구조
- 클래스 로더끼리 부모, 자식 관계를 이루어 계층 구조를 생성한다. 최상의 클래스 로더는 부트스트랩 클래스 로더이다.
- 부트 스트랩 클래스 로더 (Bootstrap class loader) : JVM을 가동할 때 생성되며, Object 클래스를 비롯해 자바 API를 로드한다.
- 확장 클래스 로더 (Extension class loader) : 기본 자바API를 제외한 확장 클래스를 로그한다. 보안 기능.
- 시스템 클래스 로더 (System class loader) : 애플리케이션의 클래스를 로드한다. 사용자가 지정한 $CLASS_PATH 내의 클래스를 로드한다.
- 사용자 정의 클래스 로더 (User-defined class loader) : 애플리케이션 사용자가 직접 코드 상에서 생성해서 사용하는 클래스 로더.
웹 애플리케이션 서버와 같은 컨테이너는 서로 독립적으로 작동하도록 사용자 정의 클래스 로더를 사용한다.
순서
로드 - 검증 - 준비 - 분석 - 초기화 순으로 클래스를 로드하고 초기화 한다.
- 로드 : 클래스를 파일에서 가져와 JVM의 메모리에 로드한다.