ewhk9887/korean_code_reviews_from_github huggingface dataset:
@@ -0,0 +1,65 @@
+package menu.controller;
+
+import camp.nextstep.edu.missionutils.Randoms;
+import menu.model.Coach;
+import menu.model.MenuRepository;
+import menu.view.InputView;
+import menu.view.OutputView;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.IntStream;
+
+public class MenuController {
+    MenuRepository menuRepository = new MenuRepository();
+    Validate validate = new Validate();
+    List<Coach> coaches = new ArrayList<>();
+    int[] category;
+
+    public void run() {
+        OutputView.printStart();
+        setCoaches();
+        OutputView.printResultIntro();
+        setCategory();
+        OutputView.printCategory(category);
+        coaches.forEach(this::menuRecommendations);
+    }
+
+    private void setCoaches() {
+        OutputView.printInsertCoach();
+        String[] inputCoaches = InputView.insertCoach().split(",");
+        if (!validate.validateCoach(inputCoaches)) {
+            setCoaches();
+            return;
+        }
+        for (String inputCoach : inputCoaches) {
+            Coach coach = new Coach(inputCoach);
+            OutputView.printInsertNotFood(coach.getName());
+            String[] NotFood = InputView.insertNotFood().split(",");
+            Arrays.stream(NotFood).forEach(coach::addNotFood);
+            coaches.add(coach);
+        }
+    }
+
+    private void setCategory() {
+        category = new int[5];
+        IntStream.range(0, 5).forEach(i -> category[i] = Randoms.pickNumberInRange(1, 5));
+    }
+
+    private void menuRecommendations(Coach coach) {
+        String[] menus = new String[5];
+        for (int i = 0; i < 5; i++) {
+            menus[i] = selectMenu(i, coach);
+        }
+        OutputView.printMenu(coach.getName(), menus);
+    }
+
+    private String selectMenu(int index, Coach coach) {
+        String menu = menuRepository.getMenu(category[index]);
+        if (!coach.checkMenu(menu)) {
+            return selectMenu(index, coach);
+        }
+        return menu;
+    }
+}

리뷰: setter는 사용한 의도를 쉽게 파악할 수 없어 지양하는 것으로 알고있습니다!
실질적인 setter는 아니지만 다른 네이밍은 어떨까요?
@@ -0,0 +1,65 @@
+package menu.controller;
+
+import camp.nextstep.edu.missionutils.Randoms;
+import menu.model.Coach;
+import menu.model.MenuRepository;
+import menu.view.InputView;
+import menu.view.OutputView;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.IntStream;
+
+public class MenuController {
+    MenuRepository menuRepository = new MenuRepository();
+    Validate validate = new Validate();
+    List<Coach> coaches = new ArrayList<>();
+    int[] category;
+
+    public void run() {
+        OutputView.printStart();
+        setCoaches();
+        OutputView.printResultIntro();
+        setCategory();
+        OutputView.printCategory(category);
+        coaches.forEach(this::menuRecommendations);
+    }
+
+    private void setCoaches() {
+        OutputView.printInsertCoach();
+        String[] inputCoaches = InputView.insertCoach().split(",");
+        if (!validate.validateCoach(inputCoaches)) {
+            setCoaches();
+            return;
+        }
+        for (String inputCoach : inputCoaches) {
+            Coach coach = new Coach(inputCoach);
+            OutputView.printInsertNotFood(coach.getName());
+            String[] NotFood = InputView.insertNotFood().split(",");
+            Arrays.stream(NotFood).forEach(coach::addNotFood);
+            coaches.add(coach);
+        }
+    }
+
+    private void setCategory() {
+        category = new int[5];
+        IntStream.range(0, 5).forEach(i -> category[i] = Randoms.pickNumberInRange(1, 5));
+    }
+
+    private void menuRecommendations(Coach coach) {
+        String[] menus = new String[5];
+        for (int i = 0; i < 5; i++) {
+            menus[i] = selectMenu(i, coach);
+        }
+        OutputView.printMenu(coach.getName(), menus);
+    }
+
+    private String selectMenu(int index, Coach coach) {
+        String menu = menuRepository.getMenu(category[index]);
+        if (!coach.checkMenu(menu)) {
+            return selectMenu(index, coach);
+        }
+        return menu;
+    }
+}

