본문 바로가기
Study/JAVA

[Java] 7-3. package와 import

by jeongwle 2022. 9. 5.
728x90
반응형

1. 패키지(package)

패키지란 클래스의 묶음이다. 패키지엔 클래스나 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓아 클래스를 효율적으로 관리할 수 있다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하다.

사실 클래스의 풀네임은 패키지명을 포함한 것이다. 예로 String클래스는 java.lang.String이다. java.lang패키지에 속한 String클래스 라는 의미이다. 그렇기 때문에 같은 이름의 클래스라도 패키지명으로 구별이 가능하다.

클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다. 디렉토리가 하위 디렉토리를 가질 수 있는 것처럼 패키지 또한 하위 패키지를 가질 수 있고 점(.)으로 구분한다. java.lang패키지를 보면 lang패키지는 java패키지의 하위패키지이다.

하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.
모든 클래스는 반드시 하나의 패키지에 속해야 한다.
패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다.
패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다.​

 

2. 패키지의 선언

패키지를 선언하는 것은 아주 간단하다. 클래스나 인터페이스의 소스파일(.java)의 맨 위에 다음과 같이 한 줄을 적어주면 된다.
package 패키지명;​

위의 패키지 선언문은 반드시 소스파일에서 주석과 공백을 제외한 첫 번째 문장이어야 하고 단 한 번만 선언될 수 있다. 패키지명은 대소문자를 모두 허용하지만 클래스명과의 구분을 위해 소문자로 하는 것을 원칙으로 한다.

지금까지 예제로 작성했던 소스파일들에는 패키지를 선언하지 않았음에도 문제가 발생하지 않은 이유는 자바에서 기본적으로 이름없는 패키지(unnamed package)를 제공하기 때문이다. 패키지를 지정하지 않은 클래스는 이름없는 패키지에 속하게 된다.

 

3. import문

소스코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름을 사용해야한다. 하지만 import문으로 사용하고 하는 클래스의 패키지를 미리 명시하면 클래스 이름에서 패키지명을 생략할 수 있다.

import문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지 정보를 제공하는 것이다.

 

4. import문의 선언

모든 소스파일에서 import 문은 package문 다음에 그리고 클래스 선언문 이전에 위치해야 한다. import문은 여러 번 선언할 수 있다.
1. package문
2. import문
3. 클래스 선언​

클래스 이름을 지정해주는 대신 *을 사용하여 해당 패키지에 속한 모든 클래스를 사용할 수 있다. 실행 시 성능상의 차이는 전혀 없다.
import java.util.*;
import java.text.*;

// 위의 두개를 하나로 합칠 수는 없다.
import java.* -> X​

*을 사용하는 것이 하위 패키지의 클래스까지 포함하는 것은 아니라는 의미이다.

java.lang패키지는 매우 빈번하게 사용되는 중요한 클래스들이 속해 있는 패키지이기 때문에 묵시적으로 import 되어 있다. 그래서 따로 import하지 않아도 사용할 수 있다.

 

5. static import문

static import문을 사용하면 static멤버를 호출할 때 클래스 이름을 생략할 수 있다. 특정 클래스의 static멤버를 자주 사용할 때 편리하고 코드가 간결해진다.
import static java.lang.Integer.*;	// Integer클래스의 모든 static 메서드
import static java.lang.Math.random;	// Math.random()만.
import static java.lang.System.out;	// System.out을 out만으로 참조 가능

System.out.println(Math.random()); -> out.println(random());​
728x90
반응형

'Study > JAVA' 카테고리의 다른 글

[Java] 7-5. 다형성(polymorphism)  (0) 2022.09.05
[Java] 7-4. 제어자(modifier)  (0) 2022.09.05
[Java] 7-2. 오버라이딩(overriding)  (0) 2022.09.03
[Java] 7-1. 상속(inheritance)  (0) 2022.09.03
[Java] 6-5, 6. 생성자 & 변수의 초기화  (0) 2022.09.02

댓글