ewhk9887/korean_code_reviews_from_github huggingface dataset:
@@ -0,0 +1,58 @@
+package christmas.constant;
+
+import christmas.constant.MenuConstant.MenuType;
+import christmas.domain.Menu;
+import java.util.List;
+
+public class EventConstant {
+    public static class Condition {
+
+        public static final int CASE_A = 10000;
+        public static final int CASE_B = 120000;
+    }
+
+    public static class Days {
+
+        public static final List<Integer> EVERY = List.of(1, 2, 3, 4, 5, 6);
+        public static final List<Integer> WEEKDAY = List.of(0, 3, 4, 5, 6);
+        public static final List<Integer> WEEKEND = List.of(1, 2);
+        public static final List<Integer> SPECIAL = List.of(3, 25);
+
+    }
+
+    public static class Target {
+
+        public static final String WEEKDAY = MenuType.DESSERT;
+        public static final String WEEKEND = MenuType.MAIN;
+        public static final String CHRISTMAS = MenuType.NONE;
+        public static final String SPECIAL = MenuType.NONE;
+        public static final String PRESENTATION = Menu.CHAMPAGNE.getName();
+
+    }
+
+    public static class Discount {
+
+        public static final int WEEKDAY = 2023;
+        public static final int WEEKEND = 2023;
+        public static final int CHRISTMAS = 100;
+        public static final int SPECIAL = 0;
+        public static final int PRESENTATION = Menu.CHAMPAGNE.getPrice() * 1;
+
+    }
+
+    public static class TotalDiscount {
+        public static final int SPECIAL = 1000;
+        public static final int OTHER = 0;
+    }
+
+    public static class Message {
+
+        public static final String SPECIAL = "특별 할인:";
+        public static final String WEEKDAY = "평일 할인:";
+        public static final String WEEKEND = "주말 할인:";
+        public static final String CHRISTMAS = "크리스마스 디데이 할인:";
+        public static final String PRESENTATION = "증정 이벤트:";
+
+    }
+
+}

리뷰: 이게 무슨 상수인지 알 수가 없어요. 이름을 명확히 지어주세요.
영어가 엉망이더라도 EventAvailablePrice 같은 식으로 적어주세요.
@@ -0,0 +1,72 @@
+package christmas.domain;
+
+import christmas.constant.Constant;
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class Benefit {
+
+    private final Map<Event, Integer> details;
+
+    public Benefit() {
+        this.details = new EnumMap<>(Event.class);
+        initialBenefitDetails();
+    }
+
+    public int calculateTotalDiscount() {
+        return details.values()
+                .stream()
+                .reduce(0, Integer::sum);
+    }
+
+    public void addDiscountIntoDetails(Event event, int discount) {
+        details.computeIfPresent(event, (key, value) -> value + discount);
+    }
+
+    public String detailsToString() {
+        StringBuilder sb = new StringBuilder(Constant.NOTHING + System.lineSeparator());
+        if (calculateTotalDiscount() != 0) {
+            sb.setLength(0);
+            appendDetails(sb);
+        }
+        return sb.toString();
+    }
+
+    public int calculatePresentationPrice() {
+        return details.get(Event.PRESENTATION);
+    }
+
+    public String presentationMenuToString() {
+        Event presentation = Event.PRESENTATION;
+        StringBuilder sb = new StringBuilder(Constant.NOTHING + System.lineSeparator());
+        int discount = details.get(presentation);
+        if (discount != 0) {
+            sb.setLength(0);
+            sb.append(presentation.getTarget());
+            sb.append(Constant.SPACE);
+            sb.append(String.format(Constant.MENU_UNIT, Math.abs(discount / Event.PRESENTATION.getDiscount())));
+            sb.append(System.lineSeparator());
+        }
+        return sb.toString();
+    }
+
+
+    private void appendDetails(StringBuilder benefitDetail) {
+        for (Entry<Event, Integer> entry : details.entrySet()) {
+            String eventMessage = entry.getKey().getMessage();
+            int discount = entry.getValue();
+            if (discount != 0) {
+                benefitDetail.append(eventMessage);
+                benefitDetail.append(Constant.SPACE);
+                benefitDetail.append(String.format(Constant.PRICE_UNIT, discount));
+                benefitDetail.append(System.lineSeparator());
+            }
+        }
+    }
+
+    private void initialBenefitDetails() {
+        Event.getAllEvent().forEach(event -> details.put(event, 0));
+    }
+
+}

