서로 관련된 클래스와 인터페이스의 묶음이다.
클래스가 물리적으로 클래스파일(*.class)인 것처럼,
패키지는 물리적으로 폴더(디렉토리)이다.
- java소스파일을 컴파일하면 클래스파일이 생기는 것처럼,
패키지는 폴더가 생성된다.
- 폴더 안에 폴더를 생성할 수 있는 것처럼
패키지안에 서브패키지를 생성할 수 있다.(```.```으로 구분)
-> java.lang : java패키지 하위에 lang패키지가 존재한다는 의미
클래스의 실제 이름(full name)은 패키지명이 포함된 것이다.
rt.jar : Java API의 기본 클래스들을 압축한 파일
package 패키지명;
하나의 소스파일에 둘 이상의 클래스가 포함된 경우,
모두 같은 패키지에 속하게 된다.
(하나의 소스파일에 단 하나의 public클래스만 허용한다.)
모든 클래스는 하나의 패키지에 속하며, 패키지가 선언되지 않은 클래스는
자동적으로 이름없는(unnamed) 패키지에 속하게 된다.
사용할 클래스의 패키지를 지정하는데 사용한다.
import문을 사용하면 클래스를 사용할 때 패키지명을 생략할 수 있다.
// java.util패키지에 속한 클래스들은 패키지명을 붙이지 않고 사용 가능
import java.util.*;
public class Hello {
// import를 사용하지 않을 경우
java.util.Scanner sc01 = new java.util.Scanner(System.in);
// import를 사용할 경우
Scanner sc02 = new Scanner(System.in);
}
// import java.lang.*; import 생략
public class Hello{
public static void main(String[] args){
System.out.println("Hello!");
}
}
패키지문
import문
클래스 선언
import 패키지명.클래스명;
- 해당 패키지 하위에 특정 클래스만 import
import 패키지명.*;
- 해당 패키지 하위에 모든 클래스들을 import
package java_basic.package_import;
import java.util.Scanner;
import java.util.Date;
public class Hello {
public static void main(String[] args) {
Scanner sc01 = new Scanner(System.in);
Date date01 = new Date();
}
}
package java_basic.package_import;
import java.util.*;
public class Hello {
public static void main(String[] args) {
Scanner sc01 = new Scanner(System.in);
Date date01 = new Date();
}
}
// 1과 2는 서로 다른 의미를 가지고 있다.
// 01. java패키지 하위에 util패키지와 text패키지 안에 모든 클래스 import
import java.util.*;
import java.text.*;
// 02. java패키지 하위에 포함된 패키지들의 클래스들만 import
import java.*;
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();
}
}