[java] 12. 패키지
패키지
패키지란, 클래스의 묶음입니다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며,
서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있습니다.
같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로,
자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와
이름이 충돌하는 것을 피할 수 있습니다.
예를 들어 java.lang.String 클래스는 패키지 java의 하위 패키지인 lang에 속한 String.class 파일입니다.
1.하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.
2.모든 클래스는 반드시 하나의 패키지에 속해야 한다.
3.패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있습니다.
4.패키지는 물리적으로 클래스 파일(.class)를 포함하는 하나의 디렉토리입니다.
패키지 선언
패키지를 선언하는 것은 아주 간단합니다. 클래스나 인터페이스의 소스파일(.java)에 다음과 같이 한 줄만 적어주면 됩니다.
package 패키지명;
위와 같은 패키지 선언문은 반드시 소스파일에서 주석과 공백을 제외한 첫 번째 문장이어야 하며,
하나의 소스파일에 단 한번만 선언될 수 있습니다.
해당 소스파일에 포함된 모든 클래스나 인터페이스는 선언된 패키지에 속하게됩니다.
모든 패키지는 반드시 하나의 패키지에 포함되어야하는데,
패키지를 선언하지 않고도 아무런 문제가 없습니다.
이는 자바에서 기본적으로 제공하는 이름없는 패키지 때문입니다.
소스파일에 자신이 속할 패키지를 지정하지 않은 클래스는 자동적으로 이름없는 패키지에 속하게 됩니다.
import문
소스코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름을 사용해야 합니다.
예를 들어 util 패키지에 있는 Scanner 클래스를 사용하려면,
매번 코드에 java.util.Scanner 와 같이 java.util을 적어주어야 합니다.
매번 패키지명을 붙여서 작성하기란 여간 불편한 일이 아닙니다.
클래스의 코드를 작성하기 전에 import문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면
소스코드에 사용되는 클래스이름에서 패키지명은 생략할 수 있습니다.
import문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것입니다.
컴파일 시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아 낸 다음,
모든 클래스 이름 앞에 패키지 명을 붙여줍니다.
import문의 선언
모든 소스파일(.java)에서 import문은 package문 다음에,
그리고 클래스 선언문 이전에 위치해야 합니다.
import문은 package문과 달리 한 소스파일에 여러 번 선언할 수 있습니다.
일반적으로 소스파일(.java)의 구성은 다음의 순서로 되어있습니다.
1. package 문
2. import 문
3. 클래스 선언
import문을 선언하는 방법은 다음과 같습니다.
import 패키지명.클래스명;
또는
import 패키지명.*;
예를 들면 지금까지 Scanner 클래스를 선언할 때,
import java.util.Scanner;
또는
import java.util.*;
을 문장 위에 추가했습니다.
.*은 패키지에 있는 모든 클래스를 import 하겠다는 뜻입니다.
static import 문
import문을 사용하면 클래스의 패키지명을 생략할 수 있는 것과 같이 static import문을 사용하면
static 멤버를 호출할 때 클래스 이름을 생략할 수 있습니다.
예를 들어
import static java.lang.System.out;
라고 선언하면
System.out.println(“hello”); 를
out.println(“hello”); 로 사용하실 수 있습니다.