ewhk9887/korean_code_reviews_from_github huggingface dataset:
@@ -0,0 +1,57 @@
+package christmas.model.event;
+
+import christmas.model.date.ReservationDate;
+
+import java.util.Arrays;
+
+public class ReservationDateEvent {
+    private static final int WEEK = 7;
+    private static final int FRIDAY = 2;
+    private static final int SATURDAY = 3;
+
+    private final ReservationDate reservationDate;
+    private final ChristmasDiscount christmasDiscount;
+    private final WeekDiscountType discountDateWeek;
+    private final SpecialDayDiscount specialDiscountDate;
+
+    public ReservationDateEvent(int day) {
+        this.reservationDate = new ReservationDate(day);
+        this.christmasDiscount = new ChristmasDiscount(reservationDate);
+        this.discountDateWeek = initDiscountDateWeek(reservationDate);
+        this.specialDiscountDate = initSpecialDiscountDate(reservationDate);
+    }
+
+    private WeekDiscountType initDiscountDateWeek(ReservationDate reservationDate) {
+        if (reservationDate.day() % WEEK == FRIDAY ||
+                reservationDate.day() % WEEK == SATURDAY) {
+
+            return WeekDiscountType.WEEKEND;
+        }
+
+        return WeekDiscountType.WEEKDAY;
+    }
+
+    private SpecialDayDiscount initSpecialDiscountDate(ReservationDate reservationDate) {
+        return Arrays.stream(SpecialDayDiscount.values())
+                .filter(specialDay ->
+                        reservationDate.day() == specialDay.getDay())
+                .findFirst()
+                .orElse(SpecialDayDiscount.OTHER_DAY);
+    }
+
+    public ReservationDate getReservationDate() {
+        return reservationDate;
+    }
+
+    public ChristmasDiscount getChristmasDiscount() {
+        return christmasDiscount;
+    }
+
+    public WeekDiscountType getDiscountDateWeek() {
+        return discountDateWeek;
+    }
+
+    public SpecialDayDiscount getSpecialDiscountDate() {
+        return specialDiscountDate;
+    }
+}

리뷰: 이렇게 되면 이벤트가 수백개가 되면 수백개를 직접 다 구현해줘야 되서 비효율적 인것 같습니다!
모두 할인을 적용하는 것이니 inteface Discount 를 만들어 
```
Discount 를 구현한 ReservationDate implements Discount
ChristmasDiscount implements Discount ........ 
```
이렇게 만들어서 List<DIscount> discountList 이런식으로 만들어서 공통함수 부분만 로직에 넣어주시면 관리가 쉬울것같습니다!
@@ -0,0 +1,58 @@
+package christmas.domain;
+
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+
+public class Date {
+    public static final String DATE_RE_READ_REQUEST_MESSAGE = "유효하지 않은 날짜입니다. 다시 입력해 주세요.";
+    private static final LocalDate CHRISTMAS_DAY = LocalDate.of(2023, 12, 25);
+    private static final int YEAR = 2023;
+    private static final int MONTH = 12;
+    private static final int DATE_MIN_NUMBER = 1;
+    private static final int DATE_MAX_NUMBER = 31;
+
+    private final int dayNumber;
+
+    public Date(int dayNumber) {
+        validateRange(dayNumber);
+        this.dayNumber = dayNumber;
+    }
+
+    private void validateRange(int dayNumber) {
+        if ((dayNumber < DATE_MIN_NUMBER) || (dayNumber > DATE_MAX_NUMBER)) {
+            throw new IllegalArgumentException(DATE_RE_READ_REQUEST_MESSAGE);
+        }
+    }
+
+    public boolean isDDayDiscountActive() {
+        LocalDate localDate = LocalDate.of(YEAR, MONTH, dayNumber);
+
+        return localDate.isBefore(CHRISTMAS_DAY.plusDays(1));
+    }
+
+    public boolean isWeekdayDiscountActive() {
+        LocalDate localDate = LocalDate.of(YEAR, MONTH, dayNumber);
+        DayOfWeek day = localDate.getDayOfWeek();
+
+        return (day.equals(DayOfWeek.MONDAY) || day.equals(DayOfWeek.TUESDAY) || day.equals(DayOfWeek.WEDNESDAY)
+                || day.equals(DayOfWeek.THURSDAY) || day.equals(DayOfWeek.SUNDAY));
+    }
+
+    public boolean isWeekendDiscountActive() {
+        LocalDate localDate = LocalDate.of(YEAR, MONTH, dayNumber);
+        DayOfWeek day = localDate.getDayOfWeek();
+
+        return (day.equals(DayOfWeek.FRIDAY) || day.equals(DayOfWeek.SATURDAY));
+    }
+
+    public boolean isSpecialDiscountActive() {
+        LocalDate localDate = LocalDate.of(YEAR, MONTH, dayNumber);
+        DayOfWeek day = localDate.getDayOfWeek();
+
+        return (day.equals(DayOfWeek.SUNDAY) || localDate.equals(CHRISTMAS_DAY));
+    }
+
+    public int getDayNumber() {
+        return dayNumber;
+    }
+}
\ No newline at end of file

