ewhk9887/korean_code_reviews_from_github huggingface dataset:
@@ -0,0 +1,48 @@
+package christmas.model;
+
+import java.util.Set;
+
+public class TotalDiscountCalculator {
+
+    private static final int GIFT_MENU_ORDER_AMOUNT_THRESHOLD = 120000;
+    private static final int DEFAULT_DISCOUNT = 0;
+
+    public static int calculateDateDiscount(int date, Set<OrderItem> menus) {
+        int dateDiscount = DateDiscount.ddayDiscount(date);
+        int weekDayDiscount = WeekendWeekdayDiscount.weekDayDiscount(date, menus);
+        int weekendDayDiscount = WeekendWeekdayDiscount.weekendDayDiscount(date, menus);
+        return dateDiscount + weekDayDiscount + weekendDayDiscount;
+    }
+
+    public static int calculateStarDiscount(int date) {
+        return StarDiscount.starDayDiscount(date);
+    }
+
+    public static int calculateGiftMenu(int totalOrderAmount, int totalDiscount) {
+        int totalBenefits = totalDiscount;
+        if (totalOrderAmount >= GIFT_MENU_ORDER_AMOUNT_THRESHOLD) {
+            totalBenefits += getGiftMenuPrice();
+        }
+        return totalBenefits;
+    }
+
+    public static int printGiftMenuPrice(int totalOrderAmount) {
+        if (totalOrderAmount < GIFT_MENU_ORDER_AMOUNT_THRESHOLD) {
+            return DEFAULT_DISCOUNT;
+        }
+        return getGiftMenuPrice();
+    }
+
+    public static String calculateBadge(int totalOrderAmount, int calculateTotalDiscount) {
+        int totalBenefits = calculateGiftMenu(totalOrderAmount, calculateTotalDiscount);
+        return Badge.calculateBadge(totalBenefits);
+    }
+
+    public static int calculatePayment(int totalOrderAmount, int totalDiscount) {
+        return totalOrderAmount - totalDiscount;
+    }
+
+    private static int getGiftMenuPrice() {
+        return Menu.getChampagnePrice();
+    }
+}

리뷰: Discount 관련 객체들이 모두 유틸성 클래스네요.
지나치게 남용된다는 생각이 듭니다.
어떤 방법을 쓰면 static 메서드 없이 좀 더 객체지향적으로 작성이 가능할까요?
@@ -0,0 +1,28 @@
+package christmas.view;
+
+import christmas.model.OrderItem;
+import java.util.Set;
+
+public class OrderOutputPrinter {
+    private static final String GIFT_MENU_MESSAGE = "샴페인 1개";
+    private static final String NONE_BENEFIT_MESSAGE = "없음";
+
+    public static void printMenu(Set<OrderItem> menus) {
+        OutputView.printMessage("<주문 메뉴>");
+        menus.forEach(OrderOutputPrinter::printMenuItem);
+        OutputView.printEmptyLine();
+    }
+
+    private static void printMenuItem(OrderItem orderItem) {
+        String menuName = orderItem.getMenuName();
+        int quantity = orderItem.getQuantity();
+        OutputView.printMessage(menuName + " " + quantity + "개");
+    }
+
+    public static String printGiftMenuMessage(int totalOrderAmount) {
+        if (totalOrderAmount >= 120000) {
+            return GIFT_MENU_MESSAGE;
+        }
+        return NONE_BENEFIT_MESSAGE;
+    }
+}

리뷰: 주문금액이 120000을 넘으면 샴페인을 증정한다는 비즈니스 로직 아닐까요?
@@ -0,0 +1,23 @@
+package christmas.model;
+
+public class OrderItem {
+    private final String menuName;
+    private final int quantity;
+
+    public OrderItem(String menuName, int quantity) {
+        this.menuName = menuName;
+        this.quantity = quantity;
+    }
+
+    public String getMenuName() {
+        return menuName;
+    }
+
+    public int getQuantity() {
+        return quantity;
+    }
+
+    public int calculateMenuAmount() {
+        return quantity * Menu.getPriceByMenuName(menuName);
+    }
+}