리뷰: for문 메서드 분리하면 가독성이 더 좋아질 것 같아요!
@@ -0,0 +1,19 @@
+package menu.controller;
+
+import menu.view.OutputView;
+
+public class Validate {
+    public boolean validateCoach(String[] inputCoaches) {
+        if (inputCoaches.length > 5 || inputCoaches.length < 2) {
+            OutputView.printCoachesNumberError();
+            return false;
+        }
+        for (String inputCoach : inputCoaches) {
+            if (inputCoach.length() < 2 || inputCoach.length() > 4) {
+                OutputView.printCoachesNameError();
+                return false;
+            }
+        }
+        return true;
+    }
+}

리뷰: 클래스명은 명사 또는 명사구로 네이밍해야 하는 것으로 알고있습니다!
Validator는 어떨까요?!
@@ -0,0 +1,29 @@
+package menu.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Coach {
+    private String name;
+    private List<String> notFood = new ArrayList<>();
+    private List<String> foods = new ArrayList<>();
+
+    public Coach(String name) {
+        this.name = name;
+    }
+
+    public void addNotFood(String food) {
+        notFood.add(food);
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public boolean checkMenu(String menu) {
+        if (foods.contains(menu)) return false;
+        if (notFood.contains(menu)) return false;
+        foods.add(menu);
+        return true;
+    }
+}

리뷰: 해당 필드는 일급컬렉션을 사용하면 더 좋을 것 같아요!:)
@@ -0,0 +1,28 @@
+package menu.model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class MenuRepository {
+    private final List<String> japan =
+            Arrays.asList("규동", "우동", "미소시루", "스시", "가츠동", "오니기리", "하이라이스", "라멘", "오코노미야끼");
+    private final List<String> korea =
+            Arrays.asList("김밥", "김치찌개", "쌈밥", "된장찌개", "비빔밥", "칼국수", "불고기", "떡볶이", "제육볶음");
+    private final List<String> china =
+            Arrays.asList("깐풍기", "볶음면", "동파육", "짜장면", "짬뽕", "마파두부", "탕수육", "토마토 달걀볶음", "고추잡채");
+    private final List<String> asia =
+            Arrays.asList("팟타이", "카오 팟", "나시고렝", "파인애플 볶음밥", "쌀국수", "똠얌꿍", "반미", "월남쌈", "분짜");
+    private final List<String> western =
+            Arrays.asList("라자냐", "그라탱", "뇨끼", "끼슈", "프렌치 토스트", "바게트", "스파게티", "피자", "파니니");
+
+    public String getMenu(int category) {
+        if (category == 1) return Randoms.shuffle(japan).get(0);
+        if (category == 2) return Randoms.shuffle(korea).get(0);
+        if (category == 3) return Randoms.shuffle(china).get(0);
+        if (category == 4) return Randoms.shuffle(asia).get(0);
+        if (category == 5) return Randoms.shuffle(western).get(0);
+        return null;
+    }
+}

