패키지와 클래스 패스

패키지와 클래스 패스

Class Path란 무엇인가?

JAVA에서 CLASS PATH란 자바 가상머신이 클래스 파일을 찾는 경로를 의미한다. 그리고 이 클래스 패스를 지정하는 것은 프로그래머의 몫이다.

먼저 설명없이 간단한 예시를 들어보이겠다.

class B{ public void showName() { System.out.println("my name is B"); } } class C{ public void showName() { System.out.println("my name is C"); } } public class A { public static void main(String[] args) { B b = new B(); b.showName(); C c = new C(); c.showName(); } }

위 내용의 .java file을 compile 하면 해당 경로에 3개의 class파일이 생성된다.

이제 컴파일이 완료되었으니 java 명령어로 실행하면 제대로 실행되는것을 볼 수 있다.

그렇다면 아래와 같이 파일의 경로를 바꾸면 제대로 실행이 될까?

결과는 아래와 같이 가상머신이 main()을 훑고 내려갈 때, 인스턴스를 생성하기 위해 B.class를 찾게 되는데 현재 경로에는 B.class 가 존재하지 않아 에러가 발생하게 된다.

B b = new B();

그렇다면 지금 이 상황에서 정상적인 실행 결과를 확인하려면 어떻게 해야할까? 정답은 클래스 패스를 설정하여 자바 가상머신의 클래스 탐색 경로를 추가해주면 된다. 결과는 아래와 같이 정상적으로 실행된다.

.은 현재 경로를 의미하며, ;(세미콜론)은 둘 이상의 경로를 지정할 때 사용할 수 있다.

앞서 지정한 클래스 패스를 살펴보면 패스 설정에 두 가지 방식을 사용한다.

절대 경로 지정 방식 : .을 활용해서 현재 경로 기준으로 설정

상대 경로 지정 방식 : root를 기준으로 설정

그렇다면 위 CMD 창을 종료한 이후에도 경로지정 값이 유지될까? 정답은 아니다.

값을 유지하고 싶다면 환경 변수path를 이용해서 고정해주면 되는데 이는 특별한 일이 아니라면 사용하지 않는게 좋으며 JDK(자바 개발 도구)를 이용하기 위해 설정하기도 한다.

패키지란 무엇일까?

패키지란 간단히 말해 클래스를 묶는 수단이라고 말할 수 있다. 클래스를 그 속성에 따라 구분하기 하고, 수많은 클래스들의 이름이 충돌하지 않게 도와주는 역할을 하기도 한다.

from http://sweet-smell.tistory.com/115 by ccl(A) rewrite - 2021-11-26 13:01:44