이전 시간에 클래스 패스를 배웠다. 클래스 패스란 컴퓨터의 저장장치 어딘가에 존재하는 클래스 파일을 사용하기 위한 방법이다. 이번 시간에 살펴볼 패키지(Package)는 하나의 클래스 안에서 같은 이름의 클래스들을 사용하기 위한 방법이라고 할 수 있다.
클래스가 많아짐에 따라서 같은 이름을 가진 클래스가 생겨날 가능성이 높아지게 되는데 이름의 충돌을 방지하기 위한 고안된 것이 패키지라고 할 수 있다.
정보 공학에서는 '이름의 충돌'이라는 문제를 해결하기 위해서 다양한 노력을 하고 있다. 전역변수와 지역변수, 객체도 그런 연장선에 있다고 볼 수 있다.
C:\workspace\javatutorials\src\com\yuri\javatutorials\object\CalculatorDemo4.java
\src : 프로젝트의 소스코드가 위치하는 경로, sts가 지정한 것
\com\yuri\javatutorials\object\ : 이 경로는 다음의 패키지 이름과 일치한다.
package com.yuri.javatutorials.object;
패키지는 기본적으로 디렉터리와 일치한다. 그렇기 때문에 아래의 패키지들은 물리적으로 같은 디렉터리에 존재할 수 없다.
예시
package com.yuri.javatutorials.packages.example1;
public class A {
}
package com.yuri.javatutorials.packages.example1;
public class B {
public static void main(String[] args) {
A a = new A();
}
}
package com.yuri.javatutorials.packages.example2;
import com.yuri.javatutorials.packages.example1.*;
public class C {
public static void main(String[] args) {
A a = new A();
}
}
서로 다른 패키지에 있는 클래스를 가져오려면 import를 통해서 다른 패키지의 클래스를 현재의 소스코드로 불러와야 한다. 만약 특정 패키지에 있는 모든 클래스를 로드하고 싶다면 위와 같이 하면 된다.
자 손으로 컴파일을 해보자. 개발도구 없이 코딩하는 경우는 거의 없다.
프로젝트 디렉터리의 구성
bin은 바이너리의 약자, src는 소스를 줄인 것
바이너리 안에 바이트 코드 형태로 저장되어있는 클래스가 위치하게 된다. src는 사람이 이해할 수 있는 코드, bin 안에 있는 것은 vm이 이해할 수 있는 것이다.
package com.yuri.javatutorials.packages.example3;
import com.yuri.javatutorials.packages.example1.*;
import com.yuri.javatutorials.packages.example2.*;
public class D {
public static void main(String[] args) {
B b = new B();
}
}
example1, example2 패키지 안에 모두 B 클래스가 있을 경우 아래와 같은 오류가 발생한다.
클래스 B의 이름이 중복되기 때문에 애매함(ambiguous)의 문제가 발생한다. 아래와 같은 방법으로 이 문제를 우회할 수 있다.
package com.yuri.javatutorials.packages.example3;
import com.yuri.javatutorials.packages.example1.*;
import com.yuri.javatutorials.packages.example2.*;
public class D {
public static void main(String[] args) {
com.yuri.javatutorials.packages.example2.B b = new com.yuri.javatutorials.packages.example2.B();
}
}
이 글은 생활코딩의 자바 강좌를 바탕으로 정리한 내용입니다.