리뷰: repository로 메뉴 및 카테고리 정보를 관리하셨군요! 좋은 접근 방법인 것 같아요👍
이렇게 하신 이유가 있을까요??
@@ -0,0 +1,71 @@
+package menu.view;
+
+public class OutputView {
+    private static final String START = "점심 메뉴 추천을 시작합니다.";
+    private static final String INSERT_COACH_NAME = "코치의 이름을 입력해 주세요. (, 로 구분)";
+    private static final String INSERT_NOT_FOOD = "(이)가 못 먹는 메뉴를 입력해 주세요.";
+    private static final String RESULT_INTRO = "메뉴 추천 결과입니다.\n[ 구분 | 월요일 | 화요일 | 수요일 | 목요일 | 금요일 ]";
+    private static final String JAPAN_FOOD = "일식";
+    private static final String KOREA_FOOD = "한식";
+    private static final String CHINA_FOOD = "중식";
+    private static final String ASIA_FOOD = "아시안";
+    private static final String WEASTEN_FOOD = "양식";
+    private static final String CATEGORY_START = "[ 카테고리 | ";
+    private static final String STEP = " | ";
+    private static final String PRINT_START = "[ ";
+    private static final String PRINT_END = " ]";
+
+    public static void printStart() {
+        System.out.println(START);
+    }
+
+    public static void printInsertCoach() {
+        System.out.println(INSERT_COACH_NAME);
+    }
+
+    public static void printInsertNotFood(String name) {
+        System.out.println(name + INSERT_NOT_FOOD);
+    }
+
+    public static void printResultIntro() {
+        System.out.println(RESULT_INTRO);
+    }
+
+    public static void printCategory(int[] category) {
+        String[] stringCategory = new String[category.length];
+        for (int i = 0; i < 5; i++) {
+            if (category[i] == 1) stringCategory[i] = JAPAN_FOOD;
+            if (category[i] == 2) stringCategory[i] = KOREA_FOOD;
+            if (category[i] == 3) stringCategory[i] = CHINA_FOOD;
+            if (category[i] == 4) stringCategory[i] = ASIA_FOOD;
+            if (category[i] == 5) stringCategory[i] = WEASTEN_FOOD;
+        }
+        System.out.print(CATEGORY_START);
+        for (int i = 0; i < 5; i++) {
+            System.out.print(stringCategory[i]);
+            if (i != category.length - 1) {
+                System.out.print(STEP);
+            }
+        }
+        System.out.println(PRINT_END);
+    }
+
+    public static void printMenu(String coach, String[] menus) {
+        System.out.print(PRINT_START + coach + STEP);
+        for (int i = 0; i < menus.length; i++) {
+            System.out.print(menus[i]);
+            if (i != menus.length - 1) {
+                System.out.print(STEP);
+            }
+        }
+        System.out.println(PRINT_END);
+    }
+
+    public static void printCoachesNumberError() {
+        System.out.println("[ERROR] 코치는 최소 2명, 최대 5명까지입니다.");
+    }
+
+    public static void printCoachesNameError() {
+        System.out.println("[ERROR] 코치의 이름은 최소 2글자, 최대 4글자입니다.");
+    }
+}

리뷰: 에러 메시지를 따로 분리하는 것도 좋을 것 같네요!:)
@@ -0,0 +1,28 @@
+package menu.model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class MenuRepository {
+    private final List<String> japan =
+            Arrays.asList("규동", "우동", "미소시루", "스시", "가츠동", "오니기리", "하이라이스", "라멘", "오코노미야끼");
+    private final List<String> korea =
+            Arrays.asList("김밥", "김치찌개", "쌈밥", "된장찌개", "비빔밥", "칼국수", "불고기", "떡볶이", "제육볶음");
+    private final List<String> china =
+            Arrays.asList("깐풍기", "볶음면", "동파육", "짜장면", "짬뽕", "마파두부", "탕수육", "토마토 달걀볶음", "고추잡채");
+    private final List<String> asia =
+            Arrays.asList("팟타이", "카오 팟", "나시고렝", "파인애플 볶음밥", "쌀국수", "똠얌꿍", "반미", "월남쌈", "분짜");
+    private final List<String> western =
+            Arrays.asList("라자냐", "그라탱", "뇨끼", "끼슈", "프렌치 토스트", "바게트", "스파게티", "피자", "파니니");
+
+    public String getMenu(int category) {
+        if (category == 1) return Randoms.shuffle(japan).get(0);
+        if (category == 2) return Randoms.shuffle(korea).get(0);
+        if (category == 3) return Randoms.shuffle(china).get(0);
+        if (category == 4) return Randoms.shuffle(asia).get(0);
+        if (category == 5) return Randoms.shuffle(western).get(0);
+        return null;
+    }
+}

