패키지(package)
패키지란, 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다.
클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉터리이다.
디렉터리가 하위 디렉터리를 가질 수 있는 것처럼, 패키지도 다른 패키지를 포함할 수 있으며 점'.'으로 구분한다.
예를 들면 java.lang패키지에서 lang패키지는 java패키지의 하위 패키지이다.
- 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.
- 모든 클래스는 반드시 하나의 패키지에 속해야 한다.
- 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.
- 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다.
패키지의 선언
패키지를 선언하는 것은 아주 간단하다. 클래스나 인터페이스의 소스파일의 맨 위에 패키지라고 적어주면 된다.
package 패키지명;
위와 같은 패키지 선언문은 반드시 소스파일에서 주석과 공백을 제외한 첫 번째 문장이어야 하며, 하나의 소스파일에서 단 한 번만 선언될 수 있다. 해당 소스파일에 포함된 모든 클래스나 인터페이스는 선언된 패키지에 속하게 된다.
패키 지명은 대소문자를 모두 허용하지만, 클래스명과 쉽게 구분하기 위해서 소문자로 하는 것을 원칙으로 하고 있다.
큰 프로젝트나 Java API와 같은 클래스 라이브러리를 작성하는 경우에는 미리 패키지를 구성하여 적용해야 한다.
import문
소스코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키 지명이 포함된 클래스 이름을 사용해야 한다.
하지만, 매번 패키 지명을 붙여서 작성하는 것이 불편하므로 클래스의 코드를 사용하기 전에 import문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면 소스코드에 사용되는 클래스 이름에서 패키 지명은 생략할 수 있다.
import문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 공개하는 것이다.
컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아낸 다음, 모든 클래스 이름 앞에 패키 지명을 붙여준다.
이클립스는 ctrl+shift+o를 누르면 자동으로 import문을 추가해준다.
import문의 선언
모든 소스파일(. java)에서 import문은 package문 다음에, 클래스 선언문 이전에 위치해야 한다. import문은 package문과 달리 한 소스파일에 여러 번 선언할 수 있다.
일반적인 소스파일(*. java)의 구성은 다음의 순서로 되어 있다.
1. package문
2. import문
3. 클래스 선언
import문을 선언하는 방법은 다음과 같다.
import 패키지명.클래스명;
또는
import 패키지명.*
키워드 import와 패키 지명을 생략하고자 하는 클래스의 이름을 패키 지명과 함께 써주면 된다.
'패키 지명.*'은 같은 패키지에서 여러 개의 클래스가 사용될 때 유용하다.
실행 시 성능상의 차이는 전혀 없다.
단, 이 경우에는 하위 패키지는 포함하지 않는다.
import java.util.*;
import java.text.*;
즉 위의 두 패키지를 합친다고 아래와 같이 표현하면 안 된다.
import java.*; (이렇게 표현 X)
static import문
static import문을 사용하면 static멤버를 호출할 때 클래스 이름을 생략할 수 있다. 특정 클래스의 static멤버를 자주 사용할 때 편리하다.
import static java.lang.Integer.*;
import static java.lang.Math.random;
import static java.lang.System.out;
System.out.println(Math.random()); > out.println(random());으로 사용이 가능하다.
import static java.lang.System.out;
import static java.lang.Math.*;
public class StaticImportEx1 {
public static void main(String[] args) {
// System.out.println(Math.random());
out.println(random());
// System.out.println("Math.PI :"+Math.PI);
out.println("Math.PI :" + PI);
}
}
0.9214332841721639
Math.PI :3.141592653589793