리뷰: (이런 방법도 있어요!)

```suggestion
        try {
            LocalDate.of(YEAR, MONTH, dayNumber);
        } catch (NumberFormatException exception) {
            throw new IllegalArgumentException(DATE_RE_READ_REQUEST_MESSAGE);
        }
```

이런식으로 LocalDate를 활용하는 방법도 있습니다!
@@ -0,0 +1,85 @@
+package christmas.domain;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+public class EventResult {
+    private static final String NON_BADGE = "없음";
+    private static final String STAR_BADGE = "별";
+    private static final String TREE_BADGE = "트리";
+    private static final String SANTA_BADGE = "산타";
+    private static final int STAR_BADGE_MINIMUM_AMOUNT = 5000;
+    private static final int STAR_BADGE_MAXIMUM_AMOUNT = 10000;
+    private static final int TREE_BADGE_MINIMUM_AMOUNT = 10000;
+    private static final int TREE_BADGE_MAXIMUM_AMOUNT = 20000;
+    private static final int SANTA_BADGE_MINIMUM_AMOUNT = 20000;
+
+    private final Map<BenefitType, Integer> allBenefit;
+
+    public EventResult(Map<BenefitType, Integer> allBenefit) {
+        this.allBenefit = allBenefit;
+    }
+
+    public int calculateTotalBenefitAmount() {
+        int totalBenefitAmount = 0;
+        List<BenefitType> benefitTypes = List.of(BenefitType.values());
+
+        for (BenefitType benefitType : benefitTypes) {
+            totalBenefitAmount += allBenefit.get(benefitType);
+        }
+
+        return totalBenefitAmount;
+    }
+
+    public int calculateTotalDiscountAmount() {
+        int totalDiscountAmount = 0;
+        List<BenefitType> benefitTypes = List.of(BenefitType.values());
+
+        for (BenefitType benefitType : benefitTypes) {
+            totalDiscountAmount += allBenefit.get(benefitType);
+        }
+        if (allBenefit.get(BenefitType.GIFT) == Menu.CHAMPAGNE.getPrice()) {
+            totalDiscountAmount -= Menu.CHAMPAGNE.getPrice();
+        }
+
+        return totalDiscountAmount;
+    }
+
+    public boolean isReceivedGiftBenefit() {
+        return allBenefit.get(BenefitType.GIFT) == Menu.CHAMPAGNE.getPrice();
+    }
+
+    public List<BenefitType> checkWhichBenefitExist() {
+        List<BenefitType> existingBenefit = new ArrayList<>();
+        BenefitType[] benefitTypes = BenefitType.values();
+
+        for (BenefitType benefitType : benefitTypes) {
+            if (allBenefit.get(benefitType) != 0) {
+                existingBenefit.add(benefitType);
+            }
+        }
+
+        return existingBenefit;
+    }
+
+    public String decideEventBadge() {
+        int totalBenefitAmount = calculateTotalBenefitAmount();
+
+        if ((totalBenefitAmount >= STAR_BADGE_MINIMUM_AMOUNT) && (totalBenefitAmount < STAR_BADGE_MAXIMUM_AMOUNT)) {
+            return STAR_BADGE;
+        }
+        if ((totalBenefitAmount >= TREE_BADGE_MINIMUM_AMOUNT) && (totalBenefitAmount < TREE_BADGE_MAXIMUM_AMOUNT)) {
+            return TREE_BADGE;
+        }
+        if ((totalBenefitAmount >= SANTA_BADGE_MINIMUM_AMOUNT)) {
+            return SANTA_BADGE;
+        }
+        return NON_BADGE;
+    }
+
+    public Map<BenefitType, Integer> getAllBenefit() {
+        return Collections.unmodifiableMap(allBenefit);
+    }
+}
\ No newline at end of file

