클래스 패스 매커니즘을 사용해서 코드에서 참조하고 있는 클래스를 찾아낸다.
기본 메커니즘을 사용하여 클래스를 로딩하는 애플리케이션을 작성하려면 ClassLoader를 사용해야 한다.
ClassLoader는 클래스 구현체의 바이트 코드를 얻어 이를 런타임 시스템에 로딩할 수 있다.
컴파일된 클래스 파일을 런타임 시스템으로 로딩하는 방법.
이 부분은 추상 클래스 ClassLoader를 확장하고 findClass 메소드를 오버라이드해야만 하는 클래스 로더의 영역이다.
PlayerLoader loader = new PlayerLoader();
Class<? extends Player> classOf = loader.loadClass(name).asSubclass(Player.class);
로더는 loadClass를 사용하여 클래스를 로딩하고 이 클래스를 나타내는 Class객체를 반환한다.
클래스로더는 주어진 Class객체에서 getClassLoader 메소드를 호출하여 얻을 수 있다.
시스템 클래스는 클래스 로더를 가질 필요가 없으므로 이 메소드를 호출한 결과는 null이다.
클래스로더는 애플리케이션 내의 클래스를 분류하는 네임스페이스를 정의하고 있다.
두개의 클래스가 서로 다른 클래스 로더를 가진다면 이들이 동일한 클래스 파일에 읽은 클래스의 바이너리 데이터를 가지고 있더라도 서로 다른 클래스이다.
그러므로 클래스마다 정적 변수를 ㅏ로 관리하므로 이 중 어떤 클래스의 정적 변수를 수정하더라도 이는 다른 클래스에 영향을 주지 않는다.
스레드마다 클래스를 로딩하기 위해 기본적으로 사용할 수 있는 classLoader를 가지고 있다. 이러한 컨텍스트 클래스 로더는 스레드 생성 시에 지정할 수 있다. 어떤 로더도 지정하지 않았다면 부모 스레드의 컨텍스트 클래스 로더를 사용한다.
첫번째 스레드의 컨텍스트 클래스 로더는 일반적으로 애플리케이션을 로딩하기 위해 사용하는 클래스 로더이며 이를시스템 클래스 로더라고 한다.
Thread의 getContextClassLoader와 setContextClassLoader는 컨텍스트 로더를 얻거나 설정할 수 있게 해준다.
ClassLoader클래스
- 클래스 로더는 부모 클래스 로더에 클래스 로딩 의무를 위임할 수 있다. 부모클래스 로더는 ClassLoader를 생성자에 지정할 수 있다. 부모한테 이를 시키넴
protected ClassLoader()
-시스템 클래스 로더의 부모클래스로 클래스 로더를 생성한다.
protected ClassLoader(ClasLoader parent)
지정된 부모 클래스 로더로 클래스 로더를 생성한다.
기본 메커니즘을 사용하여 클래스를 로딩하는 애플리케이션을 작성하려면 ClassLoader를 사용해야 한다.
ClassLoader는 클래스 구현체의 바이트 코드를 얻어 이를 런타임 시스템에 로딩할 수 있다.
컴파일된 클래스 파일을 런타임 시스템으로 로딩하는 방법.
이 부분은 추상 클래스 ClassLoader를 확장하고 findClass 메소드를 오버라이드해야만 하는 클래스 로더의 영역이다.
PlayerLoader loader = new PlayerLoader();
Class<? extends Player> classOf = loader.loadClass(name).asSubclass(Player.class);
로더는 loadClass를 사용하여 클래스를 로딩하고 이 클래스를 나타내는 Class객체를 반환한다.
클래스로더는 주어진 Class객체에서 getClassLoader 메소드를 호출하여 얻을 수 있다.
시스템 클래스는 클래스 로더를 가질 필요가 없으므로 이 메소드를 호출한 결과는 null이다.
클래스로더는 애플리케이션 내의 클래스를 분류하는 네임스페이스를 정의하고 있다.
두개의 클래스가 서로 다른 클래스 로더를 가진다면 이들이 동일한 클래스 파일에 읽은 클래스의 바이너리 데이터를 가지고 있더라도 서로 다른 클래스이다.
그러므로 클래스마다 정적 변수를 ㅏ로 관리하므로 이 중 어떤 클래스의 정적 변수를 수정하더라도 이는 다른 클래스에 영향을 주지 않는다.
스레드마다 클래스를 로딩하기 위해 기본적으로 사용할 수 있는 classLoader를 가지고 있다. 이러한 컨텍스트 클래스 로더는 스레드 생성 시에 지정할 수 있다. 어떤 로더도 지정하지 않았다면 부모 스레드의 컨텍스트 클래스 로더를 사용한다.
첫번째 스레드의 컨텍스트 클래스 로더는 일반적으로 애플리케이션을 로딩하기 위해 사용하는 클래스 로더이며 이를시스템 클래스 로더라고 한다.
Thread의 getContextClassLoader와 setContextClassLoader는 컨텍스트 로더를 얻거나 설정할 수 있게 해준다.
ClassLoader클래스
- 클래스 로더는 부모 클래스 로더에 클래스 로딩 의무를 위임할 수 있다. 부모클래스 로더는 ClassLoader를 생성자에 지정할 수 있다. 부모한테 이를 시키넴
protected ClassLoader()
-시스템 클래스 로더의 부모클래스로 클래스 로더를 생성한다.
protected ClassLoader(ClasLoader parent)
지정된 부모 클래스 로더로 클래스 로더를 생성한다.
'JAVA이야기' 카테고리의 다른 글
클래스 로딩-3 (0) | 2011.07.28 |
---|---|
클래스 로딩-2 (0) | 2011.07.28 |
제네릭타입 extended (0) | 2011.07.27 |
Reflection (0) | 2011.07.27 |
퀴즈 (0) | 2011.07.27 |