Java 패키지 - 활용

프로젝트를 작성 시 패키지를 활용하게 되는데, 다음과 같이 계층 구조를 가져본다. 실제 동작 코드는 아니나 애플리케이션을 크게 한 경우 패키지를 구성한다.
실제 프로젝트에서는 규모나 아키텍처에 따라 다르다.

com.kiioio
├user
│ ├User.class (+)
│ └UserService.class (+)
├product
│ ├Product.class (+)
│ └ProductService.class (+)
└order
    ├Order.class (+)
    ├OrderService.class (+)
    └OrderHistory.class (+)

패키지에 대해 알아보는 시간이기 때문에 간략한 코드만 작성한다.


User.java

회원에 대한 객체

package com.kiioio.user;

public class User {
    private String userId;
    private String name;
}

UserService.java

회원을 관리하는 서비스

package com.kiioio.user;

public class UserService {
    public UserService() {
        System.out.println("UserService");
    }
}

Product.java

제품에 대한 객체

package com.kiioio.product;

public class Product {
    private String productId;
    private int price;
}

ProductService.java

제품을 저장하고 관리하는 서비스

package com.kiioio.product;

public class ProductService {
    public ProductService() {
        System.out.println("ProductService");
    }
}

Order.java

주문에 대한 객체
여기서 주문을 할 때 어떤 사용자인지 User 에 대한 정보가 필요하다.
그리고 주문한 제품 Product 정보가 필요하다.
각각 Import 가져오기로 불려오도록 해야한다.

package com.kiioio.order;

import com.kiioio.product.Product;
import com.kiioio.user.User;

public class Order {
    private User user;
    private Product product;

    public Order(User user, Product product) {
        this.user = user;
        this.product = product;
    }
}

User, Product 모두 각각 다른 패키지를 사용하는 모습을 볼 수 있다.


OrderHistory.java

주문 이력 확인하기

package com.kiioio.order;

public class OrderHistory {
    public OrderHistory() {
        System.out.println("Order History Constructor");
    }
}

OrderService.java

주문하는 비즈니스 로직이다.

package com.kiioio.order;

import com.kiioio.product.Product;
import com.kiioio.user.User;

public class OrderService {
    public void order() {
        User user = new User();
        Product product = new Product();
        Order order = new Order(user, product);
    }
}

회원을 만들고 상품을 만들고 주문해서 이 회원이 이 상품을 주문하는 것에 대한 구성이다.

패키지를 구성할 때는 관련된 클래스끼리 하나의 패키지로 묶고, 관련이 적은 클래스끼리는 다른 패키지로 분리한다.