
package pack.a;
public class User {
public User() {
System.out.println("패키지 pack.a 회원 생성");
}
}
package pack;
public class PackageMain1 {
public static void main(String[] args) {
Data data = new Data();
pack.a.User user = new pack.a.User();
}
}
package pack;
import pack.a.User;
public class PackageMain2 {
public static void main(String[] args) {
Data data = new Data();
User user = new User(); //import 사용으로 패키지 명 생략 가능
}
}
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하고 나머지는 전체 경로로 적어준다.
패키지는 보통 다음과 같이 계층 구조를 이룬다.
이렇게 하면 다음과 같이 총 3개의 패키지가 존재한다.
a , a.b , a.c 서로 완전히 다른 패키지이다. a 패키지의 클래스에서 a.b 패키지의 클래스가 필요하면 import 해서 사용해야 한다. 반대도 마찬가지
정리하면 패키지가 계층 구조를 이루더라도 모든 패키지는 서로 다른 패키지이다. 물론 사람이 이해하기 쉽게 계층 구조를 잘 활용해서 패키지를 분류하는 것은 좋다. 참고로 카테고리는 보통 큰 분류에서 세세한 분류로 점점 나누어진다. 패키지도 마찬가지이다.

package com.helloshop.user;
public class User {
String userId;
String name;
}
package com.helloshop.product;
public class Product {
String productId;
int price;
}
package com.helloshop.product;
public class ProductService {
}
package com.helloshop.order;
import com.helloshop.product.Product;
import com.helloshop.user.User;
public class Order {
User user;
Product product;
public Order(User user, Product product) {
this.user = user;
this.product = product;
}
}
package com.helloshop.order;
import com.helloshop.product.Product;
import com.helloshop.user.User;
public class OrderService {
public void order() {
User user = new User();
Product product = new Product();
Order order = new Order(user, product);
}
}
package com.helloshop.order;
public class OrderHistory {
}