리뷰: (추천드려요!)
EventResult의 badge관련 코드는 enum으로 분리하면 좋을 것 같아요!
@@ -0,0 +1,52 @@
+package christmas.ui;
+
+import static christmas.domain.Date.DATE_RE_READ_REQUEST_MESSAGE;
+import static christmas.domain.OrderedMenu.ORDER_RE_READ_REQUEST_MESSAGE;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Converter {
+    private static final String ORDER_DELIMITER = ",";
+    private static final String NAME_AND_AMOUNT_DELIMITER = "-";
+
+    public static int convertDateNumeric(String Input) {
+        try {
+            return Integer.parseInt(Input);
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException(DATE_RE_READ_REQUEST_MESSAGE);
+        }
+    }
+
+    public static List<String> separateOrder(String order) {
+        return new ArrayList<>(List.of(order.split(ORDER_DELIMITER)));
+    }
+
+    public static List<String> separateNameAndAmount(String orderedMenu) {
+        validateAppropriateDelimiter(orderedMenu);
+        List<String> separatedNameAndAmount = new ArrayList<>(List.of(orderedMenu.split(NAME_AND_AMOUNT_DELIMITER)));
+        validateAppropriateForm(separatedNameAndAmount);
+
+        return separatedNameAndAmount;
+    }
+
+    private static void validateAppropriateDelimiter(String orderedMenu) {
+        if (!orderedMenu.contains(NAME_AND_AMOUNT_DELIMITER)) {
+            throw new IllegalArgumentException(ORDER_RE_READ_REQUEST_MESSAGE);
+        }
+    }
+
+    private static void validateAppropriateForm(List<String> separatedNameAndAmount) {
+        if (separatedNameAndAmount.size() != 2) {
+            throw new IllegalArgumentException(ORDER_RE_READ_REQUEST_MESSAGE);
+        }
+    }
+
+    public static int convertAmountNumeric(String input) {
+        try {
+            return Integer.parseInt(input);
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException(ORDER_RE_READ_REQUEST_MESSAGE);
+        }
+    }
+}
\ No newline at end of file

리뷰: (이렇게도 가능해요!)

ArrayList로 다시 감싸지 않아도 충분할 것 같아요 :)
```suggestion
          return List.of(order.split(ORDER_DELIMITER));
```
@@ -0,0 +1,63 @@
+package christmas.ui;
+
+import camp.nextstep.edu.missionutils.Console;
+import christmas.domain.Date;
+import christmas.domain.Order;
+import christmas.domain.OrderedMenu;
+import java.util.ArrayList;
+import java.util.List;
+
+public class InputView {
+    private static final String OPENING_MESSAGE = "안녕하세요! 우테코 식당 12월 이벤트 플래너입니다.";
+    private static final String DATE_REQUEST_MESSAGE = "12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!)";
+    private static final String ORDER_REQUEST_MESSAGE
+            = "주문하실 메뉴를 메뉴와 개수를 알려 주세요. (e.g. 해산물파스타-2,레드와인-1,초코케이크-1)";
+
+    public static void notifyProgramStarted() {
+        System.out.println(OPENING_MESSAGE);
+    }
+
+    public static Date inputDate() {
+        try {
+            return readDate();
+        } catch (IllegalArgumentException e) {
+            OutputView.printErrorMessage(e);
+            return inputDate();
+        }
+    }
+
+    private static Date readDate() {
+        System.out.println(DATE_REQUEST_MESSAGE);
+
+        String input = Console.readLine();
+        int dayNumber = Converter.convertDateNumeric(input);
+
+        return new Date(dayNumber);
+    }
+
+    public static Order inputOrder() {
+        try {
+            return new Order(readOrder());
+        } catch (IllegalArgumentException e) {
+            OutputView.printErrorMessage(e);
+            return inputOrder();
+        }
+    }
+
+    private static List<OrderedMenu> readOrder() {
+        System.out.println(ORDER_REQUEST_MESSAGE);
+
+        String input = Console.readLine();
+        List<String> separatedOrder = Converter.separateOrder(input);
+        List<OrderedMenu> order = new ArrayList<>();
+
+        for (String orderedMenu : separatedOrder) {
+            List<String> separatedNameAndAmount = Converter.separateNameAndAmount(orderedMenu);
+            String name = separatedNameAndAmount.get(0);
+            int amount = Converter.convertAmountNumeric(separatedNameAndAmount.get(1));
+            order.add(new OrderedMenu(name, amount));
+        }
+
+        return order;
+    }
+}
\ No newline at end of file

