Search

package & import

패키지 (package)

클래스의 묶음
클래스 or 인터페이스 포함 가능
서로 관련된 클래스들끼리 그룹 단위로 묶어 효율적인 관리 가능
동일명의 클래스더라도 서로 다른 패키지에 속하면 상관 X → 자신만의 패키지 체계를 유지하면서 다른 클래스 라이브러리의 클래스들과 충돌 방지
클래스의 오리지날 네임 : 패키지명.클래스명
String 클래스java.lang.String
패키지의 특징
1.
하나의 소스 파일엔 첫 번째 문장으로 단 한번의 패키지만 선언 가능
2.
모든 클래스는 반드시 하나의 패키지에 속해야 함.
3.
패키지는 .구분자로 하여 계층 구조 형성 가능
4.
패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리

패키지의 선언

클래스인터페이스의 소스파일(.java)의 맨 위에
package 패키지명;
Java
패키지명은 소문자
모든 클래스는 하나의 패키지에 속해야 하지만, 선언을 안해도 괜찮았던 이유?
unnamed package
패키지를 선언하지 않으면, 자동으로 모두 unnamed package에 속하게 됨.
출력문을 실행하면 자동으로 .java 파일이 컴파일되어 .class 파일이 생성되고, 실제 물리적으로 디렉토리에 접근해서 .class 파일 확인도 가능하다.
PackageTest.java

import 문

다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름을 사용해야 함.
매번 클래스를 사용할 때마다 패키지 이름을 같이 쓰는 건 매우 불편
import 문을 사용하여 사용할 패키지명을 미리 명시하고 자유롭게 사용하자!
import 문 자동 추가 단축키 : ctrl + shift + o

import 문의 선언

한 소스 파일에 여러 번 선언 가능
일반적인 소스 파일(.java)의 구성
1.
package
2.
import
3.
클래스 선언
import 문의 선언 방법
// 패키지에 속한 모든 클래스 파일 지정 import 패키지명.*; import java.util.*; // 사용할 클래스 딱 하나 지정 // 특정 클래스 이름을 찾는 수고가 더 들어갈 뿐, 실행 시 성능 상의 차이는 X import 패키지명.클래스명; import java.util.Calendar; import java.util.Date; import java.util.ArrayList;
Java
*이 더 하위 패키지의 모든 클래스까지 포함하는 것은 아님!
import java.util.*; import java.text.*; // 위 import문을 다음 문장으로 대신할 순 없음! import java.*;
Java
import문을 사용하여 사용할 클래스 이름 앞에 패키지명 생략
ImportTest.java
System이나 String 같은 클래스들을 java.lang 패키지명 없이 사용할 수 있는 이유?
모든 소스 파일엔 묵시적으로 import 문이 선언되어 있다!

static import 문

static import 문을 사용하여 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으로만 참조 가능 // 위의 static import 문을 사용하면 다음과 같이 코드 축소 가능 // System.out.println(Math.random()); out.println(random());
Java
StaticImportEx.java

참고 자료