자바에서 매우 많은 클래스를 관련 있는 기능들끼리 분류하여 디렉토리처럼 관리하는 개념
# 예시
ㅁ user
* User
* UserManger
* UserHistory
ㅁ product
* Product
* ProductCatalog
* ProductImage
위에와서 user, product 가 바로 패키지
project
ㅁ pack
ㅁ a
* User
* Data
* PackageMain1
package pack;
public class PackageMain1 {
public static void main(String[] args) {
// 사용자와 같은 위치
Data data = new Data();
// 사용자와 다른 위치
pack.a.User user = new pack.a.User();
}
}
사용자와 패키지의 위치가 다를 때는 풀네임을 적어줘야함 (pack.a.User)
하지만 위 pack.a.User 같이 전체 경로를 전부 적어주는 것은 매우 불편 -> import 를 사용해서 해결
package pack;
// import
import pack.a.User;
public class PackageMain2 {
public static void main(String[] args) {
Data data = new Data();
// 경로를 import 했기 때문에 경로를 생랙 가능
User user = new User();
}
}
만약 pack.a 패키지의 여러가지 클래스를 가져다 사용하고 싶다면 pack.a.* 사용
패키지가 다르면 클래스 이름이 같아도 사용 가능
pack.a.User
pack.b.User
위와 같은 상황에 두 User클래스를 import 하는 방법
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 하고 다른 하나는 전체 경로를 입력하여 호출한다.
이럴 경우에는 주로 사용하는 User 클래스만 import 하고 어쩌다 한 번씩 사용한 User클래스는 전체 경로를 불러와서 사용하는 방식으로 사용
com.company.myapppackage
ㅁ a
ㅁ b
ㅁ c
위와 같은 경우는 총 3개의 패키지
a, a.b, a.c
a패키지와 a.b, a.c 패키지는 서로 완전히 다른 패키지이므로 a패키지에서 a.b 또는 a.c 패키지의 클래스를 가져다 사용하려면 import 해서 사용해야 함.(반대도 마찬가지)
com.helloshop
userUserUserServiceproductProductProductServiceorderOrderOrderServiceOrderHistorycom.helloshop.user.User
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.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);
}
}