[Java/Study] Package 와 Import 및 터미널로 자바 실행방법
Package란?
package는 클래스의 묶음이다. 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있는 방법이다.
또한, package는 하나의 디렉토리로 생각하면 이해가 쉽다.
클래스들을 묶어놓은 폴더라고 생각해도 좋다.
이를 압축한것 들이 jar확장자로 저장이된다. jre의 lib파일에 가면 여러가지 .jar파일이 있다.
Package의 특징
- 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.
package com.ex01; //이런형식으로 보통 되어있음
But package가 두번선언되는 일은 일어날 수 없음
// 안되는 예
package com.ex01;
package com.ex02;
- 모든 클래스는 반드시 하나의 패키지에 속해야 한다
- 지금까지 package안에 적지 않은 경우도 많다 이를 위반하는것인가??
- 그것이 아니라 만약 package를 선언하지 않았으면 이름없는 패키지로 자동으로 속하게 된다 그래서 실행이 지금까지 됬던 것이다.
- 패키지는
.을 구분자로 하여 계층구조로 구성할 수 있다.- ex)
package com.ex01은com이라는 package안에ex01이라는 package가 하나더 있는 구조이다.
- ex)
- 패키지는 물리적으로 클래스 파일을 포함하는 하나의 디렉토리이다.
- 클래스의 정의는 클래스의 묶음 이기 때문에 클래스를 포함하는 디렉토리라고 라고 생각한다.
Package의 선언
package를 선언하는 방법은 클래스 또는 인터페이스의 맨 윗줄에 package 패기지명;을 적어주면된다.
중요한점은 맨 윗줄이다 물론 주석과 공백은 제외할 수 있다.
이것은 package 작성의 권장사항인데 package의 이름은 소문자로만 구성하는 것을 원칙으로 하고있다.
왜냐하면 클래스명과 쉽게 구분하기 위해서 다음과 같은사항으로 적고 있다.
Terminal로 실행하는 법
일단 .java파일을 하나 만든다.

나는 C:\javaStudy안에 PackageTest.java라는 파일을 만들었다.
이 그리고 package는 com.codechobo.book안에 설정을 하였다.
그 후에 Termal을 열어서 프로젝트의 Test.java파일이 있는 경로로 이동하고
javac -d . Test.java를 입력한다.

javac는 자바 컴파일러를 실행한다는 명령어이고
-d옵션은 소스파일에 지정된 경로를 통해 패키지의 위치를 찾아 클래스파일을 생성하는 옵션이다.
지정된 패키지가 없으면 패키지를 자동적으로 생성을 해준다.
-d는 해당 패키지의 루트 디렉토리 경로를 적어주는 것이다. 바로 PackageTest.java파일이 현재 디렉토리에 있으므로 .만 적어준다.

-d옵션을 통해서 패키지와 .class파일이 생성이 된것이 보일 것이다.
이제 패키지의 루트 디렉토리에 클래스패스를 포함시켜야 한다. 그래야 JVM이 실행시 PackageTest.class를 찾을 수 있기 때문이다.
그 후 -cp옵션을 이용해서 일시적으로 클래스패스를 지정할수있다,.

이렇게 하면 정상적으로 작동 되는 것을 볼 수 있다.
혹은 환경변수를 설정해주면 생략하고 바로 실행이 가능하다.
Import 문
소스코드를 사용할때 다른 패키지를 사용할 때 계속해서 패키지명을 붙여서 작성해야한다.
이런 번거로움을 줄여주기 위해서 import문을 사용하여 패키지의 정보를 불러올 수 있다.
import문 선언방법
import문 선언에는 두가지 방법이 있다.
- 모든 패키지에 클래스를 불러오기
- 모든 패키지에 특정 클래스 만 불러오기
// 모든 클래스 불러오기
import 패키지명.*;
// 특정 클래스 불러오기
import 패키지명.클래스명.
하지만 *를 사용한다고해서 모든 클래스를 불러오는 것은 아니다.
하위 클래스는 불러오지 못한다.
ex) import java.* 는 import java.lang.*를 불러오지 못함
Static import문
import를 쓰지 않는다면 클래스명에 패키지 이름까지 적어줘야했다
java.util.Date date = new java.util.Date();
이를 import문을 사용하면 다음과 같이 클래스명과 패키지이름을 제외시킬수 있다.
Date date = new Date();
여기서 static import를 진행하면 맴버를 호출할 때 클래스 이름도 생략할 수 있다.
예를들어보자
System.out.println("Hello World");
//static import 진행
import static java.lang.System.out;
out.println("Hello world);
이처럼 특정 클래스의 static맴버를 자주 사용할 때 사용하면 코드가 간결해질 수 있다.
Refrence
- 자바의 정석