리뷰: StringBuilder를 외부에서 받아와야 하는 이유가 있었을까요?
아니라면 내부에서 StringBuilder를 생성해서 사용하세요.
꼭 외부에서 StringBuilder를 받아와야만 하는 경우라면, 설계가 잘못된 거에요.
@@ -0,0 +1,14 @@
+package christmas.constant;
+
+public class MenuConstant {
+
+    public static class MenuType {
+
+        public static final String APPETIZER = "appetizer";
+        public static final String MAIN = "main";
+        public static final String DESSERT = "dessert";
+        public static final String DRINK = "drink";
+        public static final String NONE = "none";
+
+    }
+}

리뷰: enum에 APPETIZER, MAIN, DESSERT, DRINK만 적으셔도 됐을 것 같아요. string 상수가 이용되는 걸 보지 못했어요.
@@ -0,0 +1,103 @@
+package christmas.domain;
+
+import christmas.constant.EventConstant.Condition;
+import christmas.constant.EventConstant.Days;
+import christmas.constant.EventConstant.Discount;
+import christmas.constant.EventConstant.Message;
+import christmas.constant.EventConstant.Target;
+import christmas.constant.EventConstant.TotalDiscount;
+import java.util.Arrays;
+import java.util.List;
+
+public enum Event {
+
+    /*
+    index0(Condition): 총 주문 금액 조건
+    index1(Days): 적용 날짜
+    index2(Target): 할인 메뉴 또는 증정품
+    index3(Discount): 할인 금액
+    index4(DiscountFromTotal): 총금액에서 할인 금액
+    index5(Message): 할인 메시지 (e.g. WEEKDAY -> "평일 할인:")
+    */
+    SPECIAL(Condition.CASE_A,
+            Days.SPECIAL,
+            Target.SPECIAL,
+            Discount.SPECIAL,
+            TotalDiscount.SPECIAL,
+            Message.SPECIAL),
+
+    WEEKDAY(Condition.CASE_A,
+            Days.WEEKDAY,
+            Target.WEEKDAY,
+            Discount.WEEKDAY,
+            TotalDiscount.OTHER,
+            Message.WEEKDAY),
+
+    WEEKEND(Condition.CASE_A,
+            Days.WEEKEND,
+            Target.WEEKEND,
+            Discount.WEEKEND,
+            TotalDiscount.OTHER,
+            Message.WEEKEND),
+
+    CHRISTMAS(Condition.CASE_A,
+            Days.EVERY,
+            Target.CHRISTMAS,
+            Discount.CHRISTMAS,
+            TotalDiscount.OTHER,
+            Message.CHRISTMAS),
+
+    PRESENTATION(Condition.CASE_B,
+            Days.EVERY,
+            Target.PRESENTATION,
+            Discount.PRESENTATION,
+            TotalDiscount.OTHER,
+            Message.PRESENTATION);
+
+
+    private final int condition;
+    private final List<Integer> days;
+    private final String target;
+    private final int discount;
+    private final int discountFromTotal;
+    private final String message;
+
+    Event(int condition, List<Integer> days, String target, int discountMenu, int discountTotal, String message) {
+        this.condition = condition;
+        this.days = days;
+        this.target = target;
+        this.discount = discountMenu;
+        this.discountFromTotal = discountTotal;
+        this.message = message;
+    }
+
+    public static List<Event> findAllByDay(int day) {
+        return Arrays.stream(Event.values())
+                .filter(event -> event.days.contains(day) || event.days.contains(day % 7))
+                .toList();
+    }
+
+    public static List<Event> getAllEvent() {
+        return Arrays.stream(Event.values()).toList();
+    }
+
+    public int getDiscount() {
+        return discount;
+    }
+
+    public int getDiscountFromTotal() {
+        return discountFromTotal;
+    }
+
+    public String getTarget() {
+        return target;
+    }
+
+    public int getCondition() {
+        return condition;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

리뷰: 내부 값과 구현이 뿔뿔이 흩어져 있네요...
복잡하지 않다면, enum 하나에 전부 넣어주세요. 이렇게 만들면 유지보수가 더 힘들어져요.
@@ -0,0 +1,65 @@
+package christmas.domain;
+
+import christmas.constant.MenuConstant.MenuType;
+import java.util.Arrays;
+
+public enum Menu {
+
+    //애피타이저
+    MUSHROOM_SOUP(MenuType.APPETIZER, "양송이수프", 6_000),
+    TAPAS(MenuType.APPETIZER, "타파스", 5_500),
+    CAESAR_SALAD(MenuType.APPETIZER, "시저샐러드", 8_000),
+
+    //메인
+    T_BONE_STEAK(MenuType.MAIN, "티본스테이크", 55_000),
+    BBQ_RIBS(MenuType.MAIN, "바비큐립", 54_000),
+    SEAFOOD_PASTA(MenuType.MAIN, "해산물파스타", 35_000),
+    CHRISTMAS_PASTA(MenuType.MAIN, "크리스마스파스타", 25_000),
+
+    //디저트
+    CHOCOLATE_CAKE(MenuType.DESSERT, "초코케이크", 15_000),
+    ICE_CREAM(MenuType.DESSERT, "아이스크림", 5_000),
+
+    //음료
+    ZERO_COKE(MenuType.DRINK, "제로콜라", 3_000),
+    RED_WINE(MenuType.DRINK, "레드와인", 60_000),
+    CHAMPAGNE(MenuType.DRINK, "샴페인", 25_000),
+
+    //NONE
+    NONE(MenuType.NONE, "없는메뉴", 0);
+
+    private final String type;
+    private final String name;
+    private final int price;
+
+    Menu(String type, String name, int price) {
+        this.type = type;
+        this.name = name;
+        this.price = price;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getPrice() {
+        return price;
+    }
+
+    public static Menu findByName(String menuName) {
+        return Arrays.stream(Menu.values())
+                .filter(menu -> menu.getName().equals(menuName))
+                .findFirst()
+                .orElse(NONE);
+    }
+
+    public static boolean isExistByName(String menuName) {
+        return Arrays.stream(Menu.values())
+                .anyMatch(menu -> menu.getName().equals(menuName));
+    }
+
+}

리뷰: 이 코드는 깔끔하게 잘 작성하셨네요. 👍
@@ -0,0 +1,30 @@
+package christmas.domain;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertAll;
+
+import java.util.List;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+class EventTest {
+
+    @DisplayName("날짜에 해당하는 모든 이벤트들을 찾는다.")
+    @Test
+    void findAllByDay() throws Exception {
+        //given
+        int day = 3;
+        //when
+        List<Event> events = Event.findAllByDay(3);
+        //then
+        assertAll(
+
+                () -> assertThat(events).contains(Event.WEEKDAY),
+                () -> assertThat(events).contains(Event.CHRISTMAS),
+                () -> assertThat(events).contains(Event.SPECIAL),
+                () -> assertThat(events).contains(Event.PRESENTATION)
+        );
+    }
+
+
+}
\ No newline at end of file

리뷰: 테스트 코드라 해도 매직 넘버를 제거해주면 좋았을 것 같아요.
@@ -0,0 +1,72 @@
+package christmas.domain;
+
+import christmas.constant.Constant;
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class Benefit {
+
+    private final Map<Event, Integer> details;
+
+    public Benefit() {
+        this.details = new EnumMap<>(Event.class);
+        initialBenefitDetails();
+    }
+
+    public int calculateTotalDiscount() {
+        return details.values()
+                .stream()
+                .reduce(0, Integer::sum);
+    }
+
+    public void addDiscountIntoDetails(Event event, int discount) {
+        details.computeIfPresent(event, (key, value) -> value + discount);
+    }
+
+    public String detailsToString() {
+        StringBuilder sb = new StringBuilder(Constant.NOTHING + System.lineSeparator());
+        if (calculateTotalDiscount() != 0) {
+            sb.setLength(0);
+            appendDetails(sb);
+        }
+        return sb.toString();
+    }
+
+    public int calculatePresentationPrice() {
+        return details.get(Event.PRESENTATION);
+    }
+
+    public String presentationMenuToString() {
+        Event presentation = Event.PRESENTATION;
+        StringBuilder sb = new StringBuilder(Constant.NOTHING + System.lineSeparator());
+        int discount = details.get(presentation);
+        if (discount != 0) {
+            sb.setLength(0);
+            sb.append(presentation.getTarget());
+            sb.append(Constant.SPACE);
+            sb.append(String.format(Constant.MENU_UNIT, Math.abs(discount / Event.PRESENTATION.getDiscount())));
+            sb.append(System.lineSeparator());
+        }
+        return sb.toString();
+    }
+
+
+    private void appendDetails(StringBuilder benefitDetail) {
+        for (Entry<Event, Integer> entry : details.entrySet()) {
+            String eventMessage = entry.getKey().getMessage();
+            int discount = entry.getValue();
+            if (discount != 0) {
+                benefitDetail.append(eventMessage);
+                benefitDetail.append(Constant.SPACE);
+                benefitDetail.append(String.format(Constant.PRICE_UNIT, discount));
+                benefitDetail.append(System.lineSeparator());
+            }
+        }
+    }
+
+    private void initialBenefitDetails() {
+        Event.getAllEvent().forEach(event -> details.put(event, 0));
+    }
+
+}

리뷰: > add 메소드를 구현하는 것보다는 생성자에서 완성된 EnumMap을 받는 게 좋을 것 같아요. add 메소드를 이용해서 EnumMap을 만드는 책임은 BenefitBuilder 객체를 새로 만들어서 맡기는 게 좋아요.

그렇겠네요! 빌더를 사용하면 추후 잘못된 Benfit 결과가 나왔을때 크로스체크하기도 용이하겠네요 ! 좋은 피드백 감사합니다 ㅎㅎ
@@ -0,0 +1,14 @@
+package christmas.constant;
+
+public class MenuConstant {
+
+    public static class MenuType {
+
+        public static final String APPETIZER = "appetizer";
+        public static final String MAIN = "main";
+        public static final String DESSERT = "dessert";
+        public static final String DRINK = "drink";
+        public static final String NONE = "none";
+
+    }
+}

리뷰: > enum에 APPETIZER, MAIN, DESSERT, DRINK만 적으셔도 됐을 것 같아요. string 상수가 이용되는 걸 보지 못했어요.

Event에도 사용되는 상수들이기 때문에 상수화를 진행한거였습니다! WEEKDAY, WEEKEND일때 각각 dessert와 main을 할인 받기 때문에 해당 string의 재사용성위해 따로 상수화를 했습니다!
@@ -0,0 +1,103 @@
+package christmas.domain;
+
+import christmas.constant.EventConstant.Condition;
+import christmas.constant.EventConstant.Days;
+import christmas.constant.EventConstant.Discount;
+import christmas.constant.EventConstant.Message;
+import christmas.constant.EventConstant.Target;
+import christmas.constant.EventConstant.TotalDiscount;
+import java.util.Arrays;
+import java.util.List;
+
+public enum Event {
+
+    /*
+    index0(Condition): 총 주문 금액 조건
+    index1(Days): 적용 날짜
+    index2(Target): 할인 메뉴 또는 증정품
+    index3(Discount): 할인 금액
+    index4(DiscountFromTotal): 총금액에서 할인 금액
+    index5(Message): 할인 메시지 (e.g. WEEKDAY -> "평일 할인:")
+    */
+    SPECIAL(Condition.CASE_A,
+            Days.SPECIAL,
+            Target.SPECIAL,
+            Discount.SPECIAL,
+            TotalDiscount.SPECIAL,
+            Message.SPECIAL),
+
+    WEEKDAY(Condition.CASE_A,
+            Days.WEEKDAY,
+            Target.WEEKDAY,
+            Discount.WEEKDAY,
+            TotalDiscount.OTHER,
+            Message.WEEKDAY),
+
+    WEEKEND(Condition.CASE_A,
+            Days.WEEKEND,
+            Target.WEEKEND,
+            Discount.WEEKEND,
+            TotalDiscount.OTHER,
+            Message.WEEKEND),
+
+    CHRISTMAS(Condition.CASE_A,
+            Days.EVERY,
+            Target.CHRISTMAS,
+            Discount.CHRISTMAS,
+            TotalDiscount.OTHER,
+            Message.CHRISTMAS),
+
+    PRESENTATION(Condition.CASE_B,
+            Days.EVERY,
+            Target.PRESENTATION,
+            Discount.PRESENTATION,
+            TotalDiscount.OTHER,
+            Message.PRESENTATION);
+
+
+    private final int condition;
+    private final List<Integer> days;
+    private final String target;
+    private final int discount;
+    private final int discountFromTotal;
+    private final String message;
+
+    Event(int condition, List<Integer> days, String target, int discountMenu, int discountTotal, String message) {
+        this.condition = condition;
+        this.days = days;
+        this.target = target;
+        this.discount = discountMenu;
+        this.discountFromTotal = discountTotal;
+        this.message = message;
+    }
+
+    public static List<Event> findAllByDay(int day) {
+        return Arrays.stream(Event.values())
+                .filter(event -> event.days.contains(day) || event.days.contains(day % 7))
+                .toList();
+    }
+
+    public static List<Event> getAllEvent() {
+        return Arrays.stream(Event.values()).toList();
+    }
+
+    public int getDiscount() {
+        return discount;
+    }
+
+    public int getDiscountFromTotal() {
+        return discountFromTotal;
+    }
+
+    public String getTarget() {
+        return target;
+    }
+
+    public int getCondition() {
+        return condition;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

리뷰: > 내부 값과 구현이 뿔뿔이 흩어져 있네요... 복잡하지 않다면, enum 하나에 전부 넣어주세요. 이렇게 만들면 유지보수가 더 힘들어져요.

저는 요소들이 많아서 복잡하다고 생각했습니다. 그래서 가독성도 높일겸 내부 값을 따로 분리하였습니다! 그리고 유지보수시에도 해당 값들이 모여있는 파일만 보면 되도록 의도한거였습니다!
@@ -0,0 +1,65 @@
+package christmas.domain;
+
+import christmas.constant.MenuConstant.MenuType;
+import java.util.Arrays;
+
+public enum Menu {
+
+    //애피타이저
+    MUSHROOM_SOUP(MenuType.APPETIZER, "양송이수프", 6_000),
+    TAPAS(MenuType.APPETIZER, "타파스", 5_500),
+    CAESAR_SALAD(MenuType.APPETIZER, "시저샐러드", 8_000),
+
+    //메인
+    T_BONE_STEAK(MenuType.MAIN, "티본스테이크", 55_000),
+    BBQ_RIBS(MenuType.MAIN, "바비큐립", 54_000),
+    SEAFOOD_PASTA(MenuType.MAIN, "해산물파스타", 35_000),
+    CHRISTMAS_PASTA(MenuType.MAIN, "크리스마스파스타", 25_000),
+
+    //디저트
+    CHOCOLATE_CAKE(MenuType.DESSERT, "초코케이크", 15_000),
+    ICE_CREAM(MenuType.DESSERT, "아이스크림", 5_000),
+
+    //음료
+    ZERO_COKE(MenuType.DRINK, "제로콜라", 3_000),
+    RED_WINE(MenuType.DRINK, "레드와인", 60_000),
+    CHAMPAGNE(MenuType.DRINK, "샴페인", 25_000),
+
+    //NONE
+    NONE(MenuType.NONE, "없는메뉴", 0);
+
+    private final String type;
+    private final String name;
+    private final int price;
+
+    Menu(String type, String name, int price) {
+        this.type = type;
+        this.name = name;
+        this.price = price;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getPrice() {
+        return price;
+    }
+
+    public static Menu findByName(String menuName) {
+        return Arrays.stream(Menu.values())
+                .filter(menu -> menu.getName().equals(menuName))
+                .findFirst()
+                .orElse(NONE);
+    }
+
+    public static boolean isExistByName(String menuName) {
+        return Arrays.stream(Menu.values())
+                .anyMatch(menu -> menu.getName().equals(menuName));
+    }
+
+}

리뷰: > 이 코드는 깔끔하게 잘 작성하셨네요. 👍

감사합니다 ㅎㅎ!
@@ -0,0 +1,30 @@
+package christmas.domain;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertAll;
+
+import java.util.List;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+class EventTest {
+
+    @DisplayName("날짜에 해당하는 모든 이벤트들을 찾는다.")
+    @Test
+    void findAllByDay() throws Exception {
+        //given
+        int day = 3;
+        //when
+        List<Event> events = Event.findAllByDay(3);
+        //then
+        assertAll(
+
+                () -> assertThat(events).contains(Event.WEEKDAY),
+                () -> assertThat(events).contains(Event.CHRISTMAS),
+                () -> assertThat(events).contains(Event.SPECIAL),
+                () -> assertThat(events).contains(Event.PRESENTATION)
+        );
+    }
+
+
+}
\ No newline at end of file

리뷰: > 테스트 코드라 해도 매직 넘버를 제거해주면 좋았을 것 같아요.

동의합니다! 안그래도 저런 매직넘버를 따로 enum으로 처리해서 테스트하는 방법이 있더라구요 ㅎㅎ 한번 개선해보겠습니다!
@@ -0,0 +1,16 @@
+package christmas.constant;
+
+import java.util.regex.Pattern;
+
+public class Constant {
+
+    public static final String DELIMITER_COMMA = ",";
+    public static final String DELIMITER_HYPHEN = "-";
+    public static final String SPACE = " ";
+    public static final String MENU_UNIT = "%d개";
+    public static final String PRICE_UNIT = "%,d원";
+    public static final String NOTHING = "없음";
+    public static final int MENU_MAXIMUM_QUANTITY = 20;
+    public static final Pattern MENU_PATTERN = Pattern.compile("^[a-z|A-z|ㄱ-ㅎ|가-힣|0-9|\s]+-[0-9\s]+$");
+    public static final Pattern DAY_PATTERN = Pattern.compile("^[0-9\s]+$");
+}

리뷰: 정규 표현식까지 활용해서 상수 관리하는 부분에서 최대한 단일 클래스 한정 private 필드 상수를 줄이려고 하신 노력이 보입니다. 아주 좋네요!
@@ -0,0 +1,58 @@
+package christmas.constant;
+
+import christmas.constant.MenuConstant.MenuType;
+import christmas.domain.Menu;
+import java.util.List;
+
+public class EventConstant {
+    public static class Condition {
+
+        public static final int CASE_A = 10000;
+        public static final int CASE_B = 120000;
+    }
+
+    public static class Days {
+
+        public static final List<Integer> EVERY = List.of(1, 2, 3, 4, 5, 6);
+        public static final List<Integer> WEEKDAY = List.of(0, 3, 4, 5, 6);
+        public static final List<Integer> WEEKEND = List.of(1, 2);
+        public static final List<Integer> SPECIAL = List.of(3, 25);
+
+    }
+
+    public static class Target {
+
+        public static final String WEEKDAY = MenuType.DESSERT;
+        public static final String WEEKEND = MenuType.MAIN;
+        public static final String CHRISTMAS = MenuType.NONE;
+        public static final String SPECIAL = MenuType.NONE;
+        public static final String PRESENTATION = Menu.CHAMPAGNE.getName();
+
+    }
+
+    public static class Discount {
+
+        public static final int WEEKDAY = 2023;
+        public static final int WEEKEND = 2023;
+        public static final int CHRISTMAS = 100;
+        public static final int SPECIAL = 0;
+        public static final int PRESENTATION = Menu.CHAMPAGNE.getPrice() * 1;
+
+    }
+
+    public static class TotalDiscount {
+        public static final int SPECIAL = 1000;
+        public static final int OTHER = 0;
+    }
+
+    public static class Message {
+
+        public static final String SPECIAL = "특별 할인:";
+        public static final String WEEKDAY = "평일 할인:";
+        public static final String WEEKEND = "주말 할인:";
+        public static final String CHRISTMAS = "크리스마스 디데이 할인:";
+        public static final String PRESENTATION = "증정 이벤트:";
+
+    }
+
+}

리뷰: 백의 자리를 기준으로 구분자 "_"를 넣어주시면 가독성이 증진될 것 같습니다:)
@@ -0,0 +1,58 @@
+package christmas.constant;
+
+import christmas.constant.MenuConstant.MenuType;
+import christmas.domain.Menu;
+import java.util.List;
+
+public class EventConstant {
+    public static class Condition {
+
+        public static final int CASE_A = 10000;
+        public static final int CASE_B = 120000;
+    }
+
+    public static class Days {
+
+        public static final List<Integer> EVERY = List.of(1, 2, 3, 4, 5, 6);
+        public static final List<Integer> WEEKDAY = List.of(0, 3, 4, 5, 6);
+        public static final List<Integer> WEEKEND = List.of(1, 2);
+        public static final List<Integer> SPECIAL = List.of(3, 25);
+
+    }
+
+    public static class Target {
+
+        public static final String WEEKDAY = MenuType.DESSERT;
+        public static final String WEEKEND = MenuType.MAIN;
+        public static final String CHRISTMAS = MenuType.NONE;
+        public static final String SPECIAL = MenuType.NONE;
+        public static final String PRESENTATION = Menu.CHAMPAGNE.getName();
+
+    }
+
+    public static class Discount {
+
+        public static final int WEEKDAY = 2023;
+        public static final int WEEKEND = 2023;
+        public static final int CHRISTMAS = 100;
+        public static final int SPECIAL = 0;
+        public static final int PRESENTATION = Menu.CHAMPAGNE.getPrice() * 1;
+
+    }
+
+    public static class TotalDiscount {
+        public static final int SPECIAL = 1000;
+        public static final int OTHER = 0;
+    }
+
+    public static class Message {
+
+        public static final String SPECIAL = "특별 할인:";
+        public static final String WEEKDAY = "평일 할인:";
+        public static final String WEEKEND = "주말 할인:";
+        public static final String CHRISTMAS = "크리스마스 디데이 할인:";
+        public static final String PRESENTATION = "증정 이벤트:";
+
+    }
+
+}

리뷰: 정적 중첩 클래스를 활용해서 인스턴스화를 방지할 수 있네요...! 추가로 각 클래스 별로 공백 줄바꿈을 활용해서 가독성을 높이신 게 아주 좋은 것 같습니다:)