Package란?

package는 클래스의 묶음이다. 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있는 방법이다.

또한, package는 하나의 디렉토리로 생각하면 이해가 쉽다.

클래스들을 묶어놓은 폴더라고 생각해도 좋다.

이를 압축한것 들이 jar확장자로 저장이된다. jrelib파일에 가면 여러가지 .jar파일이 있다.

Package의 특징

  • 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.
package com.ex01; //이런형식으로 보통 되어있음

But package가 두번선언되는 일은 일어날 수 없음

// 안되는 예
package com.ex01;
package com.ex02;
  • 모든 클래스는 반드시 하나의 패키지에 속해야 한다
    • 지금까지 package안에 적지 않은 경우도 많다 이를 위반하는것인가??
    • 그것이 아니라 만약 package를 선언하지 않았으면 이름없는 패키지로 자동으로 속하게 된다 그래서 실행이 지금까지 됬던 것이다.
  • 패키지는 .을 구분자로 하여 계층구조로 구성할 수 있다.
    • ex) package com.ex01com이라는 package안에 ex01이라는 package가 하나더 있는 구조이다.
  • 패키지는 물리적으로 클래스 파일을 포함하는 하나의 디렉토리이다.
    • 클래스의 정의는 클래스의 묶음 이기 때문에 클래스를 포함하는 디렉토리라고 라고 생각한다.

Package의 선언

package를 선언하는 방법은 클래스 또는 인터페이스의 맨 윗줄에 package 패기지명;을 적어주면된다.

중요한점은 맨 윗줄이다 물론 주석과 공백은 제외할 수 있다.

이것은 package 작성의 권장사항인데 package의 이름은 소문자로만 구성하는 것을 원칙으로 하고있다.

왜냐하면 클래스명과 쉽게 구분하기 위해서 다음과 같은사항으로 적고 있다.

Terminal로 실행하는 법

일단 .java파일을 하나 만든다.

image

나는 C:\javaStudy안에 PackageTest.java라는 파일을 만들었다.

이 그리고 packagecom.codechobo.book안에 설정을 하였다.

그 후에 Termal을 열어서 프로젝트의 Test.java파일이 있는 경로로 이동하고

javac -d . Test.java를 입력한다.

image

javac는 자바 컴파일러를 실행한다는 명령어이고

-d옵션은 소스파일에 지정된 경로를 통해 패키지의 위치를 찾아 클래스파일을 생성하는 옵션이다.

지정된 패키지가 없으면 패키지를 자동적으로 생성을 해준다.

-d는 해당 패키지의 루트 디렉토리 경로를 적어주는 것이다. 바로 PackageTest.java파일이 현재 디렉토리에 있으므로 .만 적어준다.

image

-d옵션을 통해서 패키지와 .class파일이 생성이 된것이 보일 것이다.

이제 패키지의 루트 디렉토리클래스패스를 포함시켜야 한다. 그래야 JVM이 실행시 PackageTest.class를 찾을 수 있기 때문이다.

그 후 -cp옵션을 이용해서 일시적으로 클래스패스를 지정할수있다,.

image

이렇게 하면 정상적으로 작동 되는 것을 볼 수 있다.

혹은 환경변수를 설정해주면 생략하고 바로 실행이 가능하다.

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

+ Recent posts