2013년 8월 8일 목요일

java classpath 클래스패스(ClassPath)란?

-------------
클래스패스
------------- 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



클래스 패스란 말 그대로 클래스를 찾기 의한 경로를 나타내는 말입니다.
여러 디렉토리에 산재한 클래스들의 위치를 지정해서 패키지(Package)에 따라 클래스를 찾게 해 줄 수 있는 경로를 의미 하는 것입니다.

윈도우즈 200인 경우 PC의 바탕 화면에 있는 시스템에서 등록정보, XP인 경우 제어판--> 성능 및 유지 관리 --> 시스템의 등록정보에서 고급 탭의 환경변수에서 환경변수로 지정을 하지 않는다면, 기본적으로 해당 디렉토리(현재 폴더)부터 검색을 하겠지만 작업을 효율적으로 하기 위해서는 클래스패스를 잡아주는 것이 좋습니다. 물론  자바 파일을 컴파일을 할 때마다 –classpath 옵션을 적어주어도 되겠지만 특정한 경로에 필요한 클래스가 모여 있다면 클래스패스를 주는 것이 훨씬 더 효율적 입니다.

클래스패스를 환경변수에서 잡아주게 되면, 그 디렉토리를 기준으로 클래스 파일을 검사하게 되는 것입니다. 예를 들어 C:\class 라고 클래스패스를 잡아주었고 그런다음 C:\java\A.class 라는 파일이 존재하고, C:\java\B.java이 있다고 할때 B.java에서 A라는 클래스를 상속했거나, 객체를 생성하는 코드가 있다(즉 B에서 A를 참조 할때)면 다음과 같이 컴파일할 것 입니다.
C:\java>javac B.java
하지만 이러한 경우에는 에러가 발생 합니다. (클래스패스를 환경 변수에서 잡으면 현재 폴더에서는 클래스를 찾지 않습니다. 물론 환경변수를 지정하지 않은 상태라면 현재 폴더에서 클래스를 찾습니다.) 이유는 C:\classes 아래에서 A.class 을 찾지만 그 곳에는 A.class라는 파일이 없기 때문 입니다.

하지만 클래스패스 환경 변수를 설정 할때 C:\classes;. 로 클래스패스를 잡아주게 되면 ; 앞의 디렉토리를 먼저 검색하고 찾는 파일이 없을경우 .(현재 디렉토리)부터 파일을 검색하게 되는 것이므로 이렇게 클래스패스를 정하게 되면 에러가 없어지게 되는 것 입니다.

클래스패스로 지정한 기준에서 하위 디렉토리가 많아질 경우 파일용량이 커지게 되므로 .jar로 압축하여 놓는 경우도 많이 있습니다.

-----------------------------------------------
Java Launcher의 클래스 찾기(클래스 검색 방식)
-----------------------------------------------
우선 부트스트랩 클래스에서 기본 자바 플랫폼에 있는 API 클래스들을 찾아 메모리에 로딩하며 여기에서 찾지 못할 경우 확장 클래스에서 찾으며 거기에서도 찾지 못한다면 사용자가 정의한 클래스패스에서 클래스를 찾아 메모리에 로딩 합니다.

Bootstrap classes(부트스트랩 클래스) 찾기
- 자바 플랫폼을 구성하는 클래스들이며 rt.jar와 i18n.jar에 포함되어 있는 클래스 입니다.
- jar 압축 파일들은 bootstrap class path에 의해 sun.boot.class.path 시스템 프로퍼티에 저장 됩니다.

extension classes(확장 클래스) 찾기
- 자바 플랫폼을 확장한 클래스들 입니다.
- jre/lib/ext 확장 디렉토리에서 모든 jar 파일들을 자바2 확장 클래스로 가정합니다.

user classes(사용자 클래스) 찾기
- -cp 또는 –classpath 명령행 옵션은 기본 환경 설정과 클래스 패스 환경변수 설정을 재정의 합니다. 즉 명령행에서의 클래스패스를 우선적으로 처리 합니다.
- jar 압축 파일은 다른 환경 설정을 압축 파일 내에 포함 하고 있습니다.

댓글 없음:

댓글 쓰기