
비슷한 성격의 자바 클래스들을 모아 놓는 자바의 디렉토리이다.
패키지를 구성하기 위해서는 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.javasrc/main/java/sportcar/Xcient.javabuild/classes/java/sportcar/Ferrari.classbuild/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