ClassLoader — 클래스 로더
ClassLoader — 클래스 로더
클래스 로더는 클래스 로딩을 담당하는 객체입니다. ClassLoader 클래스는 추상 클래스입니다. 클래스의 이진 이름(binary name)이 주어지면 클래스 로더는 해당 클래스의 정의를 구성하는 데이터를 찾거나 생성하려고 시도해야 합니다. 일반적인 전략은 이름을 파일 이름으로 변환한 뒤 파일 시스템에서 그 이름의 "클래스 파일"을 읽는 것입니다.
본문
모든 Class 객체는 자신을 정의한 ClassLoader에 대한 참조를 포함합니다. 배열 클래스의 Class 객체는 클래스 로더에 의해 생성되지 않고 Java 런타임이 필요에 따라 자동으로 생성합니다. 배열 클래스의 클래스 로더는 요소 타입의 클래스 로더와 같으며, 요소 타입이 원시 타입이면 배열 클래스는 클래스 로더가 없습니다.
public abstract class ClassLoader extends Object
애플리케이션은 JVM이 클래스를 동적으로 로드하는 방식을 확장하기 위해 ClassLoader의 하위 클래스를 구현합니다. 또한 클래스 로더는 보안 관리자가 보안 도메인을 나타내는 데 사용할 수 있습니다. 클래스 로딩 외에도 리소스(resource)를 찾는 일을 담당합니다.
위임 모델
ClassLoader 클래스는 클래스와 리소스를 검색하기 위해 위임 모델(delegation model)을 사용합니다. 각 ClassLoader 인스턴스는 연관된 부모 클래스 로더를 가지며, 클래스나 리소스를 찾으라는 요청을 받으면 자신이 찾기 전에 보통 부모 클래스 로더에 위임합니다.
주요 메서드
public Class<?> loadClass(String name) throws ClassNotFoundException
protected Class<?> findClass(String name) throws ClassNotFoundException
protected final Class<?> defineClass(String name, byte[] b, int off, int len) throws ClassFormatError
protected final void resolveClass(Class<?> c)
public URL getResource(String name)
public InputStream getResourceAsStream(String name)
public ClassLoader getParent()
public static ClassLoader getSystemClassLoader()
public static ClassLoader getPlatformClassLoader()
public String getName()