ewhk9887/korean_code_reviews_from_github huggingface dataset:
@@ -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
+        }
+
+        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
+        )
+            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
+        }
+
+        return NONE
+    }
+}
\ No newline at end of file

리뷰: 이렇게 조건이 많을 경우에는,
```
val mainMenus = listOf(StoreMenu.T_BONE_STEAK.menuName....)
if (mainMenus.contains(menu)) { 
    return quantity
}
```
이렇게 하면 좀더 간단히 작성할 수 있어요!!
@@ -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
+        }
+
+        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
+        )
+            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
+        }
+
+        return NONE
+    }
+}
\ No newline at end of file

리뷰: 아마 이렇게 작성하신 이유가, 그냥 >= 기호만 사용하면 STAR 배지만 return 되어서 그런거 같은데,
```
when {
    benefitAmount >= 20000 -> retrun BADGE_SANTA
    benefitAmount >= 10000 -> retrun BADGE_TREE
    benefitAmount >= 5000 -> retrun BADGE_STAR
}
```
이렇게 거꾸로 작성하면 문제를 해결할 수 있습니다!
@@ -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
+        }
+
+        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
+        )
+            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
+        }
+
+        return NONE
+    }
+}
\ No newline at end of file

리뷰: 미션의 요구 사항에 'else를 지양한다.'는 사항에 대해서 가독성은 유지함과 동시에 else를 사용하지 않는 방법에 대하여 고민하고 작성했던 코드인 것 같습니다. 제시해주신 return when도 구현 과정에서 고려했었지만 최종적으로는 when을 사용하게 되었던 것 같아요. else를 지양하면서 더 나은 가독성을 갖출 수 있는 방법을 더 고민해봐야 될 것 같습니다! 리뷰 감사합니다 :)
@@ -0,0 +1,59 @@
+package christmas.utils
+
+object Constant {
+    /* Model */
+    const val FIRST_DAY_DISCOUNT_AMOUNT = 1_000
+    const val DAILY_DISCOUNT_AMOUNT = 100
+    const val ONE_DAY_DECREASE = 1
+    const val WEEK_DISCOUNT_AMOUNT = 2_023
+    const val CHRISTMAS_DAY_DISCOUNT_AMOUNT = 1_000
+    const val CHAMPAGNE_CONDITION_AMOUNT = 120_000
+    const val CHRISTMAS_DAY = 25
+    const val DISCOUNT_THRESHOLD = 10_000
+    const val EMPTY = 0
+    const val BADGE_STAR = "별"
+    const val BADGE_TREE = "트리"
+    const val BADGE_SANTA = "산타"
+    const val NONE = "없음"
+    const val STAR_MIN = 5_000
+    const val STAR_MAX = 9_999
+    const val TREE_MIN = 10_000
+    const val TREE_MAX = 19_999
+    const val SANTA_MIN = 20_000
+    const val FIRST_INDEX = 0
+    const val SECOND_INDEX = 1
+
+    /* Validate */
+    const val ORDER_ITEMS_SIZE = 2
+    const val VISIT_DATE_MIN = 1
+    const val VISIT_DATE_MAX = 31
+    const val QUANTITY_MINIMUM = 1
+    const val QUANTITY_MAXIMUM = 20
+    const val HYPHEN = "-"
+    const val COMMA = ","
+    const val NUMERIC_REGEX = "^\\d+$"
+    private const val ERROR_MESSAGE_PREFIX = "[ERROR] "
+    const val ERROR_MESSAGE_INPUT_VISIT_DATE = ERROR_MESSAGE_PREFIX + "유효하지 않은 날짜입니다. 다시 입력해 주세요."
+    const val ERROR_MESSAGE_INPUT_MENU = ERROR_MESSAGE_PREFIX + "유효하지 않은 주문입니다. 다시 입력해 주세요."
+
+    /* InputView */
+    const val VISIT_DATE_ANNOUNCE_MESSAGE = "12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!)"
+    const val MENU_ANNOUNCE_MESSAGE = "주문하실 메뉴를 메뉴와 개수를 알려 주세요. (e.g. 해산물파스타-2,레드와인-1,초코케이크-1)"
+
+    /* OutPutView */
+    private const val PRINT_ENTER = "\n"
+    const val START_PLANNER_MESSAGE = "안녕하세요! 우테코 식당 12월 이벤트 플래너입니다."
+    const val PREVIEW_ANNOUNCE_MESSAGE = "12월 %d일에 우테코 식당에서 받을 이벤트 혜택 미리 보기!"
+    const val ORDER_MENU_TITLE_MESSAGE = "$PRINT_ENTER<주문 메뉴>"
+    const val ITEMS_RESULT = "%s %d개"
+    const val TOTAL_ORDER_SUM_TITLE_MESSAGE = "$PRINT_ENTER<할인 전 총주문 금액>"
+    const val TOTAL_AMOUNT_RESULT = "%,d원"
+    const val PRESENT_MENU_TITLE_MESSAGE = "$PRINT_ENTER<증정 메뉴>"
+    const val PRESENT_AMOUNT = 1
+    const val BENEFIT_DETAILS_TITLE_MESSAGE = "$PRINT_ENTER<혜택 내역>"
+    const val FREEBIE_EVENT_NAME = "증정 이벤트"
+    const val BENEFIT_RESULT = "%s: -%,d원"
+    const val BENEFIT_AMOUNT_TITLE_MESSAGE = "$PRINT_ENTER<총혜택 금액>"
+    const val PAYMENT_AMOUNT_TITLE_MESSAGE = "$PRINT_ENTER<할인 후 예상 결제 금액>"
+    const val BADGE_TITLE_MESSAGE = "$PRINT_ENTER<12월 이벤트 배지>"
+}
\ No newline at end of file

