728x90
반응형
패키지(Package) 및 package 문
- 클래스 파일이 위치하는 물리적 폴더 구조
- 패키지가 다르면 같은 이름의 클래스도 각각 별도로 관리가 가능함
- 패키지명은 상위패키지와 하위패키지로 구분하여
- 패키지 내에 또 다른 패키지를 생성할 수 있음 각 패키지 단계를 마침표(.)로 구분하여 지정
- 패키지명은 보통 각 회사의 도메인 이름을 사용하며 도메인 이름을 상위도메인부터 역순으로 나열하여 지정 ex. samsung.com 일 경우 com.samsung 으로 지정
- 특정 패키지에 소속된 클래스의 소스코드 최상단에는 반드시 package 키워드를 사용하여 소속 패키지의 이름을 명시해야함 단, 하나의 클래스는 하나의 패키지에 소속되므로 package 문은 소스 코드 최상단에서 단 한 번만 선언됨
- 특정 클래스의 이름을 나타내는 기본적인 규칙은 "패키지명.클래스명" 의 형태로 지정하는 것이 기본이나 현재 패키지 내에 중복되는 클래스가 없을 경우 패키지명 생략 가능
기본 문법
package 상위패키지명.하위패키지명;
import 문
- 특정 패키지에 소속된 클래스를 소스코드에 포함시키는 문
- 해당 패키지명과 클래스명을 조합하여 특정 클래스를 지정하거나 클래스명 대신 ***** 기호로 해당 패키지의 모든 클래스를 지정 가능
- package 문과 class 선언부 사이에 위치하며, package 문과 달리 갯수 제한없이 여러번 사용 가능
- 자동 import 단축키 : Ctrl + Shift + O
- java.lang 패키지는 유일하게 import 문 생략이 가능한 패키지이다! (자바에서 가장 기본이 되는 패키지이므로 자동으로 포함됨)
기본 문법
import 상위패키지명.하위패키지명.클래스명; 또는
import 상위패키지명.하위패키지명.*;
// com.lg.tv 패키지를 소스코드에 포함시키기 위한 import 문 작성
//import com.lg.tv.*; // 패키지 내의 모든 클래스를 포함하는 경우
import com.lg.tv.Tv; // 패키지 내의 특정 클래스만 포함하는 경우
// 주의! 패키지가 다르고 이름이 동일한 클래스는 동시에 import 불가능
//import com.samsung.tv.Tv; // 오류 발생!
import com.samsung.tv.*; // 사용 가능
public class Ex {
public static void main(String[] args) {
// 원래 사용하던 클래스 지정 방식(패키지명을 생략하고 사용)
String str = "홍길동";
// 실제 String 클래스를 지정하는 정석적인 방법
// => java.lang 패키지 내에 위치하므로
java.lang.String str2 = "홍길동";
// com.lg.tv 패키지의 Tv 클래스 지정하여 객체 생성
// com.lg.tv.Tv tv = new com.lg.tv.Tv();
// com.lg.tv 패키지명을 생략하기 위해서는
// 해당 패키지를 import 문을 통해 현재 소스에 포함시켜야함
Tv tv = new Tv();
// com.samsung.tv 패키지 내의 Tv 클래스 사용해야하는 경우
// => 이미 com.lg.tv 패키지의 Tv 클래스가 import 되어 있으므로
// 다른 패키지의 Tv 클래스는 패키지명을 포함해서 지정해야함
// (동일한 클래스를 import 할 수 없다!)
// com.samsung.tv.Tv tv2 = new com.samsung.tv.Tv();
// import 문을 사용하여 "com.lg.tv.Tv" 위치를 지정했을 경우
// LgTv lgTv = new LgTv(); // 사용 불가능(위치를 모르기 때문)
// => 해결책 : import 문을 추가하거나 tv.* 로 변경해야하거나
// 패키지명.클래스명 형태로 지정
// import 문을 사용하여 "com.samsung.tv.*" 위치를 지정했을 경우
SamsungTv samsungTv = new SamsungTv(); // 사용 가능
}
}
같은 파일 내의(같은 패키지) 다른 클래스의 멤버에 접근
class SameFileOtherClass {
private int privateNum = 10;
int defaultNum = 20;
public int publicNum = 30;
public void print() {
// 자신의 클래스 내에서는 모든 접근제한자에 접근 가능
System.out.println("privateNum : " + privateNum); // O
System.out.println("defaultNum : " + defaultNum); // O
System.out.println("publicNum : " + publicNum); // O
}
}
// 같은 파일 내의(같은 패키지) 다른 클래스의 멤버에 접근
SameFileOtherClass c1 = new SameFileOtherClass();
// System.out.println("privateNum : " + c1.privateNum); // X
// => private 접근제한자는 다른 클래스에서 접근 불가
System.out.println("defaultNum : " + c1.defaultNum); // O
System.out.println("publicNum : " + c1.publicNum); // O
System.out.println("----------------------------------------");
// 같은 패키지 내의 다른 클래스의 멤버에 접근
SamePackageOtherClass c2 = new SamePackageOtherClass();
// System.out.println("privateNum : " + c2.privateNum); // X
// => private 접근제한자는 다른 클래스에서 접근 불가
System.out.println("defaultNum : " + c2.defaultNum); // O
System.out.println("publicNum : " + c2.publicNum); // O
System.out.println("----------------------------------------");
OtherPackageOtherClass c3 = new OtherPackageOtherClass();
// System.out.println("privateNum : " + c3.privateNum); // X
// => private 접근제한자는 다른 클래스에서 접근 불가
// System.out.println("defaultNum : " + c3.defaultNum); // X
// => default 접근제한자는 다른 패키지의 클래스에서 접근 불가
System.out.println("publicNum : " + c3.publicNum); // O
728x90
반응형
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] 자바의 this & super (0) | 2021.01.19 |
---|---|
[JAVA] 자바의 상속 Inheritance (0) | 2021.01.18 |
[JAVA] 자바의 생성자 Constructor (0) | 2021.01.18 |
[JAVA] 자바의 접근제한자 Access Modifier (0) | 2021.01.18 |
[JAVA] 자바의 클래스 Class (0) | 2021.01.18 |