package & import
1. package
패키지(package)는 서로 관련된 클래스나 인터페이스를 그룹 단위로 묶은 것을 의미합니다. 또한 우리가 사용하는 클래스의 전체 이름(full name)은 패키지명까지 포함된 이름입니다.
패키지는 다음과 같이 작성하여 사용합니다.
package 패키지명;
패키지의 특징을 정리하면 다음과 같습니다.
- 많은 소스파일을 효율적으로 관리하기 위해 사용.
- 모든 클래스는 반드시 하나의 패키지에 속해야 함.
- 하나의 소스 파일에서 첫 문장으로 하나의 패키지 선언만 허용.
- 물리적인 디렉터리이며 '.'을 구분자로 사용하는 계층구조.
※ 이름없는 패키지(unnamed package)
소스파일에 패키지를 지정하지 않을 경우 자바는 자동으로 이름없는 패키지에 해당 소스 파일을 포함시킵니다. 간단한 프로그램의 경우 패키지를 지정하지 않아도 크게 문제되지 않지만 큰 프로젝트나 Java API의 경우 사전에 패키지를 구성하여 사용하는 것이 좋습니다.
2. import
import문은 소스 파일에 사용한 클래스의 패키지 정보를 명시합니다. 하나의 소스 파일에 여러개의 import문을 사용할 수 있으며, package 선언 다음 순서로 작성해줍니다.
import는 다음과 같이 작성하여 사용합니다.
import 패키지명.클래스명;
import 패키지명.*;
사용하려는 패키지의 특정 클래스를 import할 수도 있고 해당 패키지의 하위 클래스 전체를 import 할 수도 있습니다. 모두 동일하게 동작하지만 실행시 성능상의 차이는 없습니다.
※ java.lang 패키지
소스 파일에서 System 클래스나 String 클래스의 경우 패키지명 없이 사용할 수 있었는데 그 이유는 모든 소스 파일에 java.lang 패키지가 묵시적으로 import 되어 있기 때문입니다.
java.lang 패키지는 중요한 클래스들이 속한 패키지이므로 별도의 import 없이 사용할 수 있도록 묵시적인 import가 설정되어 있습니다.
2.1 static import
static import를 사용하면 특정 클래스의 static 멤버를 간결하게 호출하여 사용할 수 있습니다.
static import는 다음과 같이 작성하여 사용합니다.
import static 패키지명.클래스명;
import static 패키지명.*;
다음 예제를 통해 static import에 대해 확인해보겠습니다.
import static java.lang.System.out; import static java.lang.Math.*; public class JavaApp { public static void main(String[] args) { // System.out.println( Math.random() ); out.println( random() ); // 이와 같이 클래스명을 생략한 멤버의 호출이 가능. } }
이상으로 자바의 package와 import에 대해서 알아봤습니다.
※ 참고 문헌
남궁성, 『Java의 정석 3rd Edition』, 도우출판(2016), p336 ~ p343. Chapter 07 객체지향 프로그래밍 II