ewhk9887/korean_code_reviews_from_github huggingface dataset:
@@ -1,6 +1,18 @@
 package domain.card;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 public class Card {
+    private static final List<Card> CACHED_CARDS = new ArrayList<>();
+
+    static {
+        for (Symbol symbol : Symbol.values()) {
+            Arrays.stream(Type.values())
+                    .forEach(type -> CACHED_CARDS.add(new Card(symbol, type)));
+        }
+    }
 
     private final Symbol symbol;
     private final Type type;
@@ -10,4 +22,23 @@ public Card(Symbol symbol, Type type) {
         this.type = type;
     }
 
-}
\ No newline at end of file
+    public boolean isAceType() {
+        return type.isAce();
+    }
+
+    public boolean isTenNumberType() {
+        return type.isTenNumber();
+    }
+
+    public Symbol getSymbol() {
+        return symbol;
+    }
+
+    public Type getType() {
+        return type;
+    }
+
+    public static List<Card> getCachedCards() {
+        return CACHED_CARDS;
+    }
+}

리뷰: 피드백 감사합니다 :)
Enum은 선언된 것들만 존재하기 때문에 유일하다고 볼 수 있고, 그래서 `==`을 통해 `동일성` 비교를 하는게 맞을까요?
물론 `null`에 대한 방어도 가능하겠지만요!
@@ -0,0 +1,36 @@
+package domain.card;
+
+import domain.user.User;
+import domain.user.Users;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class Deck {
+    private static final int ZERO = 0;
+    private static final int NUMBER_OF_CARDS_BY_RULE = 2;
+    private static final int TOP = 0;
+
+    private final List<Card> cards;
+
+    public Deck() {
+        this.cards = new ArrayList<>(Card.getCachedCards());
+        Collections.shuffle(cards);
+    }
+
+    public void distributeCardsToUsers(Users users) {
+        for (int i = ZERO; i < NUMBER_OF_CARDS_BY_RULE; i++) {
+            users.receiveCards(this);
+        }
+    }
+
+    public void distributeCard(User user) {
+        user.draw(cards.remove(TOP));
+    }
+
+    public List<Card> getCards() {
+        return Collections.unmodifiableList(cards);
+    }
+
+}

리뷰: 반영하도록 하겠습니다 :)
@@ -0,0 +1,36 @@
+package domain.card;
+
+import domain.user.User;
+import domain.user.Users;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class Deck {
+    private static final int ZERO = 0;
+    private static final int NUMBER_OF_CARDS_BY_RULE = 2;
+    private static final int TOP = 0;
+
+    private final List<Card> cards;
+
+    public Deck() {
+        this.cards = new ArrayList<>(Card.getCachedCards());
+        Collections.shuffle(cards);
+    }
+
+    public void distributeCardsToUsers(Users users) {
+        for (int i = ZERO; i < NUMBER_OF_CARDS_BY_RULE; i++) {
+            users.receiveCards(this);
+        }
+    }
+
+    public void distributeCard(User user) {
+        user.draw(cards.remove(TOP));
+    }
+
+    public List<Card> getCards() {
+        return Collections.unmodifiableList(cards);
+    }
+
+}

리뷰: 놓쳤던 부분인 것 같습니다. 반영하도록 하겠습니다!
@@ -0,0 +1,34 @@
+package domain.result;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Arrays;
+
+public enum GameResult {
+    WIN(1, new BigDecimal("1")),
+    DRAW(0, new BigDecimal("0")),
+    LOSE(-1, new BigDecimal("-1"));
+
+    private static final int SCALE = 0;
+
+    private int value;
+    private BigDecimal dividendRate;
+
+    GameResult(int value, BigDecimal dividendRate) {
+        this.value = value;
+        this.dividendRate = dividendRate;
+    }
+
+    public static GameResult determineGameResult(int gameResultValue) {
+        return Arrays.stream(GameResult.values())
+                .filter(gameResult -> gameResult.value == gameResultValue)
+                .findFirst()
+                .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 게임 결과입니다."));
+    }
+
+    public BigDecimal multiplyDividendRate(BigDecimal amount) {
+        return dividendRate.multiply(amount)
+                .setScale(SCALE, RoundingMode.HALF_EVEN);
+    }
+
+}

