클래스를 구분짓는 폴더 개념이다.
자바는 패키지의 가장 상위 디렉토리에서 실행해야한다는 약속이 있다.
그렇기 때문에 해당 패키지로 가서 컴파일하지 않는다.
소스에 가장 첫 줄에 있어야하고, 패키지 선언은 소스 파일에 하나만 있어야 한다.
패키지 이름과 위치한 폴더의 이름이 같아야한다.
패키지 이름을 java로 시작하면 안된다.
클래스의 이름은 패키지 이름도 포함한다.
패키지의 종류는 사용자 정의 패키지와 Built-in 패키지로 나눈다.
Built-in 패키지에는 자바 API를 가지는 다수의 클래스를 포함한다.
다른 패키지명에 있는 클래스를 찾을 때 사용한다.
다수의 클래스를 import 하는경우 import.패키지명.*
처럼 할 수 있다.
import static
은 static 변수와 static 메소드를 사용할 때 용이하다.
java.lang
패키지클래스를 찾기 위한 경로다.
JVM이 프로그램을 실행할 때 클래스파일을 찾는 데 클래스패스를 사용한다.
JVM은 CLASSPHTH의 경로를 확인하여 라이브러리 클래스들의 위치를 참조한다.
소스코드를 컴파일하면 바이트코드로 변환된다.
런타임에 .class 파일에 포함된 명령을 실행하려면 이 파일을 찾아야한다.
클래스패스는 .class 파일이 포함된 디렉토리와 파일을 콜론으로 구분한 목록이다.
.class 파일을 찾을 때 CLASSPHTH에 지정한 경로를 사용한다.
클래스패스를 지정하는 방법은 두 가지가 있다.
*CLASSPATH=.;C:\Program Files\Java\jdk-10.0.1\lib\tools.jar*
컴퓨터 시스템 변수 설정을 통해 지정할 수 있다.
JVM이 시작될 때 JVM의 클래스 로더는 이 환경 변수를 호출한다.
환경 변수에 설정돼 있는 디렉토리가 호출되면 그 디렉토리에 있는 클래스들을 먼저 JVM에 로드한다.
그러므로 CLASSPATH 환경 변수에는 필수 클래스들이 위치한 디렉토리를 등록한다.
*javac <options> <souce files>*
컴파일러가 컴파일 하기 위해서 필요로 하는 클래스 파일들을 찾기 위해서 컴파일 시 파일 경로를 지정해주는 옵션이다.
javac -classpath C:\Java\Engclasses C:\Java\Hello.java
위는 필요한 클래스 파일이 C:\Java\Enginclasses
에 있다.
javac -classpath .;C:\Java\Engclasses;C;\Java\Korclasses C:\Java\Hello.java
참조할 파일들이 다른 폴더에도 있다면 위처럼 ;(세미콜론)으로 구분한다.
접근지시자는 클래스, 메소드, 인스턴스 및 클래스 변수를 선언할 때 사용한다.
다음과 같이 표로 정리할 수 있다.
해당 클래스 내 | 같은 패키지 내 | 상속받은 클래스 | import 한 클래스 | |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
(package private) | O | O | X | X |
private | O | X | X | X |
패키지 구조는 계층형과 도메인형이 있다.
Entity, Controller, Service, Repository 로 패키지를 설계한다.
전체 구조를 빠르게 파악할 수 있지만, 패키지에 클래스들이 너무 많이 모이는 단점이 있다.
도메인 단위로 패키지를 구성한다.
도메인 구조는 관련 코드들이 응집해 있는 장점이 있다.
하지만 프로젝트 이해도가 낮을 경우 전체 구조를 파악하기 어려울 수 있다.