패키지
컴퓨터는 파일을 분류하기 위해 폴더,디렉토리라는 개념을 제공하는데 자바에서는 이것이 바로 패키지 이다.
package pack;
public class Data {
public Data() {
System.out.println("패키지 pack Data 생성");
}
}
- 패키지를 사용하는 경우 항상 코드 첫줄에 package pack 과 같이 패키지 이름을 적어주어야 한다.
- 여기서는 pack 패키지에 Data 클래스를 만들었다.
- 이후에 Data 인스턴스가 생성되면 생성자를 통해 정보를 출력한다
package pack.a;
public class User {
public User() {
System.out.println("패키지 pack.a 회원 생성");
}
}
참고: 생성자에 public 을 사용했다. 다른 패키지에서 이 클래스의 생성자를 호출하려면 public 을 사용해야 한다. 자세한 내용은 접근 제어자에서 설명한다. 지금은 코드와 같이 생성자에 public 키워드를 넣어두자.
package pack;
public class PackageMain1 {
public static void main(String[] args) {
Data data = new Data();
pack.a.User user = new pack.a.User();
}
}
실행 결과
패키지 pack Data 생성
패키지 pack.a 회원 생성
- 사용자와 같은 위치: PackageMain1 과 Data 는 같은 pack 이라는 패키지에 소속되어 있다. 이렇게 같은 패키 지에 있는 경우에는 패키지 경로를 생략해도 된다.
- 사용자와 다른 위치: PackageMain1 과 User 는 서로 다른 패키지다. 이렇게 패키지가 다르면 pack.a.User 와 같이 패키지 전체 경로를 포함해서 클래스를 적어주어야 한다.
패키지 - import
패키지가 다르다고, pack.a.User와 같이 항상 전체 경로를 적어주는 것은 불편하다. 이때는 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 사용으로 패키지 명 생략 가능
}
}
실행 결과
패키지 pack Data 생성
패키지 pack.a 회원 생성
import를 사용한 덕분에 코드에서는 패키지 명을 생략하고 클래스 이름만 적을 수 있다.
특정 패키지에 포함된 모든 클래스를 포함해서 사용하고 싶으면 import 시점에 *(별) 을 사용하면 된다.
클래스 이름 중복
패키지 덕분에 클래스 이름이 같아도 패키지 이름으로 구분해서 같은 이름의 클래스를 사용할 수 있다.
pack.a.User
pack.b.User
package pack.b;
public class User {
public User() {
System.out.println("패키지 pack.b 회원 생성");
}
}
package pack;
import pack.a.User;
public class PackageMain3 {
public static void main(String[] args) {
User userA = new User();
pack.b.User userB = new pack.b.User();
}
}
같은 이름의 클래스가 있다면 import는 둘중 하나만 선택할 수 있다. 이때는 자주 사용하는 클래스를 import하고 나머지를 패키지를 포함한 전체 경로를 적어주면 된다.
패키지 규칙
- 패키지의 이름과 위치는 폴더(디렉토리) 위치와 같아야 한다. (필수)
- 패키지 이름은 모두 소문자를 사용한다. (관례)
- 패키지 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용한다. 예를 들어, com.company.myapp 과 같이 사용한다. (관례)
- 이 부분은 필수는 아니다. 하지만 수 많은 외부 라이브러리가 함께 사용되면 같은 패키지에 같은 클래스 이 름이 존재할 수도 있다. 이렇게 도메인 이름을 거꾸로 사용하면 이런 문제를 방지할 수 있다.
- 내가 오픈소스나 라이브러리를 만들어서 외부에 제공한다면 꼭 지키는 것이 좋다.
- 내가 만든 애플리케이션을 다른 곳에 공유하지 않고, 직접 배포한다면 보통 문제가 되지 않는다.
패키지와 계층 구조
- a
- b
- c
계층 구조상 a패키지 하위에 a.b 패키지와 a.c 패키지가 있다.
패키지가 계층 구조를 이루더라도 모든 패키지는 서로 다른 패키지 이다.
따라서 a 패키지의 클래스에서 a.b 패키지의 클래스가 필요하면 import 해서 사용해야 한다.
public이 붙어있어야 다른 패키지에서 생성자를 호출할 수 있다.
패키지를 구성할 때 서로 관련된 클래스는 하나의 패키지에 모으고, 관련이 적은 클래스는다른 패키지로 분리하는 것이
좋다.
'코딩' 카테고리의 다른 글
[ Java ] 실전자바-기본편 7. 자바 메모리 구조와 static (2) | 2024.02.15 |
---|---|
[ Java ] 실전자바-기본편 6. 접근 제어자 (0) | 2024.02.14 |
[ Java ] 실전자바-기본편 3.객체 지향 프로그래밍 (1) | 2024.02.11 |
[ Java ] 실전자바-기본편 2. 기본형과 참조형 (1) | 2024.02.10 |
[ Java ] 실전자바-기본편 1.클래스와 데이터 (1) | 2024.02.09 |