Java에서 패키지(package)를 생성하려면 먼저 패키지 이름을 정해야 합니다. 그런 다음 해당 패키지에 포함시킬 클래스, 인터페이스, 열거형(enum), 애노테이션 타입이 담긴 모든 소스 파일의 최상단에 package 문을 패키지 이름과 함께 작성해야 합니다.
package 문 작성 규칙
package 문은 반드시 소스 파일의 첫 번째 줄에 위치해야 합니다. 하나의 소스 파일에는 package 문을 단 하나만 선언할 수 있으며, 이 선언은 파일 내의 모든 타입(클래스, 인터페이스 등)에 공통적으로 적용됩니다.
만약 package 문을 사용하지 않으면, 해당 클래스와 인터페이스, 열거형, 애노테이션 타입은 현재의 기본(default) 패키지에 속하게 됩니다.
패키지가 포함된 Java 프로그램 컴파일하기
패키지 문이 포함된 Java 프로그램을 컴파일할 때는 아래와 같이 -d 옵션을 사용해야 합니다.
javac -d Destination_folder file_name.java
컴파일이 완료되면 지정한 대상 폴더 안에 패키지 이름과 동일한 폴더가 자동으로 생성되고, 컴파일된 클래스 파일(.class)들이 해당 폴더에 저장됩니다.
예제
이번에는 animals라는 이름의 패키지를 생성하는 예제를 살펴보겠습니다. 참고로 패키지 이름은 소문자로 작성하는 것이 좋은 습관입니다. 이는 클래스나 인터페이스 이름과의 충돌을 피하는 데 도움이 됩니다.
다음 예제는 animals 패키지에 포함되는 Animal 인터페이스입니다.
/* File name : Animal.java */
package animals;
interface Animal {
public void eat();
public void travel();
}이제 위에서 정의한 인터페이스를 같은 animals 패키지 안에서 구현해 보겠습니다.
/* File name : MammalInt.java */
package animals;
public class MammalInt implements Animal {
public void eat() {
System.out.println("Mammal eats");
}
public void travel() {
System.out.println("Mammal travels");
}
public int noOfLegs() {
return 0;
}
public static void main(String args[]) {
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}아래 명령어처럼 두 개의 Java 파일을 컴파일합니다.
$ javac -d . Animal.java $ javac -d . MammalInt.java
컴파일이 성공적으로 끝나면 현재 디렉터리에 animals라는 이름의 패키지(폴더)가 생성되고, 그 안에 컴파일된 클래스 파일들이 다음과 같이 배치됩니다.
- animals/Animal.class
- animals/MammalInt.class
이제 패키지 내부의 클래스 파일을 실행하면 아래와 같은 결과를 확인할 수 있습니다.
Mammal eats Mammal travels
정리
Java 패키지는 관련된 클래스와 인터페이스를 논리적으로 묶어 관리할 수 있게 해주는 강력한 기능입니다. 소스 파일 첫 줄에 package 문을 선언하고, -d 옵션으로 컴파일하면 패키지 구조가 자동으로 만들어집니다. 이를 통해 코드의 재사용성과 유지보수성을 크게 높일 수 있습니다.