경주장

7주차 과제: 패키지 #7 package,import 키워드 (~02.30) 본문

JAVA/whiteship_live-study

7주차 과제: 패키지 #7 package,import 키워드 (~02.30)

달리는치타 2022. 2. 24. 15:56

✔️ 학습할 것 (필수)

+ 패키지란?

  • package 키워드
  • import 키워드
  • 클래스패스
  • CLASSPATH 환경변수
  • -classpath 옵션
  • 접근지시자

package 키워드는 클래스와 인터패이스의 첫 줄에 패키지를 선언하기 위해 사용됩니다.

package 상위패키지.하위패키지;

public class ClassName { ... }

public 접근 제어자를 가진 패키지의 멤버(클래스, 인터페이스)를 패키지의 외부에서 사용하기 위해서는 아래의 3가지중 한가지를 해야합니다.

  • Member를 FQN - Fully Qulified Name 으로 참조하기
  • package의 Member를 import하기
  • package 전체를 import하기

Referring to a Package Member by Its Qualified Name

Import 문을 활용하면 Class혹은 Interface의 이름만으로 참조할 수 있기 때문에 잘 활용되지 않습니다. 

하지만 패키지 멤버의 이름이 겹치는 경우에는 활용이 필요합니다.

 

Importing a Package Member

가장 널리 활용되는 방식입니다. graphics 패키지의 Rectangle 클래스를 아래와 같이 import하여 클래스 이름으로 바로 사용할 수 있습니다.

 

import graphics.Rectangle;

Rectangle myRectangle = new Rectangle();

Importing an Entire Package

package member를 import하는 방식에서 PackageMember의 이름을 쓰는 칸에 asterisk (*) wildcard를 쓰게 되면 해당 패키지의 모든 멤버를 import 할 수 있습니다.

 

asterisk (*) wildcard를 사용하는 방식에서 주의할 점은 이 방식은 정확히 해당 패키지의 모든 멤버를 import한다는 점입니다. 즉 하위에 패키지가 있다고 해서 import를 하지 않습니다.

 


특별한 import로써 public Nested Class의 import와 static import가 있습니다.

Nested Class가 public으로 선언된 경우 위의 2번째 3번째 import와 같은 구분으로 임포트 할 수 있습니다.

import graphics.Rectangle;
import graphics.Rectangle.Square;
import graphics.Rectangle.*;

 

Static Import를 활용하면 class의 static 필드, 메소드를 접근할때 클래스 명을 작성하지 않아도 됩니다.

예를 들어 java.lang.Math의 PI 상수를 활용하는 두가지 방식은 아래와 같습니다.

 

import java.lang.Math;
...
double myPi = Math.PI;
import static java.lang.Math.PI;
...
double myPi = PI;

static import는 잘 사용한다면 반복을 줄이고 코드 가독성을 높이지만 남용하게 되면 코드의 가독성과 유지보수성을 망칩니다.