[Java] 패키지(package)와 임포트(import)
by Choi HyeSun
패키지(package) - 정의
-
하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용
-
물리적으로 클래스파일(.class)을 포함하는 하나의 디렉토리
-
모든 클래스는 반드시 하나의 패키지에 속해야 함
-
점’.’을 구분자로 계층구조로 구성할 수 있음
- 예) java.lang 패키지
lang 패키지 : java 패키지의 하위 패키지
- 예) java.lang 패키지
-
클래스 또는 인터페이스를 포함할 수 있으며, 관련된 클래스끼리 그룹 단위로 묶어놓음
-
클래스를 효율적으로 관리할 수 있음
-
서로 다른 패키지에 같은 이름의 클래스가 존재할 수 있음
: 자신만의 패키지 체계를 유지하면서 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있음
-
-
클래스의 실제 이름(full name)
-
패키지를 포함한 것
-
예) String 클래스의 실제 이름 : java.lang.String
java.lang 패키지에 속한 String 클래스
rt.jar 패키지에 압축되어 있으며 java의 서브디렉토리인 lang에 속한 String.class파일
-
패키지(package) - 선언
-
package 패키지명;
-
주석과 공백을 제외한 첫 번째 문장
-
한 소스 파일에 단 한 번만 선언할 수 있음
-
대소문자를 모두 허용 → 클래스명과 구분하기 위하여 소문자로 하는 것을 원칙
-
unnamed package(이름 없는 패키지)
-
package를 선언하지 않으면 자동으로 이름없는 패키지에 속함
-
패키지를 지정하지 않는 모든 클래스는 같은 패키지에 속함
-
-
컴파일시 ‘-d’ 옵션
javac -d (해당 패키지의 루트 디렉토리 경로) (소스파일).java-
예1) javac -d . Sunny.java (이곳이 root 디렉토리)
-
예2) javac -d c:\sunny\ Sunny.java (c:\sunny가 root 디렉토리)
-
소스파일에 지정된 경로를 통해 패키지의 위치를 찾아서 클래스파일을 생성
해당 디렉토리가 없다면, 디렉토리를 만들어줌
-
-
컴파일시 ‘-cp’ 옵션
-
클래스패스(classpath)
: 컴파일러(javac.exe)나 JVM이 클래스의 위치를 찾는데 사용되는 경로 -
일시적으로 클래스 패스 지정
-
임포트(import) - 정의
-
사용하고자 하는 클래스의 패키지를 미리 명시해주면, 소스코드에 사용되는 클래스이름에서 패키지명을 생략할 수 있음
- 원래는 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름(클래스의 실제 이름)을 사용해야함 > 이게 불편하기 때문에 사용
-
컴파일러에게 소스파일에 사용될 클래스의 패키지에 대한 정보를 제공
-
컴파일시에 컴파일러가 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아내고, 모든 클래스이름 앞에 패키지명을 붙여줌
-
즉, 실행시간에 영향을 미치진 않고, 컴파일 시간에 영향을 조금 미침
-
-
이클립스
- Ctrl + Shift + o 를 누르면 자동으로 import를 추가해주는 편리한 기능
임포트(import) - 선언
-
일반적인 소스 파일 구성
- package문
import문
클래스 선언
- package문
-
import 패키지명.클래스명; vs import 패키지명.*;
-
컴파일 시간의 차이지 실행시간의 차이는 전혀 없음
-
*의 경우 하위 패키지는 포함하지 않고 현재의 패키지만 전체 확인
-
정적 임포트(static import) - 정의
-
import와 차이점
-
import : 클래스 패키지명을 생략
-
static import : static 멤버를 호출할 때 클래스 이름 생략
-
-
특정 클래스의 static 멤버를 자주 사용할 때 편리
정적 임포트(static import) - 선언
-
패키지명.클래스명.정적메서드명
해당 클래스의 해당 static 메서드
패키지명.클래스명.*
해당 클래스의 모든 static 메서드 -
예시) Math 클래스 => static 멤버들
import static java.lang.math.* // math 클래스의 모든 static 메서드
import static java.lang.math.random // math 클래스의 random static 메서드
=> Math.random() → random() 사용
Subscribe via RSS