리뷰: getMenuByCategory가 조금 더 직관적인 네이밍 같다는 생각이 드는데, 성민님 의견은 어떠신가요?
@@ -0,0 +1,28 @@
+package menu.model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class MenuRepository {
+    private final List<String> japan =
+            Arrays.asList("규동", "우동", "미소시루", "스시", "가츠동", "오니기리", "하이라이스", "라멘", "오코노미야끼");
+    private final List<String> korea =
+            Arrays.asList("김밥", "김치찌개", "쌈밥", "된장찌개", "비빔밥", "칼국수", "불고기", "떡볶이", "제육볶음");
+    private final List<String> china =
+            Arrays.asList("깐풍기", "볶음면", "동파육", "짜장면", "짬뽕", "마파두부", "탕수육", "토마토 달걀볶음", "고추잡채");
+    private final List<String> asia =
+            Arrays.asList("팟타이", "카오 팟", "나시고렝", "파인애플 볶음밥", "쌀국수", "똠얌꿍", "반미", "월남쌈", "분짜");
+    private final List<String> western =
+            Arrays.asList("라자냐", "그라탱", "뇨끼", "끼슈", "프렌치 토스트", "바게트", "스파게티", "피자", "파니니");
+
+    public String getMenu(int category) {
+        if (category == 1) return Randoms.shuffle(japan).get(0);
+        if (category == 2) return Randoms.shuffle(korea).get(0);
+        if (category == 3) return Randoms.shuffle(china).get(0);
+        if (category == 4) return Randoms.shuffle(asia).get(0);
+        if (category == 5) return Randoms.shuffle(western).get(0);
+        return null;
+    }
+}

리뷰: 좋은 것 같습니다!
@@ -0,0 +1,28 @@
+package menu.model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class MenuRepository {
+    private final List<String> japan =
+            Arrays.asList("규동", "우동", "미소시루", "스시", "가츠동", "오니기리", "하이라이스", "라멘", "오코노미야끼");
+    private final List<String> korea =
+            Arrays.asList("김밥", "김치찌개", "쌈밥", "된장찌개", "비빔밥", "칼국수", "불고기", "떡볶이", "제육볶음");
+    private final List<String> china =
+            Arrays.asList("깐풍기", "볶음면", "동파육", "짜장면", "짬뽕", "마파두부", "탕수육", "토마토 달걀볶음", "고추잡채");
+    private final List<String> asia =
+            Arrays.asList("팟타이", "카오 팟", "나시고렝", "파인애플 볶음밥", "쌀국수", "똠얌꿍", "반미", "월남쌈", "분짜");
+    private final List<String> western =
+            Arrays.asList("라자냐", "그라탱", "뇨끼", "끼슈", "프렌치 토스트", "바게트", "스파게티", "피자", "파니니");
+
+    public String getMenu(int category) {
+        if (category == 1) return Randoms.shuffle(japan).get(0);
+        if (category == 2) return Randoms.shuffle(korea).get(0);
+        if (category == 3) return Randoms.shuffle(china).get(0);
+        if (category == 4) return Randoms.shuffle(asia).get(0);
+        if (category == 5) return Randoms.shuffle(western).get(0);
+        return null;
+    }
+}

리뷰: 카테고리를 int로 표현하는 것과 각 카테고리가 어떤 int값이어야 하는지가 코드 상에 명시되어있지 않아서 유지보수에 위험할 수 있을 것 같아요
@@ -0,0 +1,28 @@
+package menu.model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class MenuRepository {
+    private final List<String> japan =
+            Arrays.asList("규동", "우동", "미소시루", "스시", "가츠동", "오니기리", "하이라이스", "라멘", "오코노미야끼");
+    private final List<String> korea =
+            Arrays.asList("김밥", "김치찌개", "쌈밥", "된장찌개", "비빔밥", "칼국수", "불고기", "떡볶이", "제육볶음");
+    private final List<String> china =
+            Arrays.asList("깐풍기", "볶음면", "동파육", "짜장면", "짬뽕", "마파두부", "탕수육", "토마토 달걀볶음", "고추잡채");
+    private final List<String> asia =
+            Arrays.asList("팟타이", "카오 팟", "나시고렝", "파인애플 볶음밥", "쌀국수", "똠얌꿍", "반미", "월남쌈", "분짜");
+    private final List<String> western =
+            Arrays.asList("라자냐", "그라탱", "뇨끼", "끼슈", "프렌치 토스트", "바게트", "스파게티", "피자", "파니니");
+
+    public String getMenu(int category) {
+        if (category == 1) return Randoms.shuffle(japan).get(0);
+        if (category == 2) return Randoms.shuffle(korea).get(0);
+        if (category == 3) return Randoms.shuffle(china).get(0);
+        if (category == 4) return Randoms.shuffle(asia).get(0);
+        if (category == 5) return Randoms.shuffle(western).get(0);
+        return null;
+    }
+}