리뷰: 작성해주신 코드도 매우 깔끔하고 가독성이 높아 보여요! 에러 메세지들이 연관성이 있는 상수들이지만 Enum Class도 하나의 모델로 구성했기 때문에 객체를 증가시키기 보다는 다음과 같이 상수화 처리만 하였던 것인데  에러 메세지들을 더 명확하게 분류하는 방법이 아직 많이 부족한 것은 사실인 것 같습니다. 구성과 설계, 가독성을 높이는 방법에 대해 더 학습해보겠습니다. 리뷰 감사합니다 :)
@@ -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 {
+        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
+        }
+    }
+}
\ No newline at end of file

리뷰: 답변을 드리고자 내용을 작성하였는데..코드 자체적으로도 단일 책임 원칙에 관해 더 고려할 부분이 있어 보이고 혹시나 제 답변이 사실과 다른 내용이 포함된다면 학습에 혼란을 드릴 수 있을 것 같아 잘 설명된 링크를 첨부합니다! 큰 도움을 드리지 못해 죄송합니다.. 
링크 1. https://kotlinlang.org/docs/object-declarations.html#companion-objects
링크 2. https://www.baeldung.com/kotlin/enum-static-method
@@ -0,0 +1,59 @@
+package christmas.utils
+
+object Constant {
+    /* Model */
+    const val FIRST_DAY_DISCOUNT_AMOUNT = 1_000
+    const val DAILY_DISCOUNT_AMOUNT = 100
+    const val ONE_DAY_DECREASE = 1
+    const val WEEK_DISCOUNT_AMOUNT = 2_023
+    const val CHRISTMAS_DAY_DISCOUNT_AMOUNT = 1_000
+    const val CHAMPAGNE_CONDITION_AMOUNT = 120_000
+    const val CHRISTMAS_DAY = 25
+    const val DISCOUNT_THRESHOLD = 10_000
+    const val EMPTY = 0
+    const val BADGE_STAR = "별"
+    const val BADGE_TREE = "트리"
+    const val BADGE_SANTA = "산타"
+    const val NONE = "없음"
+    const val STAR_MIN = 5_000
+    const val STAR_MAX = 9_999
+    const val TREE_MIN = 10_000
+    const val TREE_MAX = 19_999
+    const val SANTA_MIN = 20_000
+    const val FIRST_INDEX = 0
+    const val SECOND_INDEX = 1
+
+    /* Validate */
+    const val ORDER_ITEMS_SIZE = 2
+    const val VISIT_DATE_MIN = 1
+    const val VISIT_DATE_MAX = 31
+    const val QUANTITY_MINIMUM = 1
+    const val QUANTITY_MAXIMUM = 20
+    const val HYPHEN = "-"
+    const val COMMA = ","
+    const val NUMERIC_REGEX = "^\\d+$"
+    private const val ERROR_MESSAGE_PREFIX = "[ERROR] "
+    const val ERROR_MESSAGE_INPUT_VISIT_DATE = ERROR_MESSAGE_PREFIX + "유효하지 않은 날짜입니다. 다시 입력해 주세요."
+    const val ERROR_MESSAGE_INPUT_MENU = ERROR_MESSAGE_PREFIX + "유효하지 않은 주문입니다. 다시 입력해 주세요."
+
+    /* InputView */
+    const val VISIT_DATE_ANNOUNCE_MESSAGE = "12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!)"
+    const val MENU_ANNOUNCE_MESSAGE = "주문하실 메뉴를 메뉴와 개수를 알려 주세요. (e.g. 해산물파스타-2,레드와인-1,초코케이크-1)"
+
+    /* OutPutView */
+    private const val PRINT_ENTER = "\n"
+    const val START_PLANNER_MESSAGE = "안녕하세요! 우테코 식당 12월 이벤트 플래너입니다."
+    const val PREVIEW_ANNOUNCE_MESSAGE = "12월 %d일에 우테코 식당에서 받을 이벤트 혜택 미리 보기!"
+    const val ORDER_MENU_TITLE_MESSAGE = "$PRINT_ENTER<주문 메뉴>"
+    const val ITEMS_RESULT = "%s %d개"
+    const val TOTAL_ORDER_SUM_TITLE_MESSAGE = "$PRINT_ENTER<할인 전 총주문 금액>"
+    const val TOTAL_AMOUNT_RESULT = "%,d원"
+    const val PRESENT_MENU_TITLE_MESSAGE = "$PRINT_ENTER<증정 메뉴>"
+    const val PRESENT_AMOUNT = 1
+    const val BENEFIT_DETAILS_TITLE_MESSAGE = "$PRINT_ENTER<혜택 내역>"
+    const val FREEBIE_EVENT_NAME = "증정 이벤트"
+    const val BENEFIT_RESULT = "%s: -%,d원"
+    const val BENEFIT_AMOUNT_TITLE_MESSAGE = "$PRINT_ENTER<총혜택 금액>"
+    const val PAYMENT_AMOUNT_TITLE_MESSAGE = "$PRINT_ENTER<할인 후 예상 결제 금액>"
+    const val BADGE_TITLE_MESSAGE = "$PRINT_ENTER<12월 이벤트 배지>"
+}
\ No newline at end of file

