Java 패키지 - Import
import 없이 다른 패키지를 가져다 쓴 코드를 살펴보자.
source
└src
└pack
├Data.class
├PackageMain.class
└sub
└User.class
package pack;
public class PackageMain {
public static void main(String[] args) {
Data data = new Data();
pack.sub.User user = new pack.sub.User();
}
}
보다시피 pack.sub 으로 시작해서 클래스를 가져오는 것이 불편하다. 이럴 때는 import 내보내기로 간편하게 가져와 클래스 명칭을 줄일 수 있다.
package pack;
import pack.sub.User;
public class PackageMain {
public static void main(String[] args) {
Data data = new Data();
User user = new User();
}
}
출력
this pack Package. Data Constructor
this pack.sub. User Constructor
Import 사용 시 주의사항
첫 줄에 package 있어야 하고 그 다음으로 import 으로 작성하여야한다. package 보다 import 먼저 작성되있으면 안된다.
import 를 사용하면 다른 패키지의 클래스를 가져와 사용할 수 있다.
import 를 사용한 덕분에 코드에서도 불필요한 패키지명을 생략하고 클래스 이름만 적을 수 있다.
패키지의 다른 클래스를 가져오고 싶을 때
pack.sub 의 User 말고 UserManaget 를 추가한다고 가정
source
└src
└pack
├Data.class
├PackageMain.class
└sub
├User.class
└UserManager.class (*)
그럼 main 에서는 다음과 같이 import 를 여러 개 선언하고 코드에서 클래스를 사용할 수 있다.
package pack;
import pack.sub.User;
import pack.sub.UserManager;
만약 import 를 여러개로 지정하고 싶지 않은 경우 (*) 처리하여 import 가져오도록 한다.
package pack;
import pack.sub.*;
그럼 코드에서 정상적으로 클래스를 가져와 사용할 수 있다.
즉, pack.sub 아래의 클래스는 모두 가져와 사용할 수 있다.
package pack;
import pack.sub.*;
public class PackageMain {
public static void main(String[] args) {
Data data = new Data();
User user = new User();
UserManager manager = new UserManager();
}
}
클래스 이름이 중복된 경우
클래스 이름이 같아도 패키지 이름이 다르기 때문에 구분해주고 있다.
예로 pack.cli.User pack 패키지 하위 cli 패키지명에서 User 클래스가 있어도 sub 하위 패키지와 구분한다.
pack.sub.User
pack.cli.User
클래스가 모두 User 이지만 패키지 이름으로 구분.
그런데 만약 코드에서 패키지명을 생략한 User 클래스를 사용한 경우는?
source
└src
└pack
├PackageMain.class
├sub
│ └User.class
└cli (+)
└User.class (+)
main 함수
package pack;
import pack.sub.User;
public class PackageMain {
public static void main(String[] args) {
User user = new User;
pack.cli.User client = new pack.cli.User();
}
}
보다 시피 코드에서 다른 패키지명 까지 포함해서 클래스를 작성해주어야 한다.