@@ -0,0 +1,91 @@
+package christmas.Controller;
+
+import christmas.Domain.EventBenefitSettler;
+import christmas.Domain.EventPlanner;
+import christmas.Event.EventBadge;
+import christmas.View.InputView;
+import christmas.View.OutputView;
+import java.util.Map;
+
+public class EventController {
+    public EventPlanner eventPlanner;
+    public EventBenefitSettler eventBenefitSettler;
+
+    public void eventStart() {
+        OutputView.printWelcomeMessage();
+        takeVisitDate();
+
+        takeOrder();
+
+        int preDiscountTotalOrderPrice = handlePreDiscountTotalOrderPrice();
+
+        handleBenefit(preDiscountTotalOrderPrice);
+    }
+
+    public void takeVisitDate() {
+        try {
+            String visitDate = InputView.readVisitDate();
+            eventBenefitSettler = new EventBenefitSettler(visitDate);
+        } catch (NumberFormatException e) {
+            OutputView.printException(e);
+            takeVisitDate();
+        } catch (IllegalArgumentException e) {
+            OutputView.printException(e);
+            takeVisitDate();
+        }
+    }
+
+    public void takeOrder() {
+        try {
+            String orderMenu = InputView.readMenuOrder();
+            eventPlanner = new EventPlanner(orderMenu);
+            OutputView.printOrderMenu(orderMenu);
+        } catch (NumberFormatException e) {
+            OutputView.printException(e);
+            takeOrder();
+        } catch (IllegalArgumentException e) {
+            OutputView.printException(e);
+            takeOrder();
+        }
+    }
+
+    public void handleBenefit(int preDiscountTotalOrderPrice) {
+        Map<String, Integer> categoryCount = eventPlanner.calculateCategoryCount();
+
+        Map<String, Integer> receivedBenefits = handleReceivedBenefits(categoryCount, preDiscountTotalOrderPrice);
+        int benefitsTotalAmount = handlebenefitsTotalAmount(receivedBenefits);
+        handleDiscountedTotalAmount(receivedBenefits, preDiscountTotalOrderPrice);
+        handleEventBadge(benefitsTotalAmount);
+    }
+
+    public Map<String, Integer> handleReceivedBenefits(Map<String, Integer> categoryCount, int preDiscountTotalOrderPrice){
+        Map<String, Integer> receivedBenefits = eventBenefitSettler.calculateReceivedBenefits(categoryCount,
+                preDiscountTotalOrderPrice);
+        OutputView.printReceivedBenefits(receivedBenefits);
+        return receivedBenefits;
+    }
+
+    public int handlebenefitsTotalAmount(Map<String, Integer> receivedBenefits){
+        int benefitsTotalAmount = eventBenefitSettler.caculateBenefitsTotalAmount(receivedBenefits);
+        OutputView.printBenefitsTotalAmount(benefitsTotalAmount);
+        return benefitsTotalAmount;
+    }
+
+    public void handleDiscountedTotalAmount(Map<String, Integer> receivedBenefits, int preDiscountTotalOrderPrice){
+        int discountedTotalAmount = eventBenefitSettler.calculateDiscountedTotalAmount(receivedBenefits,
+                preDiscountTotalOrderPrice);
+        OutputView.printDiscountedTotalAmount(discountedTotalAmount);
+    }
+
+    public void handleEventBadge(int benefitsTotalAmount){
+        String eventBadgeType = EventBadge.findMyEventBadgeType(benefitsTotalAmount);
+        OutputView.printEventBadgeType(eventBadgeType);
+    }
+
+    public int handlePreDiscountTotalOrderPrice() {
+        int preDiscountTotalOrderPrice = eventPlanner.calculatePreDiscountTotalOrderPrice();
+        OutputView.printPreDicountTotalOrderPrice(preDiscountTotalOrderPrice);
+        OutputView.printGiftMenu(preDiscountTotalOrderPrice);
+        return preDiscountTotalOrderPrice;
+    }
+}

리뷰: ```suggestion
    public void takeVisitDate() {
        try {
            String visitDate = InputView.readVisitDate();
            eventBenefitSettler = new EventBenefitSettler(visitDate);
        } catch (IllegalArgumentException e) {
            OutputView.printException(e);
            takeVisitDate();
        }
    }
```
저도 방금 찾아서 알게 되었는데 `NumberFormatException`  의 부모 예외가 `IllegalArgumentException` 이더라고요! 그래서 굳이 둘의 예외를 나누지 않고 `IllegalArgumentException` 만 잡아줘도 같이 잡힐 것 같습니다! ㅎㅎ