리뷰: 와 이렇게 작성한다면 정말 깔끔해질 것 같아요! 저한테 꼭 필요한 학습 부분이었습니다. 다음 코드부터 적용해 확실히 개선해보겠습니다!  리뷰 감사드립니다 :)
@@ -0,0 +1,10 @@
+package christmas.model
+
+data class OrderItems(
+    private val menuName: String,
+    private val quantity: Int
+) {
+    fun getMenuName(): String = menuName
+
+    fun getQuantity(): Int = quantity
+}

리뷰: 3주차 공통 피드백에도 포함되어 있는 내용인데 val은 값을 불변으로 제한하고자 하는 의도이고 private은 객체의 상태 접근을 제한하는 의도라고 생각하였습니다! 값의 수정을 막는 것도 중요하지만 private 접근 제한을 통해 객체를 확실하게 보호하고자 하는 의도에 작성하게 코드인 것 같아요. 리뷰 감사합니다 :)
@@ -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
+        }
+
+        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
+        )
+            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
+        }
+
+        return NONE
+    }
+}
\ No newline at end of file

리뷰: 제시해주신 코드가 확실히 간결하고 코틀린스러워 보이네요! 앞으로의 과정에서는 코틀린에 대한 학습 시간을 일정 시간 지정해서 스스로 숙련도를 향상시킬 필요가 있을 것 같아요. 리뷰 감사합니다 :)
@@ -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
+        }
+
+        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
+        )
+            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
+        }
+
+        return NONE
+    }
+}
\ No newline at end of file

리뷰: 제시해주신 코드가 확실히 개선된 코드인 거 같아요. 사실 방법을 알고도 반복되는 리팩토링 속에서 해당 부분을 놓쳣다는게 아쉬움을 많이 남겼습니다.. 깔끔한 코드와 리뷰 감사합니다 :)