클래스나 인터페이스를 논리적으로 분류해 모듈화하는 기능
다른 클래스와의 이름 충돌을 방지
관련 있는 클래스끼리 조직화하여 유지 보수성 향상
폴더 구조와 패키지 선언이 일치해야 함
자바 파일의 가장 첫 줄에 package 키워드로 선언합니다.
package com.example.utils;
public class MyClass {
// 클래스 구현
}
해당 클래스는 com/example/utils/ 디렉토리에 위치해야 함
패키지 이름은 소문자로 구성하는 것이 관례
보통 도메인 이름을 거꾸로 사용하여 고유한 패키지 이름 생성
다른 패키지에 있는 클래스를 사용할 때는 import 문을 사용하거나 전체 경로로 명시해야 합니다.
import com.example.utils.MyClass;
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass();
}
}
public class Main {
public static void main(String[] args) {
com.example.utils.MyClass obj = new com.example.utils.MyClass();
}
}
package 선언이 없는 클래스는 기본(default) 패키지에 속합니다.
하지만 기본 패키지는 다른 패키지에서 import할 수 없기 때문에 실제 개발에서는 사용을 피하는 것이 좋습니다.
project/
└── src/
└── com/
└── example/
└── utils/
└── MyClass.java
위 구조에서 MyClass.java 파일은 package com.example.utils; 로 선언되어 있어야 합니다.
자바 표준 라이브러리도 패키지 구조로 잘 정리되어 있습니다.
패키지 이름 |
설명 |
---|---|
java.lang |
자바의 기본 클래스 (자동 import) |
java.util |
유틸리티 클래스 (List, Map 등) |
java.io |
입출력 처리 |
java.net |
네트워크 관련 기능 |
java.sql |
데이터베이스 연동 |
default 접근제어자: 같은 패키지 내에서만 접근 가능
public 클래스: 모든 패키지에서 접근 가능
즉, 패키지는 접근 제어 범위를 결정하는 논리 경계 역할도 합니다
com.example.utils와 com.example.data는 서로 다른 패키지
패키지는 계층적으로 보이지만, 실제로는 독립적인 논리 단위
package com.example;
import com.example.utils.Helper; // 다른 패키지임
자바 클래스를 배포할 때 .jar 파일에 포함시키면 패키지 구조가 유지됩니다.
예: com/example/MyClass.class 파일이 com.example 패키지로 인식됨
자바의 패키지는 클래스를 조직화하고 관리하는 기본 단위로, 대규모 애플리케이션을 만들 때 매우 중요한 역할을 합니다. 패키지를 제대로 구성하고 사용하는 습관은 코드 유지보수성과 협업 효율을 높이는 데 큰 도움이 됩니다.