@@ -0,0 +1,82 @@
+package christmas.view
+
+import christmas.model.DiscountType
+import christmas.model.OrderItems
+import christmas.model.StoreMenu
+import christmas.utils.Constant.BADGE_TITLE_MESSAGE
+import christmas.utils.Constant.BENEFIT_AMOUNT_TITLE_MESSAGE
+import christmas.utils.Constant.BENEFIT_DETAILS_TITLE_MESSAGE
+import christmas.utils.Constant.BENEFIT_RESULT
+import christmas.utils.Constant.FREEBIE_EVENT_NAME
+import christmas.utils.Constant.EMPTY
+import christmas.utils.Constant.ITEMS_RESULT
+import christmas.utils.Constant.NONE
+import christmas.utils.Constant.ORDER_MENU_TITLE_MESSAGE
+import christmas.utils.Constant.PAYMENT_AMOUNT_TITLE_MESSAGE
+import christmas.utils.Constant.PRESENT_AMOUNT
+import christmas.utils.Constant.PRESENT_MENU_TITLE_MESSAGE
+import christmas.utils.Constant.PREVIEW_ANNOUNCE_MESSAGE
+import christmas.utils.Constant.START_PLANNER_MESSAGE
+import christmas.utils.Constant.TOTAL_AMOUNT_RESULT
+import christmas.utils.Constant.TOTAL_ORDER_SUM_TITLE_MESSAGE
+
+class OutputView {
+    fun printStartPlanner() {
+        println(START_PLANNER_MESSAGE)
+    }
+
+    fun printPreviewAnnounce(visitDate: Int) {
+        println(PREVIEW_ANNOUNCE_MESSAGE.format(visitDate))
+    }
+
+    fun printOrderMenu(orderMenu: List<OrderItems>) {
+        println(ORDER_MENU_TITLE_MESSAGE)
+        orderMenu.forEach { items ->
+            println(ITEMS_RESULT.format(items.getMenuName(), items.getQuantity()))
+        }
+    }
+
+    fun printTotalOrderPrize(totalOrderSum: Int) {
+        println(TOTAL_ORDER_SUM_TITLE_MESSAGE)
+        println(TOTAL_AMOUNT_RESULT.format(totalOrderSum))
+
+    }
+
+    fun printFreebieMenu(freebie: Boolean) {
+        println(PRESENT_MENU_TITLE_MESSAGE)
+        when {
+            freebie -> println(ITEMS_RESULT.format(StoreMenu.CHAMPAGNE.menuName, PRESENT_AMOUNT))
+            !freebie -> println(NONE)
+        }
+    }
+
+    fun printBenefitDetails(discountHistory: List<Pair<DiscountType, Int>>, freebie: Boolean) {
+        val discountHistoryExist = discountHistory.filter { it.second != EMPTY }
+
+        println(BENEFIT_DETAILS_TITLE_MESSAGE)
+        discountHistoryExist.forEach { (discountType, discountAmount) ->
+            println(BENEFIT_RESULT.format(discountType.eventName, discountAmount))
+        }
+
+        if(freebie)
+            println(BENEFIT_RESULT.format(FREEBIE_EVENT_NAME, StoreMenu.CHAMPAGNE.menuPrice))
+
+        if(discountHistoryExist.isEmpty() && !freebie)
+            println(NONE)
+    }
+
+    fun printBenefitAmount(totalBenefitAmount: Int) {
+        println(BENEFIT_AMOUNT_TITLE_MESSAGE)
+        println(TOTAL_AMOUNT_RESULT.format(EMPTY - totalBenefitAmount))
+    }
+
+    fun printPaymentAmount(totalOrderSum: Int, discountHistory: List<Pair<DiscountType, Int>>) {
+        println(PAYMENT_AMOUNT_TITLE_MESSAGE)
+        println(TOTAL_AMOUNT_RESULT.format(totalOrderSum - discountHistory.sumOf { it.second }))
+    }
+
+    fun printBadge(badge: String) {
+        println(BADGE_TITLE_MESSAGE)
+        println(badge)
+    }
+}
\ No newline at end of file

리뷰: 이 부분은 else를 지양해야한다는 요구사항때문에 고민이 많았었는데, 저는 그래도 코딩 컨벤션을 지키는게 좋을거 같아서 if else 문을 사용했습니다! 이 부분은 사람마다 관점이 다를거 같아서 그냥 참고만 해주세요!!
[관련 컨벤션 링크](https://kotlinlang.org/docs/coding-conventions.html#if-versus-when)입니다!!