더북(TheBook)

4.4.3 클래스 로더


클래스 파일에는 가상 머신 명령어가 저장된다. 각 클래스 파일은 단일 클래스나 인터페이스에 해당하는 명령어를 담는다. 클래스 파일을 파일 시스템, JAR 파일, 원격 위치에 둘 수 있고, 심지어 메모리에서 동적으로 생성할 수도 있다. 클래스 로더(class loader)는 바이트를 로드해서 가상 머신의 클래스나 인터페이스로 변환하는 역할을 한다.

가상 머신은 main 메서드가 호출될 메인 클래스부터 시작해 필요할 때 클래스 파일을 로드한다. 메인 클래스는 java.lang.System이나 java.util.Scanner 같은 클래스를 이용하므로 이런 클래스도 로드하고, 이것이 의존하는 클래스도 로드한다.

자바 프로그램을 실행할 때는 최소한 다음 클래스 로더 세 가지가 연관된다.

부트스트랩 클래스 로더(bootstrap class loader)는 가장 기본적인 자바 라이브러리 클래스를 로드한다. 이 로더는 가상 머신의 일부다.

플랫폼 클래스 로더(platform class loader)는 다른 라이브러리 클래스를 로드한다. 부트스트랩 클래스 로더가 로드하는 클래스와 달리 보안 정책으로 플랫폼 클래스 퍼미션을 구성할 수 있다.

시스템 클래스 로더(system class loader)는 애플리케이션 클래스를 로드한다. 이 로더는 클래스 패스와 모듈 패스에 있는 디렉터리와 JAR 파일에서 클래스를 찾는다.

icon Caution

구 버전 오라클 JDK에서는 플랫폼 클래스 로더와 시스템 클래스 로더가 URLClassLoader 클래스의 인스턴스였다. 하지만 더는 그렇지 않다. 일부 프로그래머는 URLClassLoadergetURLs 메서드로 클래스 패스를 찾고는 했다. 이제 이 방법 대신 System.getProperty("java.class.path")를 사용해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.