리뷰: 유념하도록 하겠습니다.
@@ -0,0 +1,36 @@
+package domain.card;
+
+import domain.user.User;
+import domain.user.Users;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class Deck {
+    private static final int ZERO = 0;
+    private static final int NUMBER_OF_CARDS_BY_RULE = 2;
+    private static final int TOP = 0;
+
+    private final List<Card> cards;
+
+    public Deck() {
+        this.cards = new ArrayList<>(Card.getCachedCards());
+        Collections.shuffle(cards);
+    }
+
+    public void distributeCardsToUsers(Users users) {
+        for (int i = ZERO; i < NUMBER_OF_CARDS_BY_RULE; i++) {
+            users.receiveCards(this);
+        }
+    }
+
+    public void distributeCard(User user) {
+        user.draw(cards.remove(TOP));
+    }
+
+    public List<Card> getCards() {
+        return Collections.unmodifiableList(cards);
+    }
+
+}

리뷰: 피드백 감사합니다. 반영하겠습니다 :)
@@ -1,4 +1,70 @@
 package controller;
 
+
+import domain.card.Deck;
+import domain.user.*;
+import view.InputView;
+import view.OutputView;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import static java.util.stream.Collectors.toList;
+
 public class BlackJackGame {
+
+    public static void main(String[] args) {
+        Users users = inputUsers();
+        Deck deck = new Deck();
+        deck.distributeCardsToUsers(users);
+        OutputView.printDistributeCardsMessageAndCardsOfAllUsers(users);
+        proceedPlayersTurn(users.findPlayers(), deck);
+        proceedDealerTurn(users.findDealer(), deck);
+        OutputView.printAllUsersResult(users);
+        OutputView.printAllUsersProfit(users);
+    }
+
+    private static Users inputUsers() {
+        List<UserName> userNames = inputPlayerNames();
+        List<User> users = userNames.stream()
+                .map(BlackJackGame::convertNamesAndBettingMoneyIntoPlayers)
+                .collect(toList());
+        users.add(new Dealer());
+        return new Users(users);
+    }
+
+    private static List<UserName> inputPlayerNames() {
+        return InputView.inputNames().stream()
+                .map(String::trim)
+                .map(UserName::new)
+                .collect(toList());
+    }
+
+    private static Player convertNamesAndBettingMoneyIntoPlayers(UserName userName) {
+        BettingMoney bettingMoney = convertAmountIntoBettingMoney(InputView.inputAmount(userName));
+        return new Player(userName, bettingMoney);
+    }
+
+    private static BettingMoney convertAmountIntoBettingMoney(BigDecimal amount) {
+        return new BettingMoney(amount);
+    }
+
+    private static void proceedPlayersTurn(List<Player> players, Deck deck) {
+        players.forEach(player -> proceedPlayerTurn(player, deck));
+    }
+
+    private static void proceedPlayerTurn(Player player, Deck deck) {
+        while (player.isOwnTurn()) {
+            player.proceedOwnTurn(InputView.inputAnswer(player), deck);
+            OutputView.printCardsHeldByPlayer(player);
+        }
+    }
+
+    private static void proceedDealerTurn(Dealer dealer, Deck deck) {
+        while (dealer.isOwnTurn()) {
+            dealer.hit(deck);
+            OutputView.printDealerGetOneMoreCard();
+        }
+    }
+
 }

