package와 import는 무엇일까?
패키지 (Package)
--
패키지는
클래스 또는 인터페이스들을 논리적으로 그룹화한 것을 의미한다.
정리하자면
클래스는 물리적으로 하나의 클래스 파일(.class)이고
패키지는 물리적으로 하나의 디렉터리다.
서로 관련된 클래스들끼리 그룹 단위로 묶어 패키지에 담으면
클래스들을 효율적으로 관리할 수 있다.
규칙
- 모든 클래스는 반드시 하나의 패키지에 속해야 한다.
- 하나의 소스파일(.class 파일)에는 맨 첫 문장으로 단 한 번의 패키지 선언만을 허용한다. (반드시 최상단에 정의)
- 같은 패키지 안에서는 동일한 이름의 클래스파일이 존재하면 안 된다. (서로 다른 패키지라면 상관 X)
- 패키지는 점(.)을 구분자로 사용하여 계층구조로 구성한다.
패키지 선언 형식
package 패키지명(경로);
package com.example.test; // test패키지에 TestClass 파일을 담음
public class AClass {
...
}
package com.example.test; // test패키지에 BClass 파일을 담음
public class BClass {
...
}
package com.example.what; // what패키지에 CClass 파일을 담음
public class CClass {
...
}
만약 package 선언을 하지 않으면
기본적으로 제공하는 이름 없는 패키지(defualt)에 자동으로 담기게 된다.
default 패키지는 실제로 따로 존재하는 물리적 패키지가 아닌
그냥 최상단 패키지(디렉터리)를 가리키는 용어다.
(디렉토리 루트 경로)
즉, package를 따로 선언하지 않으면 최상단 패키지에 따로 담아지게 되는 것이다.
--
import
--
import는
다른 패키지에 존재하는 내용(정보)들을 현재 위치(클래스 파일)에 제공(불러오기)하는 키워드다.
즉, 다른 패키지에 속한 클래스를 사용하기 위해 정의하는 키워드다.
import는 반드시 package 다음으로 맨 위에 선언해야 한다.
import 선언 형식
import 클래스파일명(경로);
package com.example.test;
public class TestClass {
public int a = 10;
...
}
package com.hoho.hihi;
import com.example.test.TestClass; // test패키지에 담긴 TestClass.class파일을 불러옴
public class hiClass {
public static void main(String[] args) {
TestClass tt = new TestClass();
System.out.println(tt.a);
}
}
위 코드처럼 클래스파일(hiClass.class)에서
다른 패키지(test)에 속한 클래스파일(TestClass)에 있는 데이터(필드)를 접근하려면
해당 데이터(필드)는 public 접근 제어자로 선언하여 다른 패키지에서도 접근할 수 있도록 정의해야 한다.
특정 패키지에 속한 모든 클래스 파일을 import 하기
package com.hoho.hihi;
import com.example.test.*; // test패키지에 담긴 모든 클래스 파일을 불러옴
public class hiClass {
public static void main(String[] args) {
TestClass tt = new TestClass();
System.out.println(tt.a);
}
}
import를 선언하지 않고도 다른 패키지에 속한 클래스파일을 사용할 수 있다.
다만 이러한 경우 사용할 클래스 파일의 패키지 경로까지 전무 작성해야 한다.
package com.hoho.hihi;
public class hiClass {
public static void main(String[] args) {
com.example.test.TestClass tt = new com.example.test.TestClass();
System.out.println(tt.a);
}
}
import를 선언하지 않고, 직접 패키지 경로까지 작성하지 않아도 사용할 수 있는 경우가 있다.
java.lang 패키지는 자바가 모든 소스파일에 자동으로 import 하여 사용할 수 있도록 한다.
java.lang 패키지에는 String, Object, System 등의 클래스 파일이 존재하여
import를 사용하지 않아도 자바가 자동으로 import를 해주니 그냥 사용할 수 있는 것이다.
static import
다른 패키지안에 있는 static 멤버(static 변수, static 메서드)를 호출하여 사용할 때 사용한다.
오직 static 멤버만 불러와 사용할 수 있으며, 인스턴스 변수나 다른 메서드들은 사용이 불가능하다.
그냥 import문을 사용하면 클래스의 패키지명(경로)을 생략하여 사용할 수 있는 것처럼
static import문을 사용하면 해당 클래스명을 생략하여 사용할 수 있다.
static import 형식
import static static멤버명(경로);
Math 클래스파일에 sqrt라는 static 메서드가 존재한다.
// 일반 import를 한 경우
import java.lang.Math;
public class MyClass {
public static void main(String[] args) {
double result = Math.sqrt(25); // Math 클래스 이름을 사용
}
}
// import static을 한 경우
import static java.lang.Math.sqrt; // Math의 static 메서드 sqrt를 임포트
public class MyClass {
public static void main(String[] args) {
double result = sqrt(25); // Math 클래스 이름을 생략하고 sqrt 메서드를 바로 사용
}
}
--
'Language > Java' 카테고리의 다른 글
다형성 (예시 : A opt = new B()) (0) | 2024.10.21 |
---|---|
제어자, 접근 제어자 (+ static, final, abstract, 추상 클래스, 추상 메서드) (0) | 2024.10.20 |
[클래스] 변수와 메서드 (+ 초기화 블록) (0) | 2024.10.18 |
상속 (+ super, super(), 포함 관계) (0) | 2024.10.17 |
오버로딩, 오버라이딩 (0) | 2024.10.16 |