리뷰: Category를 enum으로 관리하는 것도 좋은 방향일 것 같네요!
@@ -1,32 +1,47 @@
 # AIFFEL Campus Online Code Peer Review Templete
 
-- 코더 : 코더의 이름을 작성하세요.
-- 리뷰어 : 리뷰어의 이름을 작성하세요.
+- 코더 : 이종현 님
+- 리뷰어 : 김태훈
 
 # PRT(Peer Review Template)
 
-- [ ] **1. 주어진 문제를 해결하는 완성된 코드가 제출되었나요?**
-  - 문제에서 요구하는 최종 결과물이 첨부되었는지 확인
-    - 중요! 해당 조건을 만족하는 부분을 캡쳐해 근거로 첨부
+- [ㅇ ] **1. 주어진 문제를 해결하는 완성된 코드가 제출되었나요?**
+***
+  ![image](https://github.com/user-attachments/assets/737d62fe-9cc3-4c90-afbb-b10d0c9275c2)
+
+  코드가 잘 작동됩니다.
+
+***
 - [ ] **2. 전체 코드에서 가장 핵심적이거나 가장 복잡하고 이해하기 어려운 부분에 작성된
-      주석 또는 doc string을 보고 해당 코드가 잘 이해되었나요?** - 해당 코드 블럭을 왜 핵심적이라고 생각하는지 확인 - 해당 코드 블럭에 doc string/annotation이 달려 있는지 확인 - 해당 코드의 기능, 존재 이유, 작동 원리 등을 기술했는지 확인 - 주석을 보고 코드 이해가 잘 되었는지 확인 - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
+      주석 또는 doc string을 보고 해당 코드가 잘 이해되었나요?** -
+***
+   ![image](https://github.com/user-attachments/assets/ad680d09-6ba3-4778-b738-43e88b4a0c5d)
+
+   주석을 남겨주셔서 해당 코드를 보는 사람이 조금 더 이해하기 쉽게 해 주시면 좋을듯 해요
+***
+
+     
+
+
+
+   
 - [ ] **3. 에러가 난 부분을 디버깅하여 문제를 해결한 기록을 남겼거나
-      새로운 시도 또는 추가 실험을 수행해봤나요?** - 문제 원인 및 해결 과정을 잘 기록하였는지 확인 - 프로젝트 평가 기준에 더해 추가적으로 수행한 나만의 시도,
-      실험이 기록되어 있는지 확인 - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
+      새로운 시도 또는 추가 실험을 수행해봤나요?**
+***
+해당 내역들도 남겨 두시면 좋을듯 해요
+***
 - [ ] **4. 회고를 잘 작성했나요?**
-  - 주어진 문제를 해결하는 완성된 코드 내지 프로젝트 결과물에 대해
-    배운점과 아쉬운점, 느낀점 등이 기록되어 있는지 확인
-  - 전체 코드 실행 플로우를 그래프로 그려서 이해를 돕고 있는지 확인
-    - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
-- [ ] **5. 코드가 간결하고 효율적인가요?**
-  - 파이썬 스타일 가이드 (PEP8) 를 준수하였는지 확인
-  - 코드 중복을 최소화하고 범용적으로 사용할 수 있도록 함수화/모듈화했는지 확인
-    - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
+***
+회고도 남겨 두시면 추후 보실때 좋지않을까 합니다.
+***
+- [ㅇ] **5. 코드가 간결하고 효율적인가요?**
+***
+간결하고 효율적인것 같습니다.
+***
 
 # 회고(참고 링크 및 코드 개선)
 
 ```
-# 리뷰어의 회고를 작성합니다.
-# 코드 리뷰 시 참고한 링크가 있다면 링크와 간략한 설명을 첨부합니다.
-# 코드 리뷰를 통해 개선한 코드가 있다면 코드와 간략한 설명을 첨부합니다.
+코드와 설명하시는 것을 들으니 실력이 좋으신 분 같으세요 ^^
+제가 코드에 대해 좀더 잘 이해하고, 다양한 피드백을 드릴수 있으면 좋을텐데 그러지 못해 아쉽습니다.
 ```

리뷰: 다음 번 부터 참고해서 적용해보겠습니다!
@@ -1,32 +1,47 @@
 # AIFFEL Campus Online Code Peer Review Templete
 
-- 코더 : 코더의 이름을 작성하세요.
-- 리뷰어 : 리뷰어의 이름을 작성하세요.
+- 코더 : 이종현 님
+- 리뷰어 : 김태훈
 
 # PRT(Peer Review Template)
 
-- [ ] **1. 주어진 문제를 해결하는 완성된 코드가 제출되었나요?**
-  - 문제에서 요구하는 최종 결과물이 첨부되었는지 확인
-    - 중요! 해당 조건을 만족하는 부분을 캡쳐해 근거로 첨부
+- [ㅇ ] **1. 주어진 문제를 해결하는 완성된 코드가 제출되었나요?**
+***
+  ![image](https://github.com/user-attachments/assets/737d62fe-9cc3-4c90-afbb-b10d0c9275c2)
+
+  코드가 잘 작동됩니다.
+
+***
 - [ ] **2. 전체 코드에서 가장 핵심적이거나 가장 복잡하고 이해하기 어려운 부분에 작성된
-      주석 또는 doc string을 보고 해당 코드가 잘 이해되었나요?** - 해당 코드 블럭을 왜 핵심적이라고 생각하는지 확인 - 해당 코드 블럭에 doc string/annotation이 달려 있는지 확인 - 해당 코드의 기능, 존재 이유, 작동 원리 등을 기술했는지 확인 - 주석을 보고 코드 이해가 잘 되었는지 확인 - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
+      주석 또는 doc string을 보고 해당 코드가 잘 이해되었나요?** -
+***
+   ![image](https://github.com/user-attachments/assets/ad680d09-6ba3-4778-b738-43e88b4a0c5d)
+
+   주석을 남겨주셔서 해당 코드를 보는 사람이 조금 더 이해하기 쉽게 해 주시면 좋을듯 해요
+***
+
+     
+
+
+
+   
 - [ ] **3. 에러가 난 부분을 디버깅하여 문제를 해결한 기록을 남겼거나
-      새로운 시도 또는 추가 실험을 수행해봤나요?** - 문제 원인 및 해결 과정을 잘 기록하였는지 확인 - 프로젝트 평가 기준에 더해 추가적으로 수행한 나만의 시도,
-      실험이 기록되어 있는지 확인 - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
+      새로운 시도 또는 추가 실험을 수행해봤나요?**
+***
+해당 내역들도 남겨 두시면 좋을듯 해요
+***
 - [ ] **4. 회고를 잘 작성했나요?**
-  - 주어진 문제를 해결하는 완성된 코드 내지 프로젝트 결과물에 대해
-    배운점과 아쉬운점, 느낀점 등이 기록되어 있는지 확인
-  - 전체 코드 실행 플로우를 그래프로 그려서 이해를 돕고 있는지 확인
-    - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
-- [ ] **5. 코드가 간결하고 효율적인가요?**
-  - 파이썬 스타일 가이드 (PEP8) 를 준수하였는지 확인
-  - 코드 중복을 최소화하고 범용적으로 사용할 수 있도록 함수화/모듈화했는지 확인
-    - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
+***
+회고도 남겨 두시면 추후 보실때 좋지않을까 합니다.
+***
+- [ㅇ] **5. 코드가 간결하고 효율적인가요?**
+***
+간결하고 효율적인것 같습니다.
+***
 
 # 회고(참고 링크 및 코드 개선)
 
 ```
-# 리뷰어의 회고를 작성합니다.
-# 코드 리뷰 시 참고한 링크가 있다면 링크와 간략한 설명을 첨부합니다.
-# 코드 리뷰를 통해 개선한 코드가 있다면 코드와 간략한 설명을 첨부합니다.
+코드와 설명하시는 것을 들으니 실력이 좋으신 분 같으세요 ^^
+제가 코드에 대해 좀더 잘 이해하고, 다양한 피드백을 드릴수 있으면 좋을텐데 그러지 못해 아쉽습니다.
 ```

리뷰: 크게 디버깅 해야 할 부분이 있지는 않았지만 사소한 부분이라도 일단 문제 해결에 대한 기록을 남겨볼께요.
@@ -1,32 +1,47 @@
 # AIFFEL Campus Online Code Peer Review Templete
 
-- 코더 : 코더의 이름을 작성하세요.
-- 리뷰어 : 리뷰어의 이름을 작성하세요.
+- 코더 : 이종현 님
+- 리뷰어 : 김태훈
 
 # PRT(Peer Review Template)
 
-- [ ] **1. 주어진 문제를 해결하는 완성된 코드가 제출되었나요?**
-  - 문제에서 요구하는 최종 결과물이 첨부되었는지 확인
-    - 중요! 해당 조건을 만족하는 부분을 캡쳐해 근거로 첨부
+- [ㅇ ] **1. 주어진 문제를 해결하는 완성된 코드가 제출되었나요?**
+***
+  ![image](https://github.com/user-attachments/assets/737d62fe-9cc3-4c90-afbb-b10d0c9275c2)
+
+  코드가 잘 작동됩니다.
+
+***
 - [ ] **2. 전체 코드에서 가장 핵심적이거나 가장 복잡하고 이해하기 어려운 부분에 작성된
-      주석 또는 doc string을 보고 해당 코드가 잘 이해되었나요?** - 해당 코드 블럭을 왜 핵심적이라고 생각하는지 확인 - 해당 코드 블럭에 doc string/annotation이 달려 있는지 확인 - 해당 코드의 기능, 존재 이유, 작동 원리 등을 기술했는지 확인 - 주석을 보고 코드 이해가 잘 되었는지 확인 - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
+      주석 또는 doc string을 보고 해당 코드가 잘 이해되었나요?** -
+***
+   ![image](https://github.com/user-attachments/assets/ad680d09-6ba3-4778-b738-43e88b4a0c5d)
+
+   주석을 남겨주셔서 해당 코드를 보는 사람이 조금 더 이해하기 쉽게 해 주시면 좋을듯 해요
+***
+
+     
+
+
+
+   
 - [ ] **3. 에러가 난 부분을 디버깅하여 문제를 해결한 기록을 남겼거나
-      새로운 시도 또는 추가 실험을 수행해봤나요?** - 문제 원인 및 해결 과정을 잘 기록하였는지 확인 - 프로젝트 평가 기준에 더해 추가적으로 수행한 나만의 시도,
-      실험이 기록되어 있는지 확인 - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
+      새로운 시도 또는 추가 실험을 수행해봤나요?**
+***
+해당 내역들도 남겨 두시면 좋을듯 해요
+***
 - [ ] **4. 회고를 잘 작성했나요?**
-  - 주어진 문제를 해결하는 완성된 코드 내지 프로젝트 결과물에 대해
-    배운점과 아쉬운점, 느낀점 등이 기록되어 있는지 확인
-  - 전체 코드 실행 플로우를 그래프로 그려서 이해를 돕고 있는지 확인
-    - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
-- [ ] **5. 코드가 간결하고 효율적인가요?**
-  - 파이썬 스타일 가이드 (PEP8) 를 준수하였는지 확인
-  - 코드 중복을 최소화하고 범용적으로 사용할 수 있도록 함수화/모듈화했는지 확인
-    - 중요! 잘 작성되었다고 생각되는 부분을 캡쳐해 근거로 첨부
+***
+회고도 남겨 두시면 추후 보실때 좋지않을까 합니다.
+***
+- [ㅇ] **5. 코드가 간결하고 효율적인가요?**
+***
+간결하고 효율적인것 같습니다.
+***
 
 # 회고(참고 링크 및 코드 개선)
 
 ```
-# 리뷰어의 회고를 작성합니다.
-# 코드 리뷰 시 참고한 링크가 있다면 링크와 간략한 설명을 첨부합니다.
-# 코드 리뷰를 통해 개선한 코드가 있다면 코드와 간략한 설명을 첨부합니다.
+코드와 설명하시는 것을 들으니 실력이 좋으신 분 같으세요 ^^
+제가 코드에 대해 좀더 잘 이해하고, 다양한 피드백을 드릴수 있으면 좋을텐데 그러지 못해 아쉽습니다.
 ```

리뷰: 매번 회고 적는 것을 까먹는 데.. 회고가 중요한 만큼 이 부분도 챙기겠습니다.
@@ -0,0 +1,24 @@
+package store.constant;
+
+public enum CompareContext {
+    NULL_STRING(""),
+    SQUARE_BRACKET("[\\[\\]]"),
+    ORDER("^(\\[)[^\\[^\\]]+\\-[0-9]+(\\])$"),
+    ORDER_SEPARATOR("-"),
+    YES_OR_NO("^[Y|N]{1}$"),
+    YES("Y"),
+    NO("N"),
+    COMMA(","),
+    NO_STOCK("재고 없음")
+    ;
+
+    final private String context;
+
+    CompareContext(String context){
+        this.context = context;
+    }
+
+    public String getContext(){
+        return context;
+    }
+}

리뷰: 해당 `;`는 왜 따로 구분되어 있을까요?
@@ -0,0 +1,27 @@
+package store.constant;
+
+public enum StoreGuide {
+    START_STORE("안녕하세요. W편의점입니다.\n현재 보유하고 있는 상품입니다."),
+    PRODUCT("- %s %,d원 %s %s\n"),
+    GET_ORDER("구매하실 상품명과 수량을 입력해 주세요. (예: [사이다-2],[감자칩-1])"),
+    ASK_MEMBERSHIP("멤버십 할인을 받으시겠습니까? (Y/N)"),
+    ASK_MORE("감사합니다. 구매하고 싶은 다른 상품이 있나요? (Y/N)"),
+    ASK_NOT_APPLY_PROMOTION("현재 %s %,d개는 프로모션 할인이 적용되지 않습니다. 그래도 구매하시겠습니까? (Y/N)\n"),
+    ASK_FREE("현재 %s은(는) %,d개를 무료로 더 받을 수 있습니다. 추가하시겠습니까? (Y/N)\n"),
+    CANCEL_ORDER("주문을 취소했습니다."),
+    RESULT("총구매액\t\t%d\t%,d\n" +
+            "행사할인\t\t\t-%,d\n" +
+            "멤버십할인\t\t\t-%,d\n" +
+            "내실돈\t\t\t %,d");
+
+
+    final private String context;
+
+    StoreGuide(String context){
+        this.context = context;
+    }
+
+    public String getContext(){
+        return context;
+    }
+}

리뷰: 들여쓰기가 2줄이네요. 한 줄은 삭제하셔도 좋을 것 같아요!
@@ -0,0 +1,59 @@
+package store.model;
+
+import store.constant.CompareContext;
+import store.constant.StoreGuide;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Order {
+    List<Product> soldProducts = new ArrayList<>();
+    boolean membership = false;
+
+    public void addProduct(Product product){
+        soldProducts.add(product);
+    }
+
+    public void setMembership(boolean member){
+        membership = member;
+    }
+
+    public String getProducts(){
+        ArrayList<String> productInformation = new ArrayList<>();
+        for(Product product: soldProducts){
+            productInformation.add(product.getProductReceipt());
+        }
+        return String.join("\n", productInformation);
+    }
+
+    public String getPromotionalProducts(){
+        ArrayList<String> promotionalProductInformation = new ArrayList<>();
+        for(Product product: soldProducts){
+            String promotionReceipt = product.getPromotionReceipt();
+            if(promotionReceipt != null) {
+                promotionalProductInformation.add(promotionReceipt);
+            }
+        }
+        return String.join("\n", promotionalProductInformation);
+    }
+
+    public String getResult(){
+        Integer total = 0;
+        Integer count = 0;
+        Integer promotionDiscount = 0;
+        Integer membershipDiscount = 0;
+
+        for(Product product : soldProducts){
+            total += product.getPrice()*product.getQuantity();
+            count += product.getQuantity();
+            promotionDiscount += product.getPromotionDiscount();
+            membershipDiscount += product.getMembershipDiscount();
+        }
+        membershipDiscount = membershipDiscount * 30/100;
+
+        if(!membership) membershipDiscount = 0;
+        if(8000 < membershipDiscount) membershipDiscount = 8000;
+        Integer price = total-promotionDiscount-membershipDiscount;
+        return String.format(StoreGuide.RESULT.getContext(), count, total, promotionDiscount, membershipDiscount, price);
+    }
+}

리뷰: 결과 계산 로직을 메서드로 따로 구현하면 어떨까요?