리뷰: 확인한다고 했는데 놓친 부분이 있었네요 ㅠㅠ
수정했습니다. 감사합니다.
@@ -0,0 +1,57 @@
+package christmas.model;
+
+import christmas.view.OutputView;
+import java.util.HashSet;
+import java.util.Set;
+
+public class Order {
+    private static final int MENU_NAME_INDEX = 0;
+    private static final int QUANTITY_INDEX = 1;
+
+    private final Set<OrderItem> menus;
+
+
+    private Order(Set<OrderItem> menus) {
+        this.menus = menus;
+    }
+
+    public static Order createOrder(int date, String orderInput) {
+        Set<OrderItem> menus = createOrderItems(orderInput);
+        OutputView.printOrderPreview(date);
+        return new Order(menus);
+    }
+
+    private static Set<OrderItem> createOrderItems(String orderInput) {
+        Set<OrderItem> menus = new HashSet<>();
+        String[] orderItems = orderInput.split(",");
+        for (String orderItem : orderItems) {
+            String[] menuInfo = getMenuInfo(orderItem.trim());
+            String menuName = menuInfo[MENU_NAME_INDEX];
+            int quantity = Integer.parseInt(menuInfo[QUANTITY_INDEX]);
+            menus.add(new OrderItem(menuName, quantity));
+        }
+        return menus;
+    }
+
+    private static String[] getMenuInfo(String menu) {
+        return menu.split("-");
+    }
+
+    public Set<OrderItem> getMenus() {
+        return menus;
+    }
+
+    public int calculateTotalOrderAmount() {
+        int totalOrderAmount = 0;
+        for (OrderItem orderItem : menus) {
+            totalOrderAmount += orderItem.calculateMenuAmount();
+        }
+        return totalOrderAmount;
+    }
+
+    public int calculateTotalDiscount(int date) {
+        int dateDiscount = TotalDiscountCalculator.calculateDateDiscount(date, menus);
+        int starDiscount = TotalDiscountCalculator.calculateStarDiscount(date);
+        return dateDiscount + starDiscount;
+    }
+}

리뷰: 전에 상수화 공부중 블로그 글에서 ","(comma)를 상수화 하는게 의미없는 상수화라는 글을 본 적이 있습니다.
"-" 해당 값도 상수화 해주면 더 좋을 것 같다고 말씀해 주셨는데 혹시 ","(comma)와 다른 이유가 있는지 여쭤보고 싶습니다.
@@ -0,0 +1,48 @@
+package christmas.model;
+
+import java.util.Set;
+
+public class TotalDiscountCalculator {
+
+    private static final int GIFT_MENU_ORDER_AMOUNT_THRESHOLD = 120000;
+    private static final int DEFAULT_DISCOUNT = 0;
+
+    public static int calculateDateDiscount(int date, Set<OrderItem> menus) {
+        int dateDiscount = DateDiscount.ddayDiscount(date);
+        int weekDayDiscount = WeekendWeekdayDiscount.weekDayDiscount(date, menus);
+        int weekendDayDiscount = WeekendWeekdayDiscount.weekendDayDiscount(date, menus);
+        return dateDiscount + weekDayDiscount + weekendDayDiscount;
+    }
+
+    public static int calculateStarDiscount(int date) {
+        return StarDiscount.starDayDiscount(date);
+    }
+
+    public static int calculateGiftMenu(int totalOrderAmount, int totalDiscount) {
+        int totalBenefits = totalDiscount;
+        if (totalOrderAmount >= GIFT_MENU_ORDER_AMOUNT_THRESHOLD) {
+            totalBenefits += getGiftMenuPrice();
+        }
+        return totalBenefits;
+    }
+
+    public static int printGiftMenuPrice(int totalOrderAmount) {
+        if (totalOrderAmount < GIFT_MENU_ORDER_AMOUNT_THRESHOLD) {
+            return DEFAULT_DISCOUNT;
+        }
+        return getGiftMenuPrice();
+    }
+
+    public static String calculateBadge(int totalOrderAmount, int calculateTotalDiscount) {
+        int totalBenefits = calculateGiftMenu(totalOrderAmount, calculateTotalDiscount);
+        return Badge.calculateBadge(totalBenefits);
+    }
+
+    public static int calculatePayment(int totalOrderAmount, int totalDiscount) {
+        return totalOrderAmount - totalDiscount;
+    }
+
+    private static int getGiftMenuPrice() {
+        return Menu.getChampagnePrice();
+    }
+}