리뷰: (이렇게 바꿀 수 있어요!)

```suggestion
    private static List<OrderedMenu> readOrder() {
        System.out.println(ORDER_REQUEST_MESSAGE);

        String input = Console.readLine();
        List<String> separatedOrder = Converter.separateOrder(input);
        return separatedOrder.stream()
                .map(InputView::convertNameToOrderedMenu)
                .toList();
    }

    private static OrderedMenu convertNameToOrderedMenu(String orderMenu) {
        List<String> separatedNameAndAmount = Converter.separateNameAndAmount(orderMenu);
        String name = separatedNameAndAmount.get(0);
        int amount = Converter.convertAmountNumeric(separatedNameAndAmount.get(1));
        return new OrderedMenu(name, amount);
    }
```
@@ -0,0 +1,60 @@
+package christmas.domain;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+class EventProcessTest {
+    @DisplayName("이벤트에 충분한 전체 주문 금액으로 전체 혜택 도출")
+    @Test
+    void takeAllBenefitWithSufficientTotalOrderPrice() {
+        Date dateInput = new Date(3);
+        Order orderInput = new Order(setUpSufficientTotalOrderPriceOrder());
+        EventProcess eventProcess = new EventProcess();
+        EventResult eventResult = eventProcess.takeAllBenefit(dateInput, orderInput);
+        Map<BenefitType, Integer> result = eventResult.getAllBenefit();
+
+        assertThat(result.get(BenefitType.GIFT)).isEqualTo(25000);
+        assertThat(result.get(BenefitType.D_DAY)).isEqualTo(1200);
+        assertThat(result.get(BenefitType.WEEKDAY)).isEqualTo(2023);
+        assertThat(result.get(BenefitType.WEEKEND)).isEqualTo(0);
+        assertThat(result.get(BenefitType.SPECIAL)).isEqualTo(1000);
+    }
+
+    private List<OrderedMenu> setUpSufficientTotalOrderPriceOrder() {
+        List<OrderedMenu> orderedMenus = new ArrayList<>();
+        orderedMenus.add(new OrderedMenu("해산물파스타", 2));
+        orderedMenus.add(new OrderedMenu("레드와인", 1));
+        orderedMenus.add(new OrderedMenu("초코케이크", 1));
+
+        return orderedMenus;
+    }
+
+    @DisplayName("이벤트에 충분하지 않은 전체 주문 금액으로 전체 혜택 도출")
+    @Test
+    void takeAllBenefitWithInSufficientTotalOrderPrice() {
+        Date dateInput = new Date(26);
+        Order orderInput = new Order(setUpInSufficientTotalOrderPriceOrder());
+        EventProcess eventProcess = new EventProcess();
+        EventResult eventResult = eventProcess.takeAllBenefit(dateInput, orderInput);
+        Map<BenefitType, Integer> result = eventResult.getAllBenefit();
+
+        assertThat(result.get(BenefitType.GIFT)).isEqualTo(0);
+        assertThat(result.get(BenefitType.D_DAY)).isEqualTo(0);
+        assertThat(result.get(BenefitType.WEEKDAY)).isEqualTo(0);
+        assertThat(result.get(BenefitType.WEEKEND)).isEqualTo(0);
+        assertThat(result.get(BenefitType.SPECIAL)).isEqualTo(0);
+    }
+
+    private List<OrderedMenu> setUpInSufficientTotalOrderPriceOrder() {
+        List<OrderedMenu> orderedMenus = new ArrayList<>();
+        orderedMenus.add(new OrderedMenu("타파스", 1));
+        orderedMenus.add(new OrderedMenu("제로콜라", 1));
+
+        return orderedMenus;
+    }
+}
\ No newline at end of file

리뷰: (추천드려요)

