듣고 있는 강의 - 김영한의 실전 자바 기본편
패키지
컴퓨터가 파일을 분류하기 위해 폴더, 디렉토리라는 개념을 제공하는 것처럼
자바도 이런 개념을 제공하는데, 이것이 바로 패키지이다
패키지 Package 는 이름 그대로 물건을 운송하기 위한 포장 용기나 그 포장 묶음을 뜻한다
패키지 사용
패키지를 사용하는 경우 항상 코드 첫 줄에 package 이름을 적어 주어야 한다
package pack; // 항상 코드 첫 줄에 package 이름을 적어준다
public class Data {
public Data() {
System.out.println("패키지 pack Data 생성");
}
}
Package 이름이 없는 경우 아래와 같이 오류가 발생한다
참고 - 생성자에 public 을 사용했다, 다른 패키지에서 이 클래스의 생성자를 호출하려면 public 을 사용해야 한다
pack 패키지 위치에 Data, pack.a 패키지 위치에 User 가 있을 때
pack 패키지 위치에 있는 PackageMain1 에서 Data 와 User 클래스를 둘 다 사용하고 싶다면
package pack.a; // pack.a 위치에 있는 User
public class User {
public User() {
System.out.println("패키지 pack.a 회원 생성");
}
}
package pack; // pack 위치에 있는 Data
public class Data {
public Data() {
System.out.println("패키지 pack Data 생성");
}
}
package pack;
public class PackageMain1 {
public static void main(String[] args) {
Data data = new Data(); // 같은 패키지 내 클래스 호출
pack.a.User user = new pack.a.User(); // 다른 위치 클래스 호출
}
}
다른 패키지 위치에 있는 User 를 사용하기 위해서 pack.a.User 처럼 패키지 전체 경로를 포함해서 클래스를 적어준다
패키지 - import
전체 경로를 적어주는, 불편한 점을 개선하기 위해 import 를 사용할 수 있다
import 를 사용하면 다른 패키지에 있는 클래스를 가져와서 사용할 수 있고
코드에서 패키지 명을 생략하고 클래스 이름만 적을 수 있다
package pack;
import pack.a.User;
public class PackageMain2 {
public static void main(String[] args) {
Data data = new Data();
User user = new User(); // import 사용으로 패키지명 생략
}
}
패키지 별 * 사용
특정 패키지에 포함된 모든 클래스를 포함해서 사용하고 싶으면 import 시점에 별 * 을 사용하면 된다
import pack.a.*; // pack.a 의 모든 클래스를 패키지 명을 생략하고 사용 가능
클래스 이름 중복
클래스 이름이 같아도 패키지 이름으로 구분해서 같은 이름의 클래스를 사용할 수 있다
단, 둘 다 import 할 수는 없기 때문에 자주 사용하는 클래스를 import 해주는 것이 편리하다
package pack;
import pack.a.User;
// pack.a 의 User 는 import 했지만
// pack.b 의 User 는 import 하지 못 하고 모두 명시해준다
public class PackageMain3 {
public static void main(String[] args) {
User userA = new User();
pack.b.User userB = new pack.b.User();
}
}
패키지 규칙
패키지의 이름과 위치는 폴더 (디렉토리) 위치와 같아야 한다
패키지 이름은 모두 소문자를 사용한다 - 대소문자를 구분하지 않는 OS 대비
패키지 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용한다 ex. com.company.myapp
패키지 계층 구조
패키지가 아래와 같이 계층 구조를 이룰 때, 패키지는 a, a.b, a.c 총 3개의 패키지가 존재한다
계층 구조 상 a 패키지 하위에 a.b 패키지와 a.c 패키지가 있는 것처럼 보이지만
a 패키지와 a.b, a.c 패키지는 서로 완전히 다른 패키지이다
a 패키지의 클래스에서 a.b 패키지의 클래스가 필요하면 import 해서 사용해야 한다
a
└ b
└ c
패키지를 구성할 때 서로 관련된 클래스는 하나의 패키지에 모으고,
관련이 적은 클래스는 다른 패키지로 분리하는 것이 좋다
'TIL > JAVA' 카테고리의 다른 글
[JAVA] 어노테이션 사용 (0) | 2024.12.26 |
---|---|
[JAVA] 접근 제어자 (1) | 2024.12.25 |
[JAVA] 생성자 (0) | 2024.12.11 |
[JAVA] 어노테이션 Annotation (2) | 2024.12.10 |
[JAVA] 객체 지향 프로그래밍 (5) | 2024.12.06 |