본문 바로가기
언어/자바의 정석

[자바의 정석] Chapter 7 객체 지향 프로그래밍II (3) - package와 import

by chan10 2021. 2. 16.

패키지(package)

패키지란 클래스의 묶음으로 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며 서로 관련된 클래스끼리 그룹단위로 묶어 효율적으로 관리할 수 있다.

클래스의 실제 이름은 java.lang.String처럼 패키지 명을 포함하기에 같은 이름의 클래스라도 서로 다른 패키지에 속하면 패키지 명으로 구별이 가능하다.

o  클래스가 하나의 물리적인 파일(.class)인 것처럼 패키지는 물리적으로 하나의 디렉토리(폴더)이다.

o  클래스의 패키지 선언 시 다음과 같은 규칙이 있다.

1.     하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.

2.     모든 클래스는 반드시 하나의 패키지에 속해야 한다.

3.     패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.

4.     패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다.

 

패키지의 선언

o  패키지는 [package 패키지명;] 형식으로 선언한다. 패키지 선언문은 소스 파일의 주석과 공백을 제외한 맨 첫 번째 문장이어야 하며 소스파일에 한 번만 선언될 수 있다.

o  패키지명은 대소문자 모두 가능하지만 클래스 파일과 구분하기 쉽게 하기 위해 소문자로 하는 것을 원칙으로 한다.

o  모든 클래스는 반드시 하나의 패키지에 포함되어야 한다. 소스 파일에 자신이 속할 패키지를 지정하지 않은 클래스는 자동적으로 이름없는 패키지(nunamed package)’에 속하게 된다.

 

import

다른 패키지의 클래스를 사용할 경우 패키지 명이 포함된 클래스 이름을 사용해야 하지만 그러면 너무 불편하다. 사전에 import문으로 사용할 패키지를 미리 명시해주면 클래스이름에서 패키지 명을 생략할 수 있다.

o  impot의 역할은 컴파일 시 컴파일러에게 패키지에 대한 정보를 제공하며 컴파일러는 이를 통해 클래스들의 패키지를 알아낸 다음 모든 클래스 앞에 패키지 명을 붙인다.

 

import 문의 선언

o  일반적인 소스파일(.java)의 구성은 다음의 순서로 되어있다.

1.     package

2.     import

3.     클래스 선언

o  Import[import 패키지명.클래스명;] 또는 [import 패키지명.*]로 선언할 수 있다.

o  *을 사용할 경우 지정된 패키지에 속하는 모든 클래스를 패키지명 없이 사용할 수 있으며 컴파일러는 해당 패키지에서 일치하는 클래스 이름을 찾는 작업이 생기지만 프로그램 실행 시 성능상의 차이는 전혀 없다.

o  그러나 import문에서 *사용하는 것이 현재 작성된 경로의 패키지만 포함되는 것이지 하위 패키지의 클래스까지 포함하는 것은 아니다.

 

static import

o  import문은 클래스 사용 시 패키지 명을 생략할 수 있었다면 static import문은 static멤버 호출 시 클래스명을 생략할 수 있다.

package JavaProject;
 
import static java.lang.Math.random;
import static java.lang.System.out;
 
public class Test {    
    public static void main(String[] args) {
        // System.out.println(Math.random());
        out.println(random());  //System, Math를 생략하여 사용가능
    }
}