아놔. 요즘 배그에 빠져서는 블로그는 나몰라라 하고 있다 ㅠㅠ

매번 쓸때마다 오랜만이긴 한데.

역시나 오랜만이니까 기초지식 다뤄보겠다.



이번에는 자바의 클래스 패스와 그것을 시스템 환경변수에 설정하는 목적에 대해 포스팅 해보겠다.


클래스 패스(Class Path)란?

자바 가상머신이 프로그램을 실행할 때, 클래스 파일을 찾는 데에 기준이 되는 파일 경로라고 할 수 있다.
즉, 자바 가상머신이 클래스 파일을 찾는 경로다.

물론, 이 클래스 패스는 개발자인 너, 나, 우리가 지정해준다.
지정해주지 않으면 자바 가상머신은 현재 디렉토리에서 필요한 클래스들을 가져와서 쓴다.

현재 디렉토리는 현재 명령 프롬프트가 가리키고 있는, 위치하고 있는 그 경로를 말한다.

>> java 파일명.class
이러한 명령어를 명령 프롬프트 창에다가 입력해서 실행시킬텐데, 이 상황에서의 디렉토리를 말한다.

다시 돌아와서.

A 클래스에서 B 클래스를 사용하고 있다고 하자. 
그리고 A, B 클래스가 같은 폴더에 있다고 하자.

이럴 땐 그냥 두 클래스가 있는 디렉토리로 가서

 >> java A.class

이렇게 해주면 아주 잘 돌아간다.

그치만 만약, B 클래스가 'bbb'라는 폴더 안에 있다면 약간의 문제가 발생한다.
위와 같이 실행하면, 중간에 오류를 뱉어낸다.
A 클래스에서 B 클래스를 사용하고 있는데, 해당 디렉토리에는 B 클래스가 없기 때문에 그러하다.

그래서 우리는 다른 디렉토리에 있는 B 클래스를 사용하기 위해, 
자바 가상머신이 클래스를 탐색하는 경로에 B클래스가 들어 있는 경로를 지정해주면 된다.




클래스 패스 지정하기

클래스 패스는 우리가 직접 지정해줄 수가 있다. 

>> set classpath=경로

이렇게 지정해주면 된다. 참 쉽다.

경로는 전체 경로가 싹 다 들어가는데, 예를 들면 'C:\workspace\bbb' 이런게 들어갈 수 있겠다.
C드라이브 밑에, workspace폴더 밑에, bbb라는 디렉토리를  클래스 패스로 지정하겠단 뜻이다.

근데 방금 말했듯이, 저렇게 명령어를 넣게 되면, 
저렇게 클래스 패스를 지정하게 되고, 그러면 자바 가상머신은 실행할 때, 저 경로만 탐색하게 된다.
즉, 클래스 패스를 추가하는게 아니라, 말 그대로 다시 설정해주는 명령어다.

A클래스가 있는 workspace 디렉토리와, B클래스가 있는 workspace/bbb 디렉토리를 둘 다 지정해주려면,  
경로 부분에 두 개의 경로를 모두 지정해주면 된다.
두 경로를 구분해주는 것은 세미콜론(;) 되시겠다.

>> set classpath=경로1;경로2
Ex)
>> set classpath=C:\workspace;C:\workspace\bbb

근데, 디렉토리 세계에서 마침표(.)는 현재 디렉토리를 의미한다.
그래서 내가 지금 명령 프롬프트 상에서 위치한 디렉토리를 클래스 패스로 지정하고싶다 하면

>> set classpath=.

일케 입력해주면 된다.


이렇게 입력해주는 클래스 패스는 언제 어디서나, 평생펑생 유효할까?

그렇지 않다.

이것을 지정해준 명령 프롬프트 창 내에서만 유효하다.
그래서 새로운 명령 프롬프트 창을 띄우면, 또 지정해줘야 한다.


이거 너무 불편하니까, 미리 클래스패스를 고정해놓곤 하는데
우리 윈도우 유저분들. 징그럽게 많이 해서 이제는 눈 감고도 하는 바로 그거.

환경변수 셋팅. 두둥-.

바로 여기에서 클래스 패스를 지정해놓으면, 알아서 자바 가상머신은 그 경로에서 클래스 파일을 탐색하게 된다.
새로운 명령 프롬프트를 띄우더라도.



클래스 패스 고정하기


나의 컴은 맥북이라 이걸 캡쳐할 수 없는 안타까움이 있지만. 대충 말로 떼워보자면
윈도우에서 '새 사용자 변수' 창을 띄워서 환경 변수를 등록하는게 있는데
여기서 변수 이름에 'classpath'를 넣고, 변수 값에 경로를 주면 된다.

자바 처음 배울 때
아무것도 모르는데 일단 JDK를 설치하고, 환경변수를 설정하라고 하는데...
하라는대로 하긴 하겠는데... 
이랬었던 기억이 난다. 새록새록.


경로 집어 넣을 때, 

C:\Program Files\java\jdk0.0.0\bin;

이렇게 집어 넣었었는데, 꼭 마지막에 세미콜론(;) 빼먹거나, 'bin' 빼먹고서는 안된다고 하는 애들 있었다.

'bin'은 자바 소스(.java 파일)가 컴파일 되어 새롭게 생성되는 .class 파일이 모여있는 곳이다.
실제로 자바 가상머신이 실행할 수 있는 형태의 파일은 .java 파일이 아니라, .class 파일이고,
그것들이 모여있는 위치가 'bin'폴더이기 때문에 꼭 여기까지 써주어야 한다는 사실을 기억하자.





-----


사실 패키지에 대한 것까지 오늘 쓸라그랬는데..
넘나 졸린 것 ㅠㅠ 
낼 출근 똥망. 


  1. ㅁㄴㅇㄹ 2018.12.18 09:53

    감사합니다 이해잘되는거같아요 잘봣습니다

  2. 초보개발자 2020.12.29 12:40

    감사합니다~ Programming/Java 관련 글을 다봤습니다! 매일 코딩은 하지만정확히 어떻게 구동되는지 기본적인 지식이 없었는데 간단하게 설명해주셔서 잘 보고갑니다!

+ Recent posts