기본 개념
- 패키지 : 서로 관련된 클래스 묶음
- 클래스는 클래스 파일(*.class), 패키지는 폴더. 하위 패키지는 하위 폴더
- 클래스의 실제 이름은 패키지 이름을 포함. (java.lang.String)
- rt.jar 는 클래스 파일들을 압축한 파일 -> Java9 부터 없어짐
- Java9 부터는 module 개념 도입
패키지 선언
- 소스 파일의 첫 번째 문장으로 단 한번 선언
- 같은 소스 파일 내의 클래스들은 모두 같은 패키지에 속함
- 패키지 선언이 없으면 이름 없는(Unnamed) 패키지에 속하게 됨
package com.codechobo.book; // 패키지 선언
// 폴더 순서 : com -> codechobo -> book
public class PackageTest {
//...
}
class PackageTest2 {}
클래스 패스
- 클래스 파일의 위치를 알려주는 경로(path)
- 환경변수 classpath로 관리하며, 각 경로 간 구분자는 ';'를 사용
ex: 경로1;경로2;경로3
- 패키지 루트를 classapth(환경변수)에 등록 해줘야 함
- 환경변수를 새로 만든 후, 변수 이름 : classpath / 변수 값 : 패키지 루트 를 작성하여 등록
Import문
- 클래스를 사용할 때, 패키지 이름을 생략할 수 있다.
- 컴파일러에게 클래스가 속한 패키지를 알려준다.
- java.lang 패키지의 클래스는 import 하지 않아도 기본적으로 사용이 가능하다.
ex : String, Object, System, Thread ...
- import 패키지명.클래스명;
- import 패키지명.*; -> 해당 패키지의 모든 클래스를 의미
-> import문은 컴파일 시에 처리되므로, 프로그램의 성능에 영향 없음.
- import문은 패키지 선언과 클래스 선언 사이에 선언한다.
- 이름이 같은 클래스가 속한 두 패키지를 import 할 때는 클래스 앞에 패키지 명을 붙여줘야 한다.
// 생략 전
class Import Test {
java.util.Date today = new java.util.Date();
}
=>
// 생략 후
import java.util.Date;
class Import Test {
Date today = new Date();
}
// 이름이 같은 클래스는 꼭 패키지 명을 붙여줘야 한다
import java.sql.*; // java.sql.Date
import java.util.*; // java.util.Date
public class ImportTest {
public static void main(String[] args) {
java.util.Date today = new java.util,Date();
}
}
Static import문
- static 멤버(static 변수, static 메서드)를 사용할 때, 클래스 이름을 생략할 수 있게 해준다.
import static java.lang.Integer.*; // Integer 클래스의 모든 static 멤버
import static java.lang.Math.random; // Math.random()의 Math 이름을 생략하고 random()만으로 참조 가능
import static java.lang.System.out; // System.out의 System 이름을 생략하고 out 만으로 참조 가능