리뷰: 아직 컨트롤러에 대한 개념이 완전치 않아서 그런 것 같습니다. 반영하도록 하겠습니다!
@@ -15,7 +15,7 @@ const CenterWrapper = styled.div`
   overflow: scroll;
   height: calc(100dvh - 126px);
   align-items: center;
-  justigy-content: space-between;
+  justify-content: space-between;
   padding-top: 80px;
   &::-webkit-scrollbar {
     display: none;
@@ -155,47 +155,52 @@ const ReviewPage = () => {
   };
 
   return (
-    <><AppBar onBack={() => navigate(-1)} title="산책로 리뷰" /><CenterWrapper>
-      <ContentWrapper>
-        <TitleWrapper>
-          <RequiredMark>*</RequiredMark>
-          <Title>이번 산책은 어떠셨나요?</Title>
-        </TitleWrapper>
-
-        <StarContainer>
-          {[1, 2, 3, 4, 5].map((value) => (
-            <StyledStarIcon
-              key={value}
-              isactive={((hoveredRating || rating) >= value).toString()}
-              onMouseEnter={() => setHoveredRating(value)}
-              onMouseLeave={() => setHoveredRating(0)}
-              onClick={() => setRating(value)} />
-          ))}
-        </StarContainer>
-
-        <Divider margin="0 0 2rem 0" height="3px" />
-
-        <TitleWrapper>
-          <RequiredMark>*</RequiredMark>
-          <Title fontSize="13px">산책로에 대한 솔직 리뷰를 남겨주세요!</Title>
-        </TitleWrapper>
-
-        <TextAreaWrapper>
-          <TextArea
-            value={review}
-            onChange={(e) => setReview(e.target.value.slice(0, 100))}
-            placeholder="리뷰를 입력해주세요" />
-          <CharCount>
-            <span>{review.length}</span> / 100
-          </CharCount>
-        </TextAreaWrapper>
-      </ContentWrapper>
-
-      <Button isActive={isActive} onClick={handleSubmit}>
-        리뷰 등록하기
-      </Button>
-    </CenterWrapper><BottomNavigation /></>
-
+    <>
+      <AppBar onBack={() => navigate(-1)} title="산책로 리뷰" />
+      <CenterWrapper>
+        <ContentWrapper>
+          <TitleWrapper>
+            <RequiredMark>*</RequiredMark>
+            <Title>이번 산책은 어떠셨나요?</Title>
+          </TitleWrapper>
+
+          <StarContainer>
+            {[1, 2, 3, 4, 5].map((value) => (
+              <StyledStarIcon
+                key={value}
+                isactive={((hoveredRating || rating) >= value).toString()}
+                onMouseEnter={() => setHoveredRating(value)}
+                onMouseLeave={() => setHoveredRating(0)}
+                onClick={() => setRating(value)}
+              />
+            ))}
+          </StarContainer>
+
+          <Divider margin="0 0 2rem 0" height="3px" />
+
+          <TitleWrapper>
+            <RequiredMark>*</RequiredMark>
+            <Title fontSize="13px">산책로에 대한 솔직 리뷰를 남겨주세요!</Title>
+          </TitleWrapper>
+
+          <TextAreaWrapper>
+            <TextArea
+              value={review}
+              onChange={(e) => setReview(e.target.value.slice(0, 100))}
+              placeholder="리뷰를 입력해주세요"
+            />
+            <CharCount>
+              <span>{review.length}</span> / 100
+            </CharCount>
+          </TextAreaWrapper>
+        </ContentWrapper>
+
+        <Button isActive={isActive} onClick={handleSubmit}>
+          리뷰 등록하기
+        </Button>
+      </CenterWrapper>
+      <BottomNavigation />
+    </>
   );
 };
 

리뷰: 그리고 성공 시 페이지 이동 코드가 누락된 것 같습니다!
@@ -37,14 +37,14 @@ export const showReviewRating = async (
 // 산책로 리뷰 내용보기 api
 export const showReviewContent = async (
   walkwayId: string,
-  type: string
+  sort: string
 ): Promise<{
   reviews: ReviewContentType[];
 }> => {
   try {
     const response = await instance.get<
       ApiResponseFormat<{ reviews: ReviewContentType[] }>
-    >(`/walkways/${walkwayId}/review/content?type=${type}`);
+    >(`/walkways/${walkwayId}/review/content?sort=${sort}`);
     return response.data.data;
   } catch (error) {
     throw error;

리뷰: `showReviewContent` 호출 시 응답으로 받아오는 `period` 필드가 ui 컴포넌트에 누락된 것 같아요!
@@ -0,0 +1,29 @@
+package christmas.domain.event;
+
+public class Badge {
+    public static final int BADGE_STAR_LIMIT = 5_000;
+    public static final int BADGE_TREE_LIMIT = 10_000;
+    public static final int BADGE_SANTA_LIMIT = 20_000;
+    private final String badgeType;
+
+    public Badge(int totalDiscountAmount) {
+        this.badgeType = determineBadge(totalDiscountAmount);
+    }
+
+    private String determineBadge(int totalBenefitAmount) {
+        if (totalBenefitAmount >= BADGE_SANTA_LIMIT) {
+            return "산타";
+        }
+        if (totalBenefitAmount >= BADGE_TREE_LIMIT) {
+            return "트리";
+        }
+        if (totalBenefitAmount >= BADGE_STAR_LIMIT) {
+            return "별";
+        }
+        return "없음";
+    }
+
+    public String getBadgeType() {
+        return badgeType;
+    }
+}

리뷰: 뱃지는 Enum으로 관리해주셔도 좋을 것 같아요.
@@ -0,0 +1,18 @@
+package christmas.domain.event.items;
+
+import christmas.domain.event.enums.EventType;
+
+public abstract class Event {
+    private int discountAmount;
+    private final EventType eventType;
+
+    public Event(EventType eventType) {
+        this.eventType = eventType;
+    }
+
+    public EventType getEventType() {
+        return eventType;
+    }
+
+    public abstract int calculateDiscount();
+}

리뷰: 이벤트를 인터페이스로 관리하신 분들이 많은데 상속을 활용하신 점 흥미로워요 👍
@@ -0,0 +1,74 @@
+package christmas.domain.menu;
+
+import christmas.domain.menu.items.Appetizer;
+import christmas.domain.menu.items.Beverage;
+import christmas.domain.menu.items.Dessert;
+import christmas.domain.menu.items.MainDish;
+import christmas.domain.menu.items.MenuItem;
+import java.util.Arrays;
+import java.util.List;
+
+public class Menu {
+    private static final List<MenuItem> appetizers = Arrays.asList(Appetizer.values());
+    private static final List<MenuItem> mainCourses = Arrays.asList(MainDish.values());
+    private static final List<MenuItem> desserts = Arrays.asList(Dessert.values());
+    private static final List<MenuItem> beverages = Arrays.asList(Beverage.values());
+
+    private Menu() {
+    }
+
+    public static String getMenuCategory(String menu) {
+        if (isMenuInCategory(menu, appetizers)) {
+            return "Appetizer";
+        }
+        if (isMenuInCategory(menu, mainCourses)) {
+            return "MainDish";
+        }
+        if (isMenuInCategory(menu, desserts)) {
+            return "Dessert";
+        }
+        if (isMenuInCategory(menu, beverages)) {
+            return "Beverage";
+        }
+        return "None";
+    }
+
+    private static boolean isMenuInCategory(String menu, Iterable<? extends MenuItem> category) {
+        for (MenuItem item : category) {
+            if (item.getName().equals(menu)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static int getMenuPrice(String menuName, String menuType) {
+        List<MenuItem> category;
+        switch (menuType) {
+            case "Appetizer":
+                category = appetizers;
+                break;
+            case "MainDish":
+                category = mainCourses;
+                break;
+            case "Dessert":
+                category = desserts;
+                break;
+            case "Beverage":
+                category = beverages;
+                break;
+            default:
+                return -1;
+        }
+        return getPrice(menuName, category);
+    }
+
+    private static int getPrice(String menuName, List<MenuItem> category) {
+        for (MenuItem item : category) {
+            if (item.getName().equals(menuName)) {
+                return item.getPrice();
+            }
+        }
+        return -1;
+    }
+}

리뷰: 리스트에 추가로 수정이나 삭제 작업이 없다면 List.of()로 immutable list 를 사용하는 것도 좋을 것 같아요.
@@ -0,0 +1,27 @@
+package christmas.domain.menu.items;
+
+public enum Appetizer implements MenuItem {
+    YANGSONG_ISUPE("양송이수프", 6000),
+    TAPAS("타파스", 5500),
+    CAESAR_SALAD("시저샐러드", 8000);
+
+    private final String name;
+    private final int price;
+
+    Appetizer(String name, int price) {
+        this.name = name;
+        this.price = price;
+    }
+
+    public String getType() {
+        return "Appitizer";
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getPrice() {
+        return price;
+    }
+}

리뷰: 변수 네이밍 컨벤션에 이러한 네이밍은 지양하도록 한 것으로 기억해요. BUTTON_MUSHROOM__SOUP 이나 MUSHROOM_SOUP 이 더 적절한 변수 이름이 아닐까 생각됩니다.
@@ -0,0 +1,25 @@
+package christmas.domain.event.enums;
+
+import java.time.LocalDate;
+
+public enum EventDate {
+    CHRISTMAS_DAY(LocalDate.of(2023, 12, 25));
+
+    private final LocalDate date;
+
+    EventDate(LocalDate date) {
+        this.date = date;
+    }
+
+    public LocalDate getDate() {
+        return date;
+    }
+
+    public int getYear() {
+        return date.getYear();
+    }
+
+    public int getMonthValue() {
+        return date.getMonthValue();
+    }
+}

리뷰: EventDate 는 여러 이벤트들에서 사용하는 날짜를 정의한 enum 이라고 생각되지만 실제로 크리스마스 밖에 정의되지 않았습니다. 지금처럼 다른 이벤트들의 날짜들도 같이 관리할게 아니라면 클래스 내에서 상수로 선언해도 충분하지 않을까 하는 생각이 드는데 어떻게 생각하시나요?
@@ -0,0 +1,54 @@
+package christmas.domain.event.enums;
+
+import christmas.domain.event.items.ChristmasDdayDiscount;
+import christmas.domain.event.items.Event;
+import christmas.domain.event.items.GiftPromotion;
+import christmas.domain.event.items.SpecialDiscount;
+import christmas.domain.event.items.WeekdayDiscount;
+import christmas.domain.event.items.WeekendDiscount;
+import christmas.dto.EventParamsDTO;
+
+public enum EventType {
+    CHRISTMAS_DDAY_DISCOUNT("크리스마스 디데이 할인") {
+        @Override
+        public Event createEvent(EventParamsDTO params) {
+            return new ChristmasDdayDiscount(params.getDday());
+        }
+    },
+    WEEKDAY_DISCOUNT("평일 할인") {
+        @Override
+        public Event createEvent(EventParamsDTO params) {
+            return new WeekdayDiscount(params.getDessertCount());
+        }
+    },
+    WEEKEND_DISCOUNT("주말 할인") {
+        @Override
+        public Event createEvent(EventParamsDTO params) {
+            return new WeekendDiscount(params.getMainDishCount());
+        }
+    },
+    SPECIAL_DISCOUNT("특별 할인") {
+        @Override
+        public Event createEvent(EventParamsDTO params) {
+            return new SpecialDiscount();
+        }
+    },
+    GIFT_PROMOTION("증정 이벤트") {
+        @Override
+        public Event createEvent(EventParamsDTO params) {
+            return new GiftPromotion();
+        }
+    };
+
+    private final String eventType;
+
+    EventType(String eventType) {
+        this.eventType = eventType;
+    }
+
+    public String getEventType() {
+        return eventType;
+    }
+
+    public abstract Event createEvent(EventParamsDTO params);
+}

리뷰: 이렇게 enum 을 사용하는 방법도 있군요!
@@ -0,0 +1,21 @@
+package christmas.domain.event.items;
+
+import christmas.domain.event.enums.EventType;
+
+public class ChristmasDdayDiscount extends Event {
+    private static final int BASE_DISCOUNT = 1_000;
+    private static final int ADDITIONAL_DISCOUNT_PER_DAY = 100;
+    private static final int CHRISTMAS_DAY = 25;
+    private final int day;
+
+    public ChristmasDdayDiscount(int day) {
+        super(EventType.CHRISTMAS_DDAY_DISCOUNT);
+        this.day = day;
+    }
+
+    @Override
+    public int calculateDiscount() {
+        int elapsedDays = day - 1;
+        return BASE_DISCOUNT + (ADDITIONAL_DISCOUNT_PER_DAY * elapsedDays);
+    }
+}

리뷰: EventDate 에서 미리 크리스마스 상수를 정의했기 때문에 그 부분을 활용하는 것이 좋아보입니다!
@@ -0,0 +1,18 @@
+package christmas.domain.event.items;
+
+import christmas.domain.event.enums.EventType;
+
+public abstract class Event {
+    private int discountAmount;
+    private final EventType eventType;
+
+    public Event(EventType eventType) {
+        this.eventType = eventType;
+    }
+
+    public EventType getEventType() {
+        return eventType;
+    }
+
+    public abstract int calculateDiscount();
+}

리뷰: 추상 클래스와 인터페이스의 차이는 추상화의 정도라고 생각합니다. 추상클래스는 `extends` 키워드를 사용하여 확장의 목적을 갖기 때문에 추가 구현의 가능성이 있을때 사용하고 인터페이스는 `implements` 키워드를 사용하여 특정 행위의 구현을 강제하는 목적이 있다고 생각합니다. 

그런점에서 볼때 이번 과제의 이벤트 도메인은 확장의 가능성은 낮다고 생각합니다. 현재로서는 이벤트에서 할 수 있는 행위는 할인 이거나 증정품 둘중 하나기 때문에 인터페이스로 구현해야한다고 생각해서 저는 인터페이스를 적용했습니다. 추상클래스로 구현하신 이유를 여쭤보고 싶습니다.
@@ -0,0 +1,74 @@
+package christmas.domain.menu;
+
+import christmas.domain.menu.items.Appetizer;
+import christmas.domain.menu.items.Beverage;
+import christmas.domain.menu.items.Dessert;
+import christmas.domain.menu.items.MainDish;
+import christmas.domain.menu.items.MenuItem;
+import java.util.Arrays;
+import java.util.List;
+
+public class Menu {
+    private static final List<MenuItem> appetizers = Arrays.asList(Appetizer.values());
+    private static final List<MenuItem> mainCourses = Arrays.asList(MainDish.values());
+    private static final List<MenuItem> desserts = Arrays.asList(Dessert.values());
+    private static final List<MenuItem> beverages = Arrays.asList(Beverage.values());
+
+    private Menu() {
+    }
+
+    public static String getMenuCategory(String menu) {
+        if (isMenuInCategory(menu, appetizers)) {
+            return "Appetizer";
+        }
+        if (isMenuInCategory(menu, mainCourses)) {
+            return "MainDish";
+        }
+        if (isMenuInCategory(menu, desserts)) {
+            return "Dessert";
+        }
+        if (isMenuInCategory(menu, beverages)) {
+            return "Beverage";
+        }
+        return "None";
+    }
+
+    private static boolean isMenuInCategory(String menu, Iterable<? extends MenuItem> category) {
+        for (MenuItem item : category) {
+            if (item.getName().equals(menu)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static int getMenuPrice(String menuName, String menuType) {
+        List<MenuItem> category;
+        switch (menuType) {
+            case "Appetizer":
+                category = appetizers;
+                break;
+            case "MainDish":
+                category = mainCourses;
+                break;
+            case "Dessert":
+                category = desserts;
+                break;
+            case "Beverage":
+                category = beverages;
+                break;
+            default:
+                return -1;
+        }
+        return getPrice(menuName, category);
+    }
+
+    private static int getPrice(String menuName, List<MenuItem> category) {
+        for (MenuItem item : category) {
+            if (item.getName().equals(menuName)) {
+                return item.getPrice();
+            }
+        }
+        return -1;
+    }
+}

리뷰: 요구사항과 다릅니다😢 이번 과제에서 `switch-case` 는 허용되지 않았습니다.
@@ -0,0 +1,27 @@
+package christmas.domain.menu.items;
+
+public enum Appetizer implements MenuItem {
+    YANGSONG_ISUPE("양송이수프", 6000),
+    TAPAS("타파스", 5500),
+    CAESAR_SALAD("시저샐러드", 8000);
+
+    private final String name;
+    private final int price;
+
+    Appetizer(String name, int price) {
+        this.name = name;
+        this.price = price;
+    }
+
+    public String getType() {
+        return "Appitizer";
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getPrice() {
+        return price;
+    }
+}

리뷰: 저도 동의합니다. 만약 협업을 하는 팀원이 외국인이라면 혼동이 생길수도 있을것 같습니다.
@@ -0,0 +1,28 @@
+package christmas.domain.menu.items;
+
+public enum MainDish implements MenuItem {
+    T_BONE_STEAK("티본스테이크", 55000),
+    BBQ_RIB("바비큐립", 54000),
+    SEAFOOD_PASTA("해산물파스타", 35000),
+    CHRISTMAS_PASTA("크리스마스파스타", 25000);
+
+    private final String name;
+    private final int price;
+
+    MainDish(String name, int price) {
+        this.name = name;
+        this.price = price;
+    }
+
+    public String getType() {
+        return "MainDish";
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getPrice() {
+        return price;
+    }
+}

리뷰: 매직 넘버를 리턴하기 보다는 매뉴 타입도 상수화 해서 리턴하는것은 어떨까요?
@@ -0,0 +1,27 @@
+package christmas.domain.menu.items;
+
+public enum Appetizer implements MenuItem {
+    YANGSONG_ISUPE("양송이수프", 6000),
+    TAPAS("타파스", 5500),
+    CAESAR_SALAD("시저샐러드", 8000);
+
+    private final String name;
+    private final int price;
+
+    Appetizer(String name, int price) {
+        this.name = name;
+        this.price = price;
+    }
+
+    public String getType() {
+        return "Appitizer";
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getPrice() {
+        return price;
+    }
+}

리뷰: 이런 부분까지는 고려하지 못했네요...!  좋은 지적 감사합니다 👍👍