728x90
쇼핑몰 주문 시스템을 파일과 패키지로 구조화하면 유지보수와 확장성이 좋아집니다. 다음과 같은 패키지 구조를 추천합니다.
📂 패키지 구조
com.shoppingmall
├── order
│ ├── Order.java # 주문 추상 클래스
│ ├── RegularOrder.java # 일반 주문 클래스
│ ├── PreOrder.java # 예약 주문 클래스
│ ├── SubscriptionOrder.java # 정기 구독 주문 클래스
├── service
│ ├── OrderService.java # 주문 서비스 (추후 주문 관리 기능 추가)
├── main
│ ├── ShoppingMallOrderSystem.java # 메인 실행 클래스
📌 1. com.shoppingmall.order 패키지
Order.java (추상 클래스)
package com.shoppingmall.order;
public abstract class Order {
protected String orderId;
protected String customerName;
protected String orderDate;
protected double totalAmount;
public Order(String orderId, String customerName, String orderDate, double totalAmount) {
this.orderId = orderId;
this.customerName = customerName;
this.orderDate = orderDate;
this.totalAmount = totalAmount;
}
public void printOrderDetails() {
System.out.println("주문 ID: " + orderId);
System.out.println("고객명: " + customerName);
System.out.println("주문일: " + orderDate);
System.out.println("총 금액: " + totalAmount);
}
public abstract void processPayment();
public abstract void updateOrderStatus();
}
RegularOrder.java
package com.shoppingmall.order;
public class RegularOrder extends Order {
public RegularOrder(String orderId, String customerName, String orderDate, double totalAmount) {
super(orderId, customerName, orderDate, totalAmount);
}
@Override
public void processPayment() {
System.out.println("일반 주문 - 카드 결제 완료");
}
@Override
public void updateOrderStatus() {
System.out.println("일반 주문 - 배송 준비 중");
}
}
PreOrder.java
package com.shoppingmall.order;
public class PreOrder extends Order {
private String expectedDeliveryDate;
public PreOrder(String orderId, String customerName, String orderDate, double totalAmount, String expectedDeliveryDate) {
super(orderId, customerName, orderDate, totalAmount);
this.expectedDeliveryDate = expectedDeliveryDate;
}
@Override
public void processPayment() {
System.out.println("예약 주문 - 부분 결제 완료");
}
@Override
public void updateOrderStatus() {
System.out.println("예약 주문 - 상품 준비 중 (예상 배송일: " + expectedDeliveryDate + ")");
}
}
SubscriptionOrder.java
package com.shoppingmall.order;
public class SubscriptionOrder extends Order {
private int subscriptionPeriod;
public SubscriptionOrder(String orderId, String customerName, String orderDate, double totalAmount, int subscriptionPeriod) {
super(orderId, customerName, orderDate, totalAmount);
this.subscriptionPeriod = subscriptionPeriod;
}
@Override
public void processPayment() {
System.out.println("정기 구독 - 매월 자동 결제");
}
@Override
public void updateOrderStatus() {
System.out.println("정기 구독 - 활성 상태 (" + subscriptionPeriod + "개월)");
}
}
📌 2. com.shoppingmall.service 패키지
OrderService.java (주문 관리 서비스)
package com.shoppingmall.service;
import com.shoppingmall.order.Order;
import java.util.ArrayList;
import java.util.List;
public class OrderService {
private List<Order> orderList = new ArrayList<>();
public void addOrder(Order order) {
orderList.add(order);
System.out.println("주문이 추가되었습니다: " + order.orderId);
}
public void processAllOrders() {
for (Order order : orderList) {
order.processPayment();
order.updateOrderStatus();
}
}
}
📌 3. com.shoppingmall.main 패키지
ShoppingMallOrderSystem.java (메인 실행 클래스)
package com.shoppingmall.main;
import com.shoppingmall.order.*;
import com.shoppingmall.service.OrderService;
public class ShoppingMallOrderSystem {
public static void main(String[] args) {
Order regularOrder = new RegularOrder("ORD001", "김철수", "2025-02-19", 50000);
Order preOrder = new PreOrder("ORD002", "이영희", "2025-02-19", 70000, "2025-03-10");
Order subscriptionOrder = new SubscriptionOrder("ORD003", "박민수", "2025-02-19", 20000, 6);
OrderService orderService = new OrderService();
orderService.addOrder(regularOrder);
orderService.addOrder(preOrder);
orderService.addOrder(subscriptionOrder);
System.out.println("\n=== 모든 주문 처리 시작 ===");
orderService.processAllOrders();
}
}
✅ 정리
이렇게 패키지를 분리하면 코드의 역할이 명확해지고 유지보수가 쉬워집니다.
- order 패키지: 주문 관련 클래스
- service 패키지: 주문 관리 서비스
- main 패키지: 실행 클래스
이제 추가적인 기능(예: 데이터베이스 연결, REST API)을 구현할 때도 패키지를 확장하여 관리할 수 있습니다.
728x90
'개발 > 자바' 카테고리의 다른 글
| Java Enum을 활용한 전략 패턴(Strategy Pattern) 구현 (0) | 2025.02.20 |
|---|---|
| Java Enum에서 인터페이스 구현하기 (0) | 2025.02.20 |
| OCP(Open-Closed Principle), SRP(Single Responsibility Principle) (0) | 2025.02.19 |
| 전략 패턴(Strategy Pattern)과 방문자 패턴(Visitor Pattern) (0) | 2025.02.19 |
| Java instanceof 활용 및 문제점 (0) | 2025.02.19 |