Projects/HubEleven

[리팩토링] Stock 도메인 리팩토링 (2)

annovation 2025. 12. 27. 22:06

Stock Entity - restoreQuantity 메서드 수정

💡수정 전

public void restoreQuantity(int restoreQuantity) {
    validateRestoreQuantity(restoreQuantity);

    if (restoreQuantity > 0) {
        this.quantity += restoreQuantity;
    }
}
  • validateRestoreQuantity가 이미 restoreQuantity < 1이면 예외를 던지므로,
    if (restoreQuantity > 0)는 절대 false가 될 수 없어서 중복

💡리팩토링

public void restoreQuantity(int restoreQuantity) {
    validateRestoreQuantity(restoreQuantity);
    this.quantity += restoreQuantity;
}
  • 중복되는 로직 제거

Stock Entity - 예외 코드 분리

💡수정 전

if (this.quantity < decreaseQuantity) {
    throw new GlobalException(DECREASE_QUANTITY_INVALID);
}
  • 현재는 재고 부족일 때도 DECREASE_QUANTITY_INVALID를 던지고 있다.
  • DECREASE_QUANTITY_INVALID : 입력값 자체가 잘못됨 (0 이하)
  • 재고 부족 : 입력값은 정상인데 “상태상 불가”

💡리팩토링

if (this.quantity < decreaseQuantity) {
    throw new GlobalException(StockErrorCode.INSUFFICIENT_STOCK);
}
  • INSUFFICIENT_STOCK 같은 별도 에러코드 추가

💡리팩토링 기대 효과

  • API 응답 메시지도 정확해지고 프론트/클라이언트 처리도 명확해진다.

Stock Entity - 생성 메서드 검증 누락 수정

💡수정 전

public static Stock create(UUID productId, UUID companyId, UUID hubId, int quantity) {
    validateProductId(productId);
    validateCompanyId(companyId);
    validateHubId(hubId);

    return Stock.builder()
            .productId(productId)
            .companyId(companyId)
            .hubId(hubId)
            .quantity(quantity)
            .build();
}
  • create()에서 quantity를 검증하지 않아, 지금은 quantity = -1로도 엔티티 생성이 가능하다.

💡리팩토링

public static Stock create(UUID productId, UUID companyId, UUID hubId, int quantity) {
    validateProductId(productId);
    validateCompanyId(companyId);
    validateHubId(hubId);
    validateInitialQuantity(quantity);

    return Stock.builder()
            .productId(productId)
            .companyId(companyId)
            .hubId(hubId)
            .quantity(quantity)
            .build();
}

private static void validateInitialQuantity(int quantity) {
    if (quantity < 0) {
        throw new GlobalException(StockErrorCode.INVALID_STOCK_QUANTITY);
    }
}
  • validateInitialQuantity() 메서드 로직을 추가해, 초기 재고가 0 이하인 경우 예외 처리한다.

Stock Entity - 접근 제어 수정

💡수정 전

 

validateDecreaseQuantity는 public
validateRestoreQuantity는 private
  • 둘 다 외부에서 호출될 이유가 없으니 private
  • 또한 이 검증은 객체 상태를 안 쓰므로 static으로도 가능

💡리팩토링

private static void validateDecreaseQuantity(int q) { ... }
private static void validateRestoreQuantity(int q) { ... }