Java 하위 패키지란 무엇인가?
Java에서 하위 패키지(subpackage)는 파일 시스템의 하위 디렉터리와 매우 유사한 개념입니다. 즉, 하나의 패키지 안에 또 다른 패키지를 계층적으로 포함시켜 클래스들을 체계적으로 관리할 수 있게 해줍니다.
하위 패키지의 디렉터리 구조
예를 들어, 회사에 com.apple.computers라는 패키지가 있고 그 안에 Dell.java 소스 파일이 포함되어 있다고 가정해 보겠습니다. 이 경우 해당 파일은 다음과 같은 일련의 하위 디렉터리에 저장됩니다.
....\com\apple\computers\Dell.java
컴파일 시 .class 파일 생성 규칙
소스 파일을 컴파일하면 컴파일러는 파일 안에 정의된 각 클래스, 인터페이스, 열거형(enum)마다 별도의 출력 파일을 생성합니다. 출력 파일의 기본 이름은 해당 타입의 이름이 되며, 확장자는 .class입니다.
예제 코드
다음 예제를 살펴보겠습니다.
// 파일 이름: Dell.java
package com.apple.computers;
public class Dell {
}
class Ups {
}이 파일에는 두 개의 클래스(Dell과 Ups)가 정의되어 있습니다. 이제 -d 옵션을 사용하여 다음과 같이 컴파일합니다.
$javac -d Dell.java
-d 옵션은 컴파일된 클래스 파일이 저장될 목적지 디렉터리(destination)를 지정하는 옵션으로, 패키지 구조에 맞게 폴더가 자동으로 생성됩니다. 컴파일 결과는 다음과 같습니다.
.\com\apple\computers\Dell.class .\com\apple\computers\Ups.class
하위 패키지의 클래스 가져오기(import)
컴파일된 클래스들은 패키지 경로를 통해 다른 프로그램에서 사용할 수 있습니다. com.apple.computers 패키지에 정의된 모든 클래스나 인터페이스를 가져오려면 와일드카드(*)를 사용하여 다음과 같이 작성합니다.
import com.apple.computers.*;
이렇게 하면 해당 패키지 내의 모든 public 클래스와 인터페이스를 코드에서 자유롭게 활용할 수 있습니다. 필요한 클래스만 개별적으로 가져오고 싶다면 import com.apple.computers.Dell;처럼 특정 클래스 이름을 명시하는 것도 가능합니다.