비슷한 성격의 자바 클래스들을 모아 놓는 자바의 디렉토리이다.
패키지를 구성하기 위해서는 package
키워드를 사용한다.
만약 Ferrari
클래스와 Xcient
클래스를 각각 sportcar
패키지와 truck
패키지에 넣고 싶다면 아래와 같이 코딩해야 한다.
package sportcar;
public class Ferrari {}
package truck;
public class Xcient {}
위와 같이 package
로 묶으면 총 2개의 폴더와 4개의 파일이 생성된다. (intelliJ Gradle project 기준)
src/main/java/sportcar/Ferrari.java
src/main/java/sportcar/Xcient.java
build/classes/java/sportcar/Ferrari.class
build/classes/java/sportcar/Xcient.class
src/main/java
즉, 프로젝트의 루트 디렉토리에서는package
키워드가 필요 없다.
패키지안에 있는 패키지를 서브 패키지라고 한다. 패키지들을 .
으로 구분한다.
.
을 기준으로 오른쪽에 있는 녀석이 왼쪽에 있는 녀석의 서브패키지이다.
sportcar
와 truck
을 car
패키지에 넣어보자
package car.sportcar;
...
...
pakcage car.truck;
java
로 시작할 수 없다.서로 다른 패키지에 있는 클래스를 사용하고자 할 때 import
를 사용한다.
Ferrari
에서 Xcient
를 사용한다고 할 때 아래와 같다.
import car.Truck.Xcient;
패키지명
.클래스명
의 규칙을 가진다.
만약 특정 패키지 안에 있는 모든 클래스를 사용하고 싶다면 패키지명
.*
을 통해서 사용할 수 있다.
static
메소드, 변수를 사용할 때 편리하게 사용할 수 있다.
즉, 클래스 인스턴스 생성없이 메소드를 사용할 수 있게 된다.
작성해놓은 클래스를 찾기위한 경로이다.
우리가 작성한 클래스는 물론이고 Built-in class
혹은 외부 라이브러리들을 사용할 때도 JVM
이 클래스 패스를 참고하여 클래스 파일들을 찾는다.
JVM
이 시작될 때 JVM
의 클래스 로더는 시스템 환경 변수를 호출한다.
윈도우를 기준으로
시스템 환경 변수 편집 -> 환경 변수 -> 새로 만들기 -> 변수이름: CLASSPATH 변수 값: %JAVA_HOME%\lib
를 입력하면 환경 변수 설정이 완료된다.
javac
를 활용해서 컴파일할 때 classpath
를 지정할 수 있다.
javac -classpath
를 사용하거나 javac -cp
를 사용한다.
각 경로를 ;
로 구분할 수 있다.
예시:
`javac -cp .;C:\foo\hello;c:\world\foo'
클래스, 메소드, 변수를 외부에서 접근할 수 있는 범위를 지정한다.
public
: 모두 접근 가능하다.protected
: 같은 패키지에 있거나 자식 클래스인 경우에만 접근 가능하다.package-private
: 기본값이며 같은 패키지 내에서만 접근 가능하다.private
: 클래스 코드 안에서만 접근 가능하다.package-private
의 범위를 가진다.범위가 큰 순서는 아래와 같다.
public
> protected
> package-private
> private