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
- 자바의 정석
'Java > Java' 카테고리의 다른 글
[Java/Study] 다형성 (0) | 2021.09.10 |
---|---|
[Java/Study] 제어자 (0) | 2021.09.09 |
[Java/Study] 오버라이드 (0) | 2021.09.07 |
[Java/Study] 상속 (0) | 2021.09.07 |
[Java/Study] 생성자 (0) | 2021.09.07 |