기능이 추가되어 프로그램이 아주 커지게 된다면?
비슷한 목적으로 생성된 클래스 파일들을 한곳에 모아 둔 폴더를 의미한다.
패키지 안에 자바 클래스가 있는 것이다. 이름 그대로 물건을 운송하기 위한 포장 용기나 묶음이다.
패키지의 위치에 주의해야 한다.
Data data = new Data(); // 같은 패키지에 있을 때
pack.a.User user = new pack.a.User(); // 다른 패키지에 있는 것을 불러올 때
import를 사용하면 다른 패키지에 있는 클래스를 가져와서 사용할 수 있다.
코드에서는 패키지 명을 생략하고 클래스 이름만 적을 수 있다.
모든 패키지를 가져와서 사용할 때
import pack.a.;
를 사용하여 모든 패키지에 있는 클래스를 가져온다.
pack.a패키지에 있는 모든 클래스를 패키지 명을 생략하고 사용할 수 있다.
하위 폴더는 임포트 되지 않고, 클래스 파일만 임포트 된다.
클래스 이름 중복
패키지 덕분에 클래스 이름이 같아도 패키지 이름으로 구분해서 같은 이름의 클래스를 사용할 수 있다.
pack.a.User
pack.b.User
클래스 이름이 둘 다 User이지만 패키지 이름으로 대상을 구분 가능하다.
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가 한번만 가능하기 때문에 자주 사용하지 않는 것은 pack.b.User나머지를 패키지를 포함한 전체 경로를 적어주면 된다.
}
}
class ABC {
}
외부 클래스는 다른 패키지에서 임포트 불가능
public class BCD {
}
public 클래스는 다른 패키지에서 임포트 가능
패키지의 이름과 위치는 폴더(디렉토리) 위치와 같아야 한다.
패키지의 이름은 모두 소문자를 사용한다.
패키지 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용한다.
com.company.myapp과 같이 사용한다.
도메인 이름을 거꾸로 사용하면 중복을 방지할 수 있다. = 외부에 제공한다면 꼭 지키는 것이 좋다.
패키지를 구성할 때 서로 관련된 클래스는 하나의 패키지에 모으고, 관련이 적은 클래스는 다른 패키지로 분리하는 것이 좋다.