리뷰: TotalDiscountCalculator 클래스를 객체로 변경하고 필요한 Discount 계산 로직을 여러 인스턴스 메서드로 분할한다면 static 메서드 없이  좀 더 객체지향적으로 변경할 수 있을것 같은데 제가 생각한 방법이 맞을지 궁금합니다.
@@ -0,0 +1,48 @@
+package christmas.model;
+
+import java.util.Set;
+
+public class TotalDiscountCalculator {
+
+    private static final int GIFT_MENU_ORDER_AMOUNT_THRESHOLD = 120000;
+    private static final int DEFAULT_DISCOUNT = 0;
+
+    public static int calculateDateDiscount(int date, Set<OrderItem> menus) {
+        int dateDiscount = DateDiscount.ddayDiscount(date);
+        int weekDayDiscount = WeekendWeekdayDiscount.weekDayDiscount(date, menus);
+        int weekendDayDiscount = WeekendWeekdayDiscount.weekendDayDiscount(date, menus);
+        return dateDiscount + weekDayDiscount + weekendDayDiscount;
+    }
+
+    public static int calculateStarDiscount(int date) {
+        return StarDiscount.starDayDiscount(date);
+    }
+
+    public static int calculateGiftMenu(int totalOrderAmount, int totalDiscount) {
+        int totalBenefits = totalDiscount;
+        if (totalOrderAmount >= GIFT_MENU_ORDER_AMOUNT_THRESHOLD) {
+            totalBenefits += getGiftMenuPrice();
+        }
+        return totalBenefits;
+    }
+
+    public static int printGiftMenuPrice(int totalOrderAmount) {
+        if (totalOrderAmount < GIFT_MENU_ORDER_AMOUNT_THRESHOLD) {
+            return DEFAULT_DISCOUNT;
+        }
+        return getGiftMenuPrice();
+    }
+
+    public static String calculateBadge(int totalOrderAmount, int calculateTotalDiscount) {
+        int totalBenefits = calculateGiftMenu(totalOrderAmount, calculateTotalDiscount);
+        return Badge.calculateBadge(totalBenefits);
+    }
+
+    public static int calculatePayment(int totalOrderAmount, int totalDiscount) {
+        return totalOrderAmount - totalDiscount;
+    }
+
+    private static int getGiftMenuPrice() {
+        return Menu.getChampagnePrice();
+    }
+}

리뷰: 제가 코드를 잘못 작성했네요..
감사합니다.
@@ -0,0 +1,57 @@
+package christmas.model;
+
+import christmas.view.OutputView;
+import java.util.HashSet;
+import java.util.Set;
+
+public class Order {
+    private static final int MENU_NAME_INDEX = 0;
+    private static final int QUANTITY_INDEX = 1;
+
+    private final Set<OrderItem> menus;
+
+
+    private Order(Set<OrderItem> menus) {
+        this.menus = menus;
+    }
+
+    public static Order createOrder(int date, String orderInput) {
+        Set<OrderItem> menus = createOrderItems(orderInput);
+        OutputView.printOrderPreview(date);
+        return new Order(menus);
+    }
+
+    private static Set<OrderItem> createOrderItems(String orderInput) {
+        Set<OrderItem> menus = new HashSet<>();
+        String[] orderItems = orderInput.split(",");
+        for (String orderItem : orderItems) {
+            String[] menuInfo = getMenuInfo(orderItem.trim());
+            String menuName = menuInfo[MENU_NAME_INDEX];
+            int quantity = Integer.parseInt(menuInfo[QUANTITY_INDEX]);
+            menus.add(new OrderItem(menuName, quantity));
+        }
+        return menus;
+    }
+
+    private static String[] getMenuInfo(String menu) {
+        return menu.split("-");
+    }
+
+    public Set<OrderItem> getMenus() {
+        return menus;
+    }
+
+    public int calculateTotalOrderAmount() {
+        int totalOrderAmount = 0;
+        for (OrderItem orderItem : menus) {
+            totalOrderAmount += orderItem.calculateMenuAmount();
+        }
+        return totalOrderAmount;
+    }
+
+    public int calculateTotalDiscount(int date) {
+        int dateDiscount = TotalDiscountCalculator.calculateDateDiscount(date, menus);
+        int starDiscount = TotalDiscountCalculator.calculateStarDiscount(date);
+        return dateDiscount + starDiscount;
+    }
+}

리뷰: 상수화를 하는 목적은 무엇일까요?

가장 큰 이유는 해당 값이 코드의 맥락상 
`어떤 역할`을 하는지 나타내기 위해 적절한 이름을 붙이는 것입니다.

`","`를 `comma`라고 네이밍하는 것은 왜 의미 없는 상수화일까요?
1. comma라는 이름은 해당 문장 부호의 이름이지, 코드에서 해당 문장 부호의 역할에 대해 표현한 이름이 아닙니다.
2. menu라는 String의 형식이 바뀌어 메뉴 이름과 수량을 구분하는 구분자가 `","`에서 `"-"`로 변화한다면
상수의 네이밍도  `comma`에서 `hyphen`으로 변경해줘야합니다.


구분자가 바뀔때마다 상수의 이름을 바꾸고 해당 상수를 사용하는 모든 곳에서 코드를 변경해야한다면
상수화를 하는 목적을 달성했다고 보기 힘들겠죠.

그런 이유에서 ","(comma)를 상수화 하는게 의미없는 상수화라고 표현한 것입니다.
이 의미는 매직 리터럴을 상수화하지 말라는 의미가 아닌, 유의미한 네이밍으로 상수화하라는 의미입니다.
@@ -0,0 +1,48 @@
+package christmas.model;
+
+import java.util.Set;
+
+public class TotalDiscountCalculator {
+
+    private static final int GIFT_MENU_ORDER_AMOUNT_THRESHOLD = 120000;
+    private static final int DEFAULT_DISCOUNT = 0;
+
+    public static int calculateDateDiscount(int date, Set<OrderItem> menus) {
+        int dateDiscount = DateDiscount.ddayDiscount(date);
+        int weekDayDiscount = WeekendWeekdayDiscount.weekDayDiscount(date, menus);
+        int weekendDayDiscount = WeekendWeekdayDiscount.weekendDayDiscount(date, menus);
+        return dateDiscount + weekDayDiscount + weekendDayDiscount;
+    }
+
+    public static int calculateStarDiscount(int date) {
+        return StarDiscount.starDayDiscount(date);
+    }
+
+    public static int calculateGiftMenu(int totalOrderAmount, int totalDiscount) {
+        int totalBenefits = totalDiscount;
+        if (totalOrderAmount >= GIFT_MENU_ORDER_AMOUNT_THRESHOLD) {
+            totalBenefits += getGiftMenuPrice();
+        }
+        return totalBenefits;
+    }
+
+    public static int printGiftMenuPrice(int totalOrderAmount) {
+        if (totalOrderAmount < GIFT_MENU_ORDER_AMOUNT_THRESHOLD) {
+            return DEFAULT_DISCOUNT;
+        }
+        return getGiftMenuPrice();
+    }
+
+    public static String calculateBadge(int totalOrderAmount, int calculateTotalDiscount) {
+        int totalBenefits = calculateGiftMenu(totalOrderAmount, calculateTotalDiscount);
+        return Badge.calculateBadge(totalBenefits);
+    }
+
+    public static int calculatePayment(int totalOrderAmount, int totalDiscount) {
+        return totalOrderAmount - totalDiscount;
+    }
+
+    private static int getGiftMenuPrice() {
+        return Menu.getChampagnePrice();
+    }
+}

리뷰: 객체지향에서 객체란 무엇일까요?

일반적으로 객체는 `상태(State)` 와 `행동(Behavior)` 을 가지는 것을 말합니다.

코드적으로는 알고 있는 것들(상태)를 인스턴스 변수로 나타내고,
할 수 있는 것들(행동)을 메서드로 나타내는 것을 의미하겠죠.

이러한 관점에서 전체적인 설계를 재검토해보시면 좋을 것 같습니다 ㅎㅎ
@@ -0,0 +1,22 @@
+package christmas.constant;
+
+public enum ResultMessage {
+    BENEFIT_PREVIEW("12월 3일에 우테코 식당에서 받을 이벤트 혜택 미리 보기!"),
+    ORDER_MENU("\n<주문 메뉴>"),
+    ALL_ORDER_PRICE_WITHOUT_DISCOUNT("\n<할인 전 총주문 금액>"),
+    GIVE_MENU("\n<증정 메뉴>"),
+    BENEFIT("\n<혜택 내역>"),
+    ALL_BENEFIT_AMOUNT("\n<총혜택 금액>"),
+    PAYMENT_PRICE("\n<할인 후 예상 결제 금액>"),
+    BADGE("\n<12월 이벤트 배지>");
+
+    private String message;
+
+    ResultMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

리뷰: 개인적으로 문자열에 개행이 들어가 있으면 나중에 디버깅이 쉽지 않더군요..
@@ -0,0 +1,55 @@
+package christmas.domain.customer;
+
+import christmas.constant.NumConstant;
+import christmas.validator.DateValidator;
+
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+
+public class VisitDate {
+    private final int visitDate;
+
+    private VisitDate(int visitDate) {
+        DateValidator.validateVisitDateBound(visitDate);
+        this.visitDate = visitDate;
+    }
+
+    public static VisitDate from(int visitDate) {
+        return new VisitDate(visitDate);
+    }
+
+    public DayOfWeek getDayOfWeek() {
+        LocalDate date = LocalDate.of(
+                NumConstant.THIS_YEAR.getValue(),
+                NumConstant.THIS_MONTH.getValue(),
+                visitDate
+        );
+        return date.getDayOfWeek();
+    }
+
+    public boolean isVisitDateWeekend() {
+        DayOfWeek dayOfWeek = getDayOfWeek();
+        if (dayOfWeek == DayOfWeek.FRIDAY || dayOfWeek == DayOfWeek.SATURDAY) {
+            return true;
+        }
+        return false;
+    }
+
+    public boolean isOverChristmas() {
+        if(visitDate > NumConstant.CHRISTMAS_DAY.getValue()) {
+            return true;
+        }
+        return false;
+    }
+
+    public int calculateDdayEventApplyDay() {
+        return visitDate - 1;
+    }
+
+    public boolean isSpecialDay() {
+        if (visitDate == NumConstant.CHRISTMAS_DAY.getValue() || getDayOfWeek() == DayOfWeek.SUNDAY) {
+            return true;
+        }
+        return false;
+    }
+}

리뷰: 어떤 걸 의도하셨는지 여쭤봐도 될까요?
@@ -0,0 +1,68 @@
+package christmas.service;
+
+import christmas.constant.Badge;
+import christmas.domain.customer.CustomerInfo;
+import christmas.domain.event.EventStatus;
+import christmas.handler.EventHandler;
+
+import java.util.Collections;
+import java.util.Map;
+
+public class EventService {
+    private final EventHandler eventHandler;
+    private final CustomerInfo customerInfo;
+
+    private EventService(CustomerInfo customerInfo) {
+        eventHandler = EventHandler.from(EventStatus.createInstance());
+        this.customerInfo = customerInfo;
+    }
+
+    public static EventService of(CustomerInfo customerInfo) {
+        return new EventService(customerInfo);
+    }
+
+    public void applyDiscount() {
+        eventHandler.applyDiscount(customerInfo);
+    }
+
+    public int getTotalBenefitAmount() {
+        if (customerInfo.isOverMinAmount()) {
+            return eventHandler.getTotalBenefitAmount();
+        }
+        return 0;
+    }
+
+    public Map<String, Integer> getBenefits() {
+        if (customerInfo.isOverMinAmount()) {
+            return eventHandler.getBenefits();
+        }
+        return Collections.emptyMap();
+    }
+
+    public Map<String, Integer> getOrderList() {
+        return customerInfo.getOrderList();
+    }
+
+    public String getGiveaway() {
+        if (customerInfo.isApplyGiveawayEvent()) {
+            return "샴페인 1개";
+        }
+        return "없음";
+    }
+
+    public int getTotalOrderAmount() {
+        return customerInfo.getTotalOrderAmount();
+    }
+
+    public int getTotalDiscountAmount() {
+        if (customerInfo.isOverMinAmount()) {
+            return eventHandler.getTotalDiscountAmount();
+        }
+        return 0;
+    }
+
+    public String getBadge() {
+        return Badge.getBadge(eventHandler.getTotalBenefitAmount());
+    }
+
+}

리뷰: 문자열을 반환하기보다 증정품에 대한 객체가 있어서 그 정보를 반환하는 것이 어떨까요?
@@ -0,0 +1,31 @@
+package christmas.constant;
+
+public enum Badge {
+    MISS("없음"),
+    STAR("별"),
+    TREE("트리"),
+    SANTA("산타");
+    private String name;
+
+    Badge(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public static String getBadge(int totalBenefitAmount) {
+        totalBenefitAmount = Math.abs(totalBenefitAmount);
+        if(totalBenefitAmount >= NumConstant.STAR_BADGE_AMOUNT.getValue() && totalBenefitAmount < NumConstant.TREE_BADGE_AMOUNT.getValue()) {
+            return STAR.name;
+        }
+        if(totalBenefitAmount >= NumConstant.TREE_BADGE_AMOUNT.getValue() && totalBenefitAmount < NumConstant.SANTA_BADGE_AMOUNT.getValue()) {
+            return TREE.name;
+        }
+        if(totalBenefitAmount >= NumConstant.SANTA_BADGE_AMOUNT.getValue()) {
+            return SANTA.name;
+        }
+        return MISS.name;
+    }
+}

리뷰: 저도 똑같이 받았던 피드백인데, 
```
SANTA("산타, 25_000");
public static String getBadge(final int totalBenefitAmount) {
	        for(Badge b : Badge.values()){
	            if(totalBenefitAmount>=b.getValue()){
	                return b.name;
	            }
	        }
	        return "없음";
	    }
```
로 고쳐보면 어떨까요?
더 간단해 질 것 같아요!
@@ -0,0 +1,63 @@
+package christmas.domain.customer;
+
+import christmas.constant.MenuType;
+import christmas.constant.NumConstant;
+import christmas.domain.order.Orders;
+
+import java.util.Map;
+
+public class CustomerInfo {
+    private final VisitDate visitDate;
+    private final Orders orders;
+
+    private CustomerInfo(VisitDate visitDate, Orders orders) {
+        this.visitDate = visitDate;
+        this.orders = orders;
+    }
+
+    public static CustomerInfo of(VisitDate visitDate, Orders orders) {
+        return new CustomerInfo(visitDate, orders);
+    }
+
+    public boolean isOverMinAmount() {
+        if (getTotalOrderAmount() > NumConstant.MIN_EVENT_APPLY_AMOUNT.getValue()) {
+            return true;
+        }
+        return false;
+    }
+
+    public boolean isVisitDateWeekend() {
+        return visitDate.isVisitDateWeekend();
+    }
+
+    public boolean isOverChristmas() {
+        return visitDate.isOverChristmas();
+    }
+
+    public int getTotalOrderAmount() {
+        return orders.getTotalOrderAmount();
+    }
+
+    public int getDdayEventApplyDay() {
+        return visitDate.calculateDdayEventApplyDay();
+    }
+
+    public int getOrderNumByMenuType(MenuType menuType) {
+        return orders.getOrderNumByMenuType(menuType);
+    }
+
+    public boolean isApplyGiveawayEvent() {
+        if (orders.getTotalOrderAmount() >= NumConstant.MIN_GIVEAWAY_AMOUNT.getValue()) {
+            return true;
+        }
+        return false;
+    }
+
+    public boolean isSpecialDay() {
+        return visitDate.isSpecialDay();
+    }
+
+    public Map<String, Integer> getOrderList() {
+        return orders.getOrderList();
+    }
+}

리뷰: 코드 컨벤션 순서에 맞춰 비지니스 로직보다 getter를 아래에 두는 것이 깔끔해보입니다!
@@ -0,0 +1,38 @@
+package christmas.domain.order;
+
+import christmas.constant.MenuType;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class Orders {
+    private final List<Order> orders;
+
+    private Orders(List<Order> orders) {
+        this.orders = orders;
+    }
+
+    public static Orders from(List<Order> orders) {
+        return new Orders(orders);
+    }
+
+    public int getTotalOrderAmount() {
+        return orders.stream()
+                .map(Order::getOrderAmount)
+                .reduce(0, Integer::sum);
+    }
+
+    public int getOrderNumByMenuType(MenuType menuType) {
+        return orders.stream()
+                .filter(order -> order.isMatchMenuType(menuType))
+                .mapToInt(Order::getMenuNum)
+                .sum();
+    }
+
+    public Map<String, Integer> getOrderList() {
+        return orders.stream()
+                .collect(Collectors.toMap(Order::getMenuName, Order::getMenuNum));
+    }
+}

리뷰: list라는 자료구조을 그대로네이밍으로 사용하는 것은 지양하라고 피드백에 나와있었습니다!
또, getter로 list의반환시에 list의 변경가능성이 있으므로 Collections.unmodifi...를 사용하는 것이 적절해보이네요!
@@ -0,0 +1,48 @@
+package christmas.domain.menu;
+
+import christmas.constant.MenuType;
+
+import java.util.*;
+
+public class Menus {
+    private final List<Menu> menus;
+    private static Menus instance;
+
+    private Menus(List<Menu> menus) {
+        this.menus = menus;
+    }
+
+    public static Menus getInstance() {
+        if(instance == null) {
+            instance = new Menus(initialMenus());
+        }
+        return instance;
+    }
+
+    private static List<Menu> initialMenus() {
+        List<Menu> initialMenus = new ArrayList<>();
+
+        initialMenus.add(Menu.of("양송이수프", 6000, MenuType.APPETIZER));
+        initialMenus.add(Menu.of("타파스", 5500, MenuType.APPETIZER));
+        initialMenus.add(Menu.of("시저샐러드", 8000, MenuType.APPETIZER));
+        initialMenus.add(Menu.of("티본스테이크", 55000, MenuType.MAIN));
+        initialMenus.add(Menu.of("바비큐립", 54000, MenuType.MAIN));
+        initialMenus.add(Menu.of("해산물파스타", 35000, MenuType.MAIN));
+        initialMenus.add(Menu.of("크리스마스파스타", 25000, MenuType.MAIN));
+        initialMenus.add(Menu.of("초코케이크", 15000, MenuType.DESSERT));
+        initialMenus.add(Menu.of("아이스크림", 5000, MenuType.DESSERT));
+        initialMenus.add(Menu.of("제로콜라", 3000, MenuType.DRINK));
+        initialMenus.add(Menu.of("레드와인", 60000, MenuType.DRINK));
+        initialMenus.add(Menu.of("샴페인", 25000, MenuType.DRINK));
+
+        return initialMenus;
+    }
+
+    public Optional<Menu> getMenuByMenuName(String menuName) {
+        return menus.stream()
+                .filter(menu -> menu.getMenuName().equals(menuName))
+                .findFirst();
+
+    }
+
+}

리뷰: 이렇게 싱글톤 방식으로 선언하신 이유가 있을까요? enum을 사용해도 좋을 것 같습니다!
@@ -0,0 +1,22 @@
+package christmas.constant;
+
+public enum ResultMessage {
+    BENEFIT_PREVIEW("12월 3일에 우테코 식당에서 받을 이벤트 혜택 미리 보기!"),
+    ORDER_MENU("\n<주문 메뉴>"),
+    ALL_ORDER_PRICE_WITHOUT_DISCOUNT("\n<할인 전 총주문 금액>"),
+    GIVE_MENU("\n<증정 메뉴>"),
+    BENEFIT("\n<혜택 내역>"),
+    ALL_BENEFIT_AMOUNT("\n<총혜택 금액>"),
+    PAYMENT_PRICE("\n<할인 후 예상 결제 금액>"),
+    BADGE("\n<12월 이벤트 배지>");
+
+    private String message;
+
+    ResultMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

리뷰: 앗... 그런 문제가 좀 있었군요 😱