패키지는 클래스들과 인터페이스들을 번들링 하는 단위
요소들을 찾거나 사용하기 쉽게하고, 이름의 충돌을 피하고, 접근을 제어하고, 연관된 타입을 번들하는 용도로 사용한다
클래스와 인터페이스를 한 패키지로 묶는 이유 : 접근성과 가독성을 높이고 네임 스페이스 충돌 x, 액세스 관리
패키지의 정의: 패키지는 연관된 타입을 그룹핑해서 접근 보호와 네임 스페이스 관리를 해줍니다. 여기서 타입은 클래스, 인터페이스, 열거 및 애노테이션 타입을 의미합니다. 열거형과 애노테이션 타입은 클래스와 인터페이스의 특별한 유형이므로 여기서는 타입을 클래스 및 인터페이스라고 하겠습니다.
소스 파일의 첫번쨰 라인에 패키지문을 선언해 패키지 새성 가능
하나의 public 타입만 가질 수 있고, public 타입이 아닌 것들은 같은 레벨에 놓지 않는걸 권장함
패키지명 = 네임 스페이스
네임 스페이스 : 개체를 구분할 수 있는 범위
동일 네임 스페이스에선 같은 이름을 가질 수 없다
패키지명은 소문자로 작성하고, 도메인의 역순으로 한다
ex) com.naver.mypackage
패키지를 구성하는 타입들을 통틀어 부르는 명칭
패키지는 폴더, 패키지 멤버를 .java 파일로 나타낼 수 있다.
ex) com.naver.mypackage.MyClass의 실제 패키지 구조
-> .../com/naver/mypackage/MyClass.java
각 클래스마다 컴파일 시 클래스 파일이 생성되고, 클래스 파일이 꼭 자바 파일과 같은 경로에 있을 필요는 없다. 때문에 소스코드를 공개하지 않고 컴파일된 코드만 제공할 수도 있다
다른 소스파일에 있는 멤버를 사용하기 위한 키워드
mypackage.MyClass object = new mypackage.MyClass();
import mypackage.MyClass;
MyClass object = new MyClass();
java.lang
패키지와 현재 패키지를 자동으로 import
한다 import mypackage.*;
MyClass object = new MyClass();
// static import 하지 않은 경우
double pi = Math.PI;
// static import
import static java.lang.Math.PI;
double pi = PI;
// 변수 표시
echo $CLASSPATH
// 변수 삭제
unset CLASSPATH
// 변수 설정
export CLASSPATH=~/java/classes
-classpath
라는 옵션을 줄 수 있다. 옵션 설정 시 환경변수를 대체해 옵션의 경로를 사용한다