-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[크리스마스 프로모션] 코드 리뷰 #3
base: review
Are you sure you want to change the base?
Changes from all commits
8d732d1
d33e450
76f1021
b1b6e4c
f2e956c
a298cd6
c853580
219b9ec
6b3d95f
2b219df
aac4092
6f31b08
9310269
a5a6d48
eec1792
4c8aebd
acba3a7
f54ed0d
64c83a4
48c6511
fd175e4
a46ec95
e68a44b
147e7b5
c9a8cc4
c8646ce
1681431
a6b0f80
db77872
43d2925
09e819c
4d3d15f
834e322
e037292
b1c264b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
# 미션 - 크리스마스 프로모션 | ||
<hr/> | ||
|
||
## 🔍 개요 및 목표 | ||
- 크리스마스 프로모션은 중복 가능한 할인과 증정, 배지 부여를 통한 예비 혜택의 기대 심리가 결합된 | ||
프로모션으로 중복된 할인과 증정을 허용해 고객 입장에서 혜택을 체감할 수 있어야 하며 주최측에서는 | ||
지난 5년 중 최고 판매 금액 달성과 참여 고객중 5%이상의 인원이 다음 프로모션에 재참여 할 수 | ||
있도록 유도하는 것을 목표로 한다. | ||
<hr/> | ||
|
||
## 📝 기능 목록 | ||
|
||
### 이벤트 | ||
#### 핵심 기능 1. 크리스마스 디데이 할인 | ||
- [x] 적용 기간: 2023.12.1 ~ 2023.12.25 (매일) | ||
- [x] 1000원 + ((날짜 - 1) * 100원) 중복 할인을 적용한다. | ||
#### 핵심 기능 2. 평일 할인 | ||
- [x] 적용 기간: 2023.12.1 ~ 2023.12.31 (일요일~목요일) | ||
- [x] (디저트 메뉴 총 주문 수량 * 2023)원 중복 할인을 적용한다. | ||
#### 핵심 기능 3. 주말할인 | ||
- [x] 적용 기간: 2023.12.1 ~ 2023.12.31 (금요일~토요일) | ||
- [x] (메인 메뉴 총 주문 수량 * 2023)원 중복 할인원 중복 할인을 적용한다. | ||
#### 핵심 기능 4. 특별 할인 | ||
- [x] 적용 기간: 2023.12.1 ~ 2023.12.31 (일요일, 크리스마스 당일) | ||
- [x] 총 주문 금액 1000원 중복 할인을 적용한다. | ||
#### 핵심 기능 5. 증정 이벤트 | ||
- [x] 적용 기간: 2023.12.1 ~ 2023.12.31 | ||
- [x] 할인 전 총 주문 금액이 12만 원 이상일 때, 샴페인 1개 증정한다. | ||
#### 핵심 기능 6. 배지 부여 | ||
- [x] 적용 기간: 2023.12.1 ~ 2023.12.31 | ||
- [x] 총 혜택 금액 5천 원 이상 : 별 | ||
- [x] 총 혜택 금액 1만 원 이상 : 트리 | ||
- [x] 총 혜택 금액 2만 원 이상 : 산타 | ||
#### 핵심 기능 7. 이벤트 적용 | ||
- [x] 총 주문 금액 10,000원 이상이면 핵심 기능 1, 2, 3, 4, 5, 6을 적용한다. | ||
|
||
### 입력 | ||
#### 입력 기능 1. 예상 방문 날짜 입력 | ||
- [x] 유효한 예상 방문 날짜를 입력한다. | ||
- [x] 예외 처리 | ||
- 양의 정수를 입력하지 않은 경우 | ||
- 1~31 범위에 해당하지 않는 경우 | ||
- 에러 메세지는 "[ERROR] 유효하지 않은 날짜입니다. 다시 입력해 주세요.” 로 통일한다. | ||
#### 입력 기능 2. 메뉴와 수량 입력 | ||
- [x] 유효한 메뉴와 수량을 입력한다. | ||
- [x] 예외 처리 | ||
- 공백인 경우 | ||
- 메뉴 형식에서 하이픈이 없는 경우 | ||
- 존재하지 않는 메뉴 이름을 입력한 경우 | ||
- 메뉴 형식의 수량이 양의 정수가 아닌 경우 | ||
- 메뉴의 수량이 1보다 적은 경우 | ||
- 입력한 주문의 총 수량이 20개를 초과한 경우 | ||
- 중복되는 메뉴 이름을 입력한 경우 | ||
- 음료 메뉴만 입력한 경우 | ||
- 에러 메세지는 “[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요." 로 통일한다. | ||
|
||
### 출력 | ||
#### 출력 기능 1. 혜택 미리 보기 | ||
- [x] 혜택 미리보기 안내 메세지 출력 | ||
- [x] <주문 메뉴> 출력 | ||
- 출력 순서는 메뉴의 에피타이저, 메인, 디저트, 음료 순서로 정렬하여 출력한다. | ||
- [x] <할인 전 총주문 금액> 출력 | ||
- [x] <증정 메뉴> 출력 | ||
- 증정 이벤트에 해당하지 않는 경우, 증정 메뉴 "없음"으로 출력한다. | ||
- [x] <혜택 내역> 출력 | ||
- 고객에게 적용된 이벤트 내역만 출력한다. | ||
- 적용된 이벤트가 하나도 없다면 혜택 내역 "없음"으로 출력한다. | ||
- 혜택 내역에 여러 개의 이벤트가 적용된 경우, 출력 순서는 핵심 기능 상위 순서부터 출력한다. | ||
- [x] <총헤택 금액> 출력 | ||
- 총혜택 금액 = 할인 금액의 합계 + 증정 메뉴의 가격 | ||
- [x] <할인 후 예상 결제 금액> 출력 | ||
- 할인 후 예상 결제 금액 = 할인 전 총주문 금액 - 할인 금액 | ||
- [x] <12월 이벤트 배지> 출력 | ||
- 총혜택 금액에 따라 이벤트 배지의 이름을 다르게 출력한다. | ||
- 이벤트 배지가 부여되지 않는 경우, "없음"으로 출력한다. | ||
<hr/> | ||
|
||
## 🕒 시스템 흐름 | ||
1. 고객이 식당에 방문할 날짜를 미리 선택해 입력한다. | ||
1) 예외 처리 후 유효한 입력을 customer의 visitDate에 저장한다. | ||
2. 고객이 식당에 주문할 메뉴를 미리 선택해 입력한다. | ||
1) 예외 처리 후 유효한 입력을 customer의 orderMenu에 저장한다. | ||
3. 이벤트 적용을 요청한다. | ||
1) 고객의 주문 금액이 10,000원 이상이면 요청에 대한 이벤트 적용 처리를 수행한다. | ||
2) 고객의 주문 금액이 10,000원 미만이면 요청에 대한 이벤트 적용 처리는 수행되지 않는다. | ||
4. 이벤트 플래너가 해당하는 미리보기 내용을 출력한다. | ||
1) 주문 메뉴 | ||
2) 할인 전 총주문 금액 | ||
3) 증정 메뉴 | ||
4) 혜택 내역 | ||
5) 총혜택 금액 | ||
6) 할인 후 예상 결제 금액 | ||
7) 12월 이벤트 배지 | ||
<hr/> | ||
|
||
## 🚨 구현 과정 주의 사항 | ||
- [x] 입력과 출력은 InputView, OutputView 클래스로 별도 구현한다. | ||
- [x] 적용된 이벤트가 하나도 없는 경우를 고려한다. | ||
- [x] 모든 에러 메시지는 "[ERROR]"로 시작한다. | ||
- [x] 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException를 발생시키고, | ||
"[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다. | ||
- [x] indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. | ||
- [x] 함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다. | ||
- [x] JUnit 5와 AssertJ를 이용해 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다. | ||
- [x] else 사용을 지양한다. | ||
- [x] 도메인 로직에 단위 테스트를 구현해야 한다. | ||
<hr/> | ||
|
||
## 🏁 목표 | ||
- [x] 테스트 주도 개발(TDD)로 구현한다. | ||
- [x] 테스트 코드에서 반복적으로 하는 부분을 중복되지 않게 한다. | ||
- [x] Enum Class 를 적극 활용한다. | ||
- [x] README를 구체적으로 작성하고 살아있는 문서 작성을 위해 노력한다. | ||
- [x] 필드의 수를 최소화한다. | ||
- [x] 객체는 객체스럽게 사용한다. | ||
- [x] 객체의 필드는 private으로 접근을 제한하고 val을 사용해 값의 변경을 제한한다. | ||
- [x] Controller가 아닌 InputView에서 입력을 처리한다. | ||
- [x] 예외 처리 과정에서 "^\\d+$" 를 통해 유효한 숫자를 검사한다. | ||
- [x] getter사용을 지양하기 위해 노력하며 객체에게 메세지를 던진다. | ||
<hr/> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
package christmas | ||
|
||
import christmas.controller.ChristmasController | ||
|
||
fun main() { | ||
TODO("프로그램 구현") | ||
ChristmasController().run() | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package christmas.controller | ||
|
||
import christmas.model.Customer | ||
import christmas.model.EventHelper | ||
import christmas.model.OrderItems | ||
import christmas.model.StoreMenu.Companion.sortOrderMenu | ||
import christmas.model.StoreMenu.Companion.splitOrderMenu | ||
import christmas.model.StoreMenu.Companion.splitOrderMenuForValidate | ||
import christmas.utils.Validate.validateOrderMenu | ||
import christmas.utils.Validate.validateVisitDate | ||
import christmas.view.InputView | ||
import christmas.view.OutputView | ||
|
||
class ChristmasController { | ||
private val input = InputView() | ||
private val output = OutputView() | ||
|
||
fun run() { | ||
output.printStartPlanner() | ||
val customer = Customer(inputVisitDate(), inputOrderMenu()) | ||
|
||
customer.requestApplyDecemberEvent() | ||
previewBenefit(customer, customer.getEventHelper()) | ||
} | ||
|
||
private fun inputVisitDate(): Int { | ||
return try { | ||
val visitDateInput = input.readVisitDate() | ||
validateVisitDate(visitDateInput) | ||
visitDateInput.toInt() | ||
} catch (e: IllegalArgumentException) { | ||
println(e.message) | ||
inputVisitDate() | ||
} | ||
} | ||
|
||
private fun inputOrderMenu(): List<OrderItems> { | ||
return try { | ||
val orderMenuInput = input.readOrderMenu() | ||
validateOrderMenu(splitOrderMenuForValidate(orderMenuInput)) | ||
splitOrderMenu(orderMenuInput) | ||
} catch (e: IllegalArgumentException) { | ||
println(e.message) | ||
inputOrderMenu() | ||
} | ||
} | ||
|
||
private fun previewBenefit(customer: Customer, eventHelper: EventHelper) { | ||
output.printPreviewAnnounce(customer.getVisitDate()) | ||
output.printOrderMenu(sortOrderMenu(customer.getOrderMenu())) | ||
output.printTotalOrderPrize(customer.calculateTotalOrderSum()) | ||
output.printFreebieMenu(eventHelper.getFreebie()) | ||
output.printBenefitDetails(eventHelper.getDiscountHistory(), eventHelper.getFreebie()) | ||
output.printBenefitAmount(eventHelper.calculateTotalBenefitAmount()) | ||
output.printPaymentAmount(customer.calculateTotalOrderSum(), eventHelper.getDiscountHistory()) | ||
output.printBadge(eventHelper.getBadge()) | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package christmas.model | ||
|
||
import christmas.utils.Constant.DISCOUNT_THRESHOLD | ||
import christmas.utils.Constant.EMPTY | ||
|
||
class Customer( | ||
private val visitDate: Int, | ||
private val orderMenu: List<OrderItems> | ||
) { | ||
private val eventHelper = EventHelper() | ||
|
||
fun getVisitDate(): Int = visitDate | ||
|
||
fun getOrderMenu(): List<OrderItems> = orderMenu | ||
|
||
fun getEventHelper(): EventHelper = eventHelper | ||
|
||
fun calculateTotalOrderSum(): Int { | ||
var totalOrderSum = EMPTY | ||
|
||
for (item in orderMenu) { | ||
val storeMenu = enumValues<StoreMenu>().first { menu -> menu.menuName == item.getMenuName() } | ||
totalOrderSum += storeMenu.menuPrice * item.getQuantity() | ||
} | ||
|
||
return totalOrderSum | ||
} | ||
|
||
fun requestApplyDecemberEvent() { | ||
if (calculateTotalOrderSum() >= DISCOUNT_THRESHOLD) | ||
eventHelper.applyDecemberEvent(visitDate, orderMenu, calculateTotalOrderSum()) | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package christmas.model | ||
|
||
enum class DecemberCalender(val dates: List<Int>) { | ||
WEEKDAY(listOf(3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 31)), | ||
WEEKEND(listOf(1, 2, 8, 9, 15, 16, 22, 23, 29, 30)), | ||
SPECIAL_DAY(listOf(3, 10, 17, 24, 25, 31)) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
package christmas.model | ||
|
||
import christmas.utils.Constant.BADGE_SANTA | ||
import christmas.utils.Constant.BADGE_STAR | ||
import christmas.utils.Constant.BADGE_TREE | ||
import christmas.utils.Constant.CHAMPAGNE_CONDITION_AMOUNT | ||
import christmas.utils.Constant.CHRISTMAS_DAY_DISCOUNT_AMOUNT | ||
import christmas.utils.Constant.DAILY_DISCOUNT_AMOUNT | ||
import christmas.utils.Constant.FIRST_DAY_DISCOUNT_AMOUNT | ||
import christmas.utils.Constant.EMPTY | ||
import christmas.utils.Constant.NONE | ||
import christmas.utils.Constant.ONE_DAY_DECREASE | ||
import christmas.utils.Constant.SANTA_MIN | ||
import christmas.utils.Constant.STAR_MAX | ||
import christmas.utils.Constant.STAR_MIN | ||
import christmas.utils.Constant.TREE_MAX | ||
import christmas.utils.Constant.TREE_MIN | ||
import christmas.utils.Constant.WEEK_DISCOUNT_AMOUNT | ||
|
||
class DecemberEvent { | ||
fun applyTheDayDiscount(date: Int): Int { | ||
val dailyDiscount = (date - ONE_DAY_DECREASE) * DAILY_DISCOUNT_AMOUNT | ||
|
||
return FIRST_DAY_DISCOUNT_AMOUNT + dailyDiscount | ||
} | ||
|
||
fun applyWeekdayDiscount(orderMenu: List<OrderItems>): Int { | ||
var dessertMenuCount = EMPTY | ||
|
||
for (item in orderMenu) { | ||
val increaseCount = increaseDessertMenuCount(item.getMenuName(), item.getQuantity()) | ||
dessertMenuCount += increaseCount | ||
} | ||
Comment on lines
+30
to
+33
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 만약에 제가 kotlin api를 활용햇 해당 메서드를 구현한다면,
이렇게 하면 메서드 하나로 디저트 메뉴 개수를 구할수도 있어요!! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 제시해주신 코드가 확실히 간결하고 코틀린스러워 보이네요! 앞으로의 과정에서는 코틀린에 대한 학습 시간을 일정 시간 지정해서 스스로 숙련도를 향상시킬 필요가 있을 것 같아요. 리뷰 감사합니다 :) |
||
|
||
return dessertMenuCount * WEEK_DISCOUNT_AMOUNT | ||
} | ||
|
||
private fun increaseDessertMenuCount(menuName: String, quantity: Int): Int { | ||
if (menuName == StoreMenu.CHOCO_CAKE.menuName || menuName == StoreMenu.ICE_CREAM.menuName) | ||
return quantity | ||
|
||
return EMPTY | ||
} | ||
|
||
|
||
fun applyWeekendDiscount(orderMenu: List<OrderItems>): Int { | ||
var mainMenuCount = EMPTY | ||
|
||
for (item in orderMenu) { | ||
val increaseCount = increaseMainMenuCount(item.getMenuName(), item.getQuantity()) | ||
mainMenuCount += increaseCount | ||
} | ||
|
||
return mainMenuCount * WEEK_DISCOUNT_AMOUNT | ||
} | ||
|
||
private fun increaseMainMenuCount(menuName: String, quantity: Int): Int { | ||
if (menuName == StoreMenu.T_BONE_STEAK.menuName || menuName == StoreMenu.BBQ_RIBS.menuName || | ||
menuName == StoreMenu.SEAFOOD_PASTA.menuName || menuName == StoreMenu.CHRISTMAS_PASTA.menuName | ||
) | ||
Comment on lines
+58
to
+60
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코틀린 코딩 컨벤션에서는 의무 사항은 아니지만, 3개 이상의 조건에 대해서는 when의 사용을 권장합니다. 만약 if를 사용하고 싶으시다면, 가독성 적인 측면을 위해서 각각 조건에 대해 여러 줄로 나누시는 등의 방법으로 가독성을 높이는 것이 좋을 것 같습니다. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 으악,,가독성을 많이 신경 쓴 미션이었는데 놓친 부분이 있었네요. 말씀해주신 방법들도 ELSE를 지양할 수 있다는 가정하에 고려해볼 수 있을 것 같아요. 지금 드는 생각은 메인 메뉴들을 맵이나 리스트로 그룹화하고 조건 검사를 진행했다면 한번의 검사로도 충분히 동일한 처리를 했을 수 있을 거 같아요..다른 클래스에서는 동일한 방법으로 리팩토링을 진행했기 때문에 아쉬움이 많이 남는 부분이네요..리뷰 감사합니다 :)
Comment on lines
+58
to
+60
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이렇게 조건이 많을 경우에는,
이렇게 하면 좀더 간단히 작성할 수 있어요!! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 제시해주신 코드가 확실히 개선된 코드인 거 같아요. 사실 방법을 알고도 반복되는 리팩토링 속에서 해당 부분을 놓쳣다는게 아쉬움을 많이 남겼습니다.. 깔끔한 코드와 리뷰 감사합니다 :) |
||
return quantity | ||
|
||
return EMPTY | ||
} | ||
|
||
fun applySpecialDiscount(): Int = CHRISTMAS_DAY_DISCOUNT_AMOUNT | ||
|
||
fun presentChampagne(totalOrderAmount: Int): Boolean = totalOrderAmount >= CHAMPAGNE_CONDITION_AMOUNT | ||
|
||
fun assignBadge(benefitAmount: Int): String { | ||
when { | ||
benefitAmount in STAR_MIN..STAR_MAX -> return BADGE_STAR | ||
benefitAmount in TREE_MIN..TREE_MAX -> return BADGE_TREE | ||
benefitAmount >= SANTA_MIN -> return BADGE_SANTA | ||
} | ||
Comment on lines
+70
to
+75
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아마 이렇게 작성하신 이유가, 그냥 >= 기호만 사용하면 STAR 배지만 return 되어서 그런거 같은데,
이렇게 거꾸로 작성하면 문제를 해결할 수 있습니다! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아 동작 순서에 따라서 또 다르게 작성될 수 있네요. 제시 해주신 코드처럼 낮은 금액보다는 높은 금액부터 검사하는 것이 처리 과정을 확실히 줄일 수 있겠다는 생각이 들어요! 많은 부분에서 도움을 받게 된 것 같아요.. 정말 감사합니다! |
||
|
||
return NONE | ||
Comment on lines
+71
to
+77
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이거 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 미션의 요구 사항에 'else를 지양한다.'는 사항에 대해서 가독성은 유지함과 동시에 else를 사용하지 않는 방법에 대하여 고민하고 작성했던 코드인 것 같습니다. 제시해주신 return when도 구현 과정에서 고려했었지만 최종적으로는 when을 사용하게 되었던 것 같아요. else를 지양하면서 더 나은 가독성을 갖출 수 있는 방법을 더 고민해봐야 될 것 같습니다! 리뷰 감사합니다 :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 헉 저도모르게 when문 안에 들어있는 else는 if-else랑 다르다고 생각을 하고 있었습니다..! 제가 놓친 부분을 짚어주셔서 감사하네요! |
||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package christmas.model | ||
|
||
import christmas.utils.Constant.CHRISTMAS_DAY | ||
import christmas.utils.Constant.EMPTY | ||
|
||
enum class DiscountType(val eventName: String) { | ||
THE_DAY_DISCOUNT("크리스마스 디데이 할인"), | ||
WEEKDAY_DISCOUNT("평일 할인"), | ||
WEEKEND_DISCOUNT("주말 할인"), | ||
SPECIAL_DISCOUNT("특별 할인"); | ||
|
||
companion object { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. enum class 속 companion object는 어떤 역할을 하나요? 잘 몰라서 물어봅니다 😓 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 답변을 드리고자 내용을 작성하였는데..코드 자체적으로도 단일 책임 원칙에 관해 더 고려할 부분이 있어 보이고 혹시나 제 답변이 사실과 다른 내용이 포함된다면 학습에 혼란을 드릴 수 있을 것 같아 잘 설명된 링크를 첨부합니다! 큰 도움을 드리지 못해 죄송합니다.. |
||
private val decemberEvent = DecemberEvent() | ||
|
||
fun requestTheDayDiscount(visitDate: Int): Int { | ||
if (visitDate <= CHRISTMAS_DAY) | ||
return decemberEvent.applyTheDayDiscount(visitDate) | ||
|
||
return EMPTY | ||
} | ||
|
||
fun requestWeekdayDiscount(visitDate: Int, orderMenu: List<OrderItems>): Int { | ||
if (visitDate in DecemberCalender.WEEKDAY.dates) | ||
return decemberEvent.applyWeekdayDiscount(orderMenu) | ||
|
||
return EMPTY | ||
} | ||
|
||
fun requestWeekendDiscount(visitDate: Int, orderMenu: List<OrderItems>): Int { | ||
if (visitDate in DecemberCalender.WEEKEND.dates) | ||
return decemberEvent.applyWeekendDiscount(orderMenu) | ||
|
||
return EMPTY | ||
} | ||
|
||
fun requestSpecialDiscount(visitDate: Int): Int { | ||
if (visitDate in DecemberCalender.SPECIAL_DAY.dates) | ||
return decemberEvent.applySpecialDiscount() | ||
|
||
return EMPTY | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이름에 맞게 검증이 완료되면 검증이 완료된 값을 뱉는건 어떨까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
validateVisitDate(visitDateInput) 예외 처리 과정에서 IllegalArgumentException이 발생하지 않는다면 입력이 유효한 것이기 때문에 따로 변수를 선언하여 불필요한 메모리 할당을 하지 않고 Int로만 변환하여 return 해도 될 것이라고 생각하고 작성했던 코드인 것 같습니다. validateVisitDate() 함수는 예외 처리에 관한 함수이기 때문에 역할과 책임에 대해서도 고민하고 작성했던 것 같긴 하지만 제시해주신 의견대로 validateVisitDate()에 return type을 지정하여서 return 값을 가지는 것도 하나의 방법이 될 수 있을 것 같아요! 감사합니다 :)