자바에서 패키지(package)는 관련된 클래스와 인터페이스를 하나의 그룹으로 묶어 관리하는 기능입니다. 이번 글에서는 'animals'라는 이름의 패키지를 직접 만들고, 컴파일한 후 실행까지 완료하는 전 과정을 예제와 함께 단계별로 살펴보겠습니다.
패키지 네이밍 규칙
패키지 이름은 소문자로 작성하는 것이 좋습니다. 클래스나 인터페이스의 이름과 충돌할 가능성을 줄이고, 자바 표준 컨벤션(관례)에도 부합하기 때문입니다. 예를 들어 animals, com.example.util처럼 모두 소문자를 사용합니다.
1단계: 인터페이스가 포함된 패키지 생성
먼저 animals 패키지 안에 Animal이라는 인터페이스를 정의해 보겠습니다.
/* 파일명 : Animal.java */
package animals;
interface Animal {
public void eat();
public void travel();
}package animals; 구문을 파일 최상단에 선언하면 해당 파일의 코드는 모두 animals 패키지에 속하게 됩니다.
2단계: 같은 패키지에서 인터페이스 구현하기
이제 동일한 animals 패키지 내에서 위 인터페이스를 구현하는 클래스를 작성합니다.
package animals;
/* 파일명 : MammalInt.java */
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();
}
}MammalInt 클래스는 implements Animal을 통해 인터페이스의 추상 메서드인 eat()과 travel()을 모두 구현하고 있습니다. 또한 main 메서드에서 객체를 생성해 두 메서드를 호출합니다.
3단계: 자바 파일 컴파일하기
아래 명령어를 사용해 두 개의 자바 파일을 컴파일합니다. 옵션 -d .는 현재 디렉터리 기준으로 패키지 구조에 맞는 폴더를 자동 생성하고 클래스 파일을 그곳에 저장하라는 의미입니다.
$ javac -d . Animal.java $ javac -d . MammalInt.java
컴파일이 완료되면 현재 디렉터리 아래에 animals라는 이름의 패키지(폴더)가 생성되고, 그 안에 컴파일된 클래스 파일들이 다음과 같이 배치됩니다.
animals/Animal.classanimals/MammalInt.class
4단계: 패키지 내 클래스 실행하기
패키지 안의 클래스 파일을 실행할 때는 반드시 완전 수식 이름(fully qualified name), 즉 '패키지명.클래스명' 형태로 지정해야 합니다.
$ java animals.MammalInt
실행 결과는 다음과 같습니다.
Mammal eats Mammal travels
정리
자바 패키지 프로그램의 실행 과정을 요약하면 다음과 같습니다.
package선언문을 포함한 소스 파일 작성javac -d .명령으로 컴파일하여 패키지 폴더 구조 생성java 패키지명.클래스명형식으로 실행
패키지를 활용하면 클래스 이름 충돌을 방지하고 코드를 체계적으로 관리할 수 있습니다. 실무에서는 도메인 이름을 역순으로 나열한 방식(예: com.company.project)으로 패키지를 구성하는 것이 일반적이니 함께 참고하시기 바랍니다.