assertThat만 사용하면 21번째 줄에서 실패했을 때 밑에 22~25번 라인까지 검증하지 않습니다!
반면 assertAll을 사용하면 모든 assertThat을 실행시키기 때문에 무엇이 실패했는지 확실하게 찾을 수 있는 장점이 있습니다!
```suggestion
          assertAll(
                () -> assertThat(result.get(BenefitType.GIFT)).isEqualTo(25000),
                () -> assertThat(result.get(BenefitType.D_DAY)).isEqualTo(1200),
                () -> assertThat(result.get(BenefitType.WEEKDAY)).isEqualTo(2023),
                () -> assertThat(result.get(BenefitType.WEEKEND)).isEqualTo(0),
                () -> assertThat(result.get(BenefitType.SPECIAL)).isEqualTo(1000)
        );
```
@@ -0,0 +1,23 @@
+package christmas.domain;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+class MenuTest {
+    @DisplayName("주어진 이름을 토대로 메뉴를 판단할 수 있다.")
+    @Test
+    void decideMenu() {
+        String inputTapas = "타파스";
+        String inputSeafoodPasta = "해산물파스타";
+        String inputRedWine = "레드와인";
+        Menu inputTapasResult = Menu.decideMenu(inputTapas);
+        Menu inputSeafoodPastaResult = Menu.decideMenu(inputSeafoodPasta);
+        Menu inputRedWineResult = Menu.decideMenu(inputRedWine);
+
+        assertThat(inputTapasResult).isEqualTo(Menu.TAPAS);
+        assertThat(inputSeafoodPastaResult).isEqualTo(Menu.SEAFOOD_PASTA);
+        assertThat(inputRedWineResult).isEqualTo(Menu.RED_WINE);
+    }
+}
\ No newline at end of file

리뷰: (개인적인 생각입니다!)

테스트코드를 둘러보니 대부분 해피케이스만 있더라구요!
실패에 대한 검증 테스트 코드도 연습해보면 좋을 것 같습니다!
@@ -0,0 +1,58 @@
+package christmas.domain;
+
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+
+public class Date {
+    public static final String DATE_RE_READ_REQUEST_MESSAGE = "유효하지 않은 날짜입니다. 다시 입력해 주세요.";
+    private static final LocalDate CHRISTMAS_DAY = LocalDate.of(2023, 12, 25);
+    private static final int YEAR = 2023;
+    private static final int MONTH = 12;
+    private static final int DATE_MIN_NUMBER = 1;
+    private static final int DATE_MAX_NUMBER = 31;
+
+    private final int dayNumber;
+
+    public Date(int dayNumber) {
+        validateRange(dayNumber);
+        this.dayNumber = dayNumber;
+    }
+
+    private void validateRange(int dayNumber) {
+        if ((dayNumber < DATE_MIN_NUMBER) || (dayNumber > DATE_MAX_NUMBER)) {
+            throw new IllegalArgumentException(DATE_RE_READ_REQUEST_MESSAGE);
+        }
+    }
+
+    public boolean isDDayDiscountActive() {
+        LocalDate localDate = LocalDate.of(YEAR, MONTH, dayNumber);
+
+        return localDate.isBefore(CHRISTMAS_DAY.plusDays(1));
+    }
+
+    public boolean isWeekdayDiscountActive() {
+        LocalDate localDate = LocalDate.of(YEAR, MONTH, dayNumber);
+        DayOfWeek day = localDate.getDayOfWeek();
+
+        return (day.equals(DayOfWeek.MONDAY) || day.equals(DayOfWeek.TUESDAY) || day.equals(DayOfWeek.WEDNESDAY)
+                || day.equals(DayOfWeek.THURSDAY) || day.equals(DayOfWeek.SUNDAY));
+    }
+
+    public boolean isWeekendDiscountActive() {
+        LocalDate localDate = LocalDate.of(YEAR, MONTH, dayNumber);
+        DayOfWeek day = localDate.getDayOfWeek();
+
+        return (day.equals(DayOfWeek.FRIDAY) || day.equals(DayOfWeek.SATURDAY));
+    }
+
+    public boolean isSpecialDiscountActive() {
+        LocalDate localDate = LocalDate.of(YEAR, MONTH, dayNumber);
+        DayOfWeek day = localDate.getDayOfWeek();
+
+        return (day.equals(DayOfWeek.SUNDAY) || localDate.equals(CHRISTMAS_DAY));
+    }
+
+    public int getDayNumber() {
+        return dayNumber;
+    }
+}
\ No newline at end of file

리뷰: 오,, 이번에 LocalDate를 처음 사용해봐서 익숙하지 않았는데요 이런 방법도 있었군요,, 감사합니다!
@@ -0,0 +1,85 @@
+package christmas.domain;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+public class EventResult {
+    private static final String NON_BADGE = "없음";
+    private static final String STAR_BADGE = "별";
+    private static final String TREE_BADGE = "트리";
+    private static final String SANTA_BADGE = "산타";
+    private static final int STAR_BADGE_MINIMUM_AMOUNT = 5000;
+    private static final int STAR_BADGE_MAXIMUM_AMOUNT = 10000;
+    private static final int TREE_BADGE_MINIMUM_AMOUNT = 10000;
+    private static final int TREE_BADGE_MAXIMUM_AMOUNT = 20000;
+    private static final int SANTA_BADGE_MINIMUM_AMOUNT = 20000;
+
+    private final Map<BenefitType, Integer> allBenefit;
+
+    public EventResult(Map<BenefitType, Integer> allBenefit) {
+        this.allBenefit = allBenefit;
+    }
+
+    public int calculateTotalBenefitAmount() {
+        int totalBenefitAmount = 0;
+        List<BenefitType> benefitTypes = List.of(BenefitType.values());
+
+        for (BenefitType benefitType : benefitTypes) {
+            totalBenefitAmount += allBenefit.get(benefitType);
+        }
+
+        return totalBenefitAmount;
+    }
+
+    public int calculateTotalDiscountAmount() {
+        int totalDiscountAmount = 0;
+        List<BenefitType> benefitTypes = List.of(BenefitType.values());
+
+        for (BenefitType benefitType : benefitTypes) {
+            totalDiscountAmount += allBenefit.get(benefitType);
+        }
+        if (allBenefit.get(BenefitType.GIFT) == Menu.CHAMPAGNE.getPrice()) {
+            totalDiscountAmount -= Menu.CHAMPAGNE.getPrice();
+        }
+
+        return totalDiscountAmount;
+    }
+
+    public boolean isReceivedGiftBenefit() {
+        return allBenefit.get(BenefitType.GIFT) == Menu.CHAMPAGNE.getPrice();
+    }
+
+    public List<BenefitType> checkWhichBenefitExist() {
+        List<BenefitType> existingBenefit = new ArrayList<>();
+        BenefitType[] benefitTypes = BenefitType.values();
+
+        for (BenefitType benefitType : benefitTypes) {
+            if (allBenefit.get(benefitType) != 0) {
+                existingBenefit.add(benefitType);
+            }
+        }
+
+        return existingBenefit;
+    }
+
+    public String decideEventBadge() {
+        int totalBenefitAmount = calculateTotalBenefitAmount();
+
+        if ((totalBenefitAmount >= STAR_BADGE_MINIMUM_AMOUNT) && (totalBenefitAmount < STAR_BADGE_MAXIMUM_AMOUNT)) {
+            return STAR_BADGE;
+        }
+        if ((totalBenefitAmount >= TREE_BADGE_MINIMUM_AMOUNT) && (totalBenefitAmount < TREE_BADGE_MAXIMUM_AMOUNT)) {
+            return TREE_BADGE;
+        }
+        if ((totalBenefitAmount >= SANTA_BADGE_MINIMUM_AMOUNT)) {
+            return SANTA_BADGE;
+        }
+        return NON_BADGE;
+    }
+
+    public Map<BenefitType, Integer> getAllBenefit() {
+        return Collections.unmodifiableMap(allBenefit);
+    }
+}
\ No newline at end of file

리뷰: 출력 헤더들을 enum으로 관리할 지 badge를 enum으로 관리할 지 고민하다가 출력 헤더들만 enum으로 관리했는데요, 리뷰 남겨드린 것에 답변 주신 한번만 사용하는 문자열을 굳이 enum으로 관리 하지 않아도 될 것 같다는 말씀에 공공감해서 반대로 badge는 꼭 enum으로 하는 것이 좋았을 것이라는 생각도 드네요. 감사해요