classpath, package

muz·2021년 4월 15일
0

Java

목록 보기
11/21
post-thumbnail

⛳ Classpath

클래스

빈 디렉터리에서 에디터(메모장)을 켜고 class b{} class a{} 를 작성한 후, a.java로 파일을 저장해주자. 이후 cmd를 켜서 javac a.java로 컴파일 해보자.

컴파일을 하고 나니 두 개의 클래스 파일이 생성된 것을 볼 수 있다.

클래스 하나는 하나의 클래스 파일이 된다.

클래스 경로

이번에는 a2.java 파일을 만들고, 내용은 다음과 같이 작성해준 후 컴파일해보자.

class b2{
	public void print() {
		System.out.println("Hello??");
	}
}

class a2{
	public static void main(String[] args) {
		b2 con = new b2();
		con.print();
}


또 이렇게 클래스 파일들이 생성되었다. 현재 java 디렉터리에 lib라는 폴더를 새로 생성하고, 이 폴더에 b2.class 파일을 이동시켜보자. 그리고는 cmd창에서 java a2를 하면 Hello??가 출력되는가? 아니다. 아마 오류가 뜰 것이다.

발생하는 오류는 b2.class가 현재 디렉토리에 존재하지 않는다는 오류일 것이다. 이러한 문제는 java -classpath ".;lib" a2를 하면 된다.

-classpath : 자바를 실행할 때 사용할 클래스들의 위치를 가상머신에게 알려주는 역할을 함
".;lib"에서 .은 현재 디렉터리에서 클래스를 찾는다는 것
".;lib"에서 ;은 경로와 경로를 구분해주는 구분자를 말함
".;lib"에서 lib는 현재 디렉터리에 없다면 현재 디렉터리의 하위 디렉터리 중 lib에서 클래스를 찾겠다는 것

클래스 패스는 자바를 실행할 때 클래스의 위치를 지정하는 역할을 한다. 클래스 패스는 자바 어플리케이션이 사용하고 있는 클래스가 여러 경로에 분산되어 있을 때 유용하게 쓸 수 있다.

📦 Package

classpath는 컴퓨터의 저장장치 어딘가에 존재하는 클래스 파일을 사용하기 위한 방법이다. package는 하나의 클래스 안에서 같은 이름의 클래스들을 사용하기 위한 방법이다.
클래스가 많아짐에 따라서 같은 이름을 가진 클래스가 생겨날 가능성이 높아지게 되며, 이러한 이름의 충돌을 방지하기 위해 고안된 것이 패키지이다.

패키지는 보통 디렉터리와 일치한다. 같은 패키지에 있는 클래스는 함께 쓸 수 있지만, 다른 패키지(디렉터리)에 있는 클래스를 쓰려면 import를 통해서 현재의 소스코드로 불러와야 한다.

만약 특정 패키지에 있는 모든 클래스를 로드하고 싶다면, .*을 붙여주면 된다.

보통 프로젝트의 디렉터리는 관리의 편의성을 위해 src에 소스코드를 만들고, 그것을 컴파일 한 결과를 bin 하위에 위치하도록 한다. 직접 작업해보자.
java 폴더에 binsrc폴더를 만든 후, 소스코드들을 src로 옮겨보자. java 폴더에서 cmd를 실행하고 다음과 같이 입력해보자.

이렇게 입력한 후 컴파일을 하면, src 폴더에 있던 a.javaa2.java가 한번에 컴파일되어 같은 폴더 내에 .class파일들이 생성될 것이다.

.class파일을 bin폴더에 생성되게끔 하고싶다면 다음과 같이 컴파일을 하면 된다.

-d bin은 컴파일된 결과를 bin 디렉토리 하위에 위치시킨다는 의미로, 자바 컴파일러가 자동으로 클래스의 패키지에 해당하는 디렉토리를 생성해준다.

만약 서로 다른 패키지를 import 했는데, 각 패키지에 이름이 같은 클래스가 있다면 new 키워드로 생성자 생성 시 해당 패키지명을 이용하면 해결할 수 있다.

public static void main(String[] args) {
        javatutorials.packages.example2.B b = new javatutorials.packages.example2.B();
    }

Reference
1. 생활코딩_클래스패스
2. 생활코딩_패키지

profile
Life is what i make up it 💨

0개의 댓글