ewhk9887/korean_code_reviews_from_github huggingface dataset:
@@ -0,0 +1,67 @@
+package lotto.model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+import lotto.controller.LottoController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import static lotto.constants.ErrorMessage.ISNOTINTEGER;
+import static lotto.constants.ErrorMessage.NOTTHOUSAND;
+
+public class LottoNumberMaker {
+    private static int buyPrice;
+    private static final List<List<Integer>> numbers = new ArrayList<>();
+    private static final LottoController lottoController = new LottoController();
+
+    public static int getBuyPrice() {
+        return buyPrice;
+    }
+
+    public void makeLottoNumber(Integer count) {
+        buyPrice = count;
+        checkThousand(count);
+        IntStream.range(0, count / 1000)
+                .forEach(i -> numbers.add(makeRandomNumber()));
+    }
+
+    private void checkThousand(Integer count) {
+        if(count%1000!=0){
+           throw new IllegalArgumentException(NOTTHOUSAND.getMessage());
+        }
+        return;
+    }
+
+    private List<Integer> makeRandomNumber() {
+        return Randoms.pickUniqueNumbersInRange(1, 45, 6).stream()
+                .sorted()
+                .collect(Collectors.toList());
+    }
+
+    public void checkInt() {
+        while (true) {
+            try {
+                int number = checkCount();
+                makeLottoNumber(number);
+                break;
+            } catch (IllegalArgumentException e) {
+                System.out.println(ISNOTINTEGER.getMessage());
+                System.out.println(NOTTHOUSAND.getMessage());
+            }
+        }
+    }
+
+    private int checkCount() {
+        try {
+            return Integer.parseInt(lottoController.askPrice());
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException(ISNOTINTEGER.getMessage());
+        }
+    }
+
+    public List<List<Integer>> getLottoNumber() {
+        return numbers;
+    }
+}

리뷰: Lotto가 List'<'Integer'>'형을 가지는데 List'<'Lotto'>'로 만들었다면 어떨까요 ?!
@@ -0,0 +1,67 @@
+package lotto.model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+import lotto.controller.LottoController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import static lotto.constants.ErrorMessage.ISNOTINTEGER;
+import static lotto.constants.ErrorMessage.NOTTHOUSAND;
+
+public class LottoNumberMaker {
+    private static int buyPrice;
+    private static final List<List<Integer>> numbers = new ArrayList<>();
+    private static final LottoController lottoController = new LottoController();
+
+    public static int getBuyPrice() {
+        return buyPrice;
+    }
+
+    public void makeLottoNumber(Integer count) {
+        buyPrice = count;
+        checkThousand(count);
+        IntStream.range(0, count / 1000)
+                .forEach(i -> numbers.add(makeRandomNumber()));
+    }
+
+    private void checkThousand(Integer count) {
+        if(count%1000!=0){
+           throw new IllegalArgumentException(NOTTHOUSAND.getMessage());
+        }
+        return;
+    }
+
+    private List<Integer> makeRandomNumber() {
+        return Randoms.pickUniqueNumbersInRange(1, 45, 6).stream()
+                .sorted()
+                .collect(Collectors.toList());
+    }
+
+    public void checkInt() {
+        while (true) {
+            try {
+                int number = checkCount();
+                makeLottoNumber(number);
+                break;
+            } catch (IllegalArgumentException e) {
+                System.out.println(ISNOTINTEGER.getMessage());
+                System.out.println(NOTTHOUSAND.getMessage());
+            }
+        }
+    }
+
+    private int checkCount() {
+        try {
+            return Integer.parseInt(lottoController.askPrice());
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException(ISNOTINTEGER.getMessage());
+        }
+    }
+
+    public List<List<Integer>> getLottoNumber() {
+        return numbers;
+    }
+}

리뷰: 도메인에서 컨트롤러를 사용한 이유가 궁금합니다
@@ -0,0 +1,67 @@
+package lotto.model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+import lotto.controller.LottoController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import static lotto.constants.ErrorMessage.ISNOTINTEGER;
+import static lotto.constants.ErrorMessage.NOTTHOUSAND;
+
+public class LottoNumberMaker {
+    private static int buyPrice;
+    private static final List<List<Integer>> numbers = new ArrayList<>();
+    private static final LottoController lottoController = new LottoController();
+
+    public static int getBuyPrice() {
+        return buyPrice;
+    }
+
+    public void makeLottoNumber(Integer count) {
+        buyPrice = count;
+        checkThousand(count);
+        IntStream.range(0, count / 1000)
+                .forEach(i -> numbers.add(makeRandomNumber()));
+    }
+
+    private void checkThousand(Integer count) {
+        if(count%1000!=0){
+           throw new IllegalArgumentException(NOTTHOUSAND.getMessage());
+        }
+        return;
+    }
+
+    private List<Integer> makeRandomNumber() {
+        return Randoms.pickUniqueNumbersInRange(1, 45, 6).stream()
+                .sorted()
+                .collect(Collectors.toList());
+    }
+
+    public void checkInt() {
+        while (true) {
+            try {
+                int number = checkCount();
+                makeLottoNumber(number);
+                break;
+            } catch (IllegalArgumentException e) {
+                System.out.println(ISNOTINTEGER.getMessage());
+                System.out.println(NOTTHOUSAND.getMessage());
+            }
+        }
+    }
+
+    private int checkCount() {
+        try {
+            return Integer.parseInt(lottoController.askPrice());
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException(ISNOTINTEGER.getMessage());
+        }
+    }
+
+    public List<List<Integer>> getLottoNumber() {
+        return numbers;
+    }
+}

리뷰: 로또 구입 금액또한 1000으로 고정시키는 것 보다 확장성 측면에서 고려하여 상수 처리해서 사용해도 좋을거같아요
@@ -1,5 +1,7 @@
 package lotto;
 
+import lotto.model.Lotto;
+import lotto.model.LottoNumberMaker;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
@@ -22,6 +24,11 @@ void createLottoByDuplicatedNumber() {
         assertThatThrownBy(() -> new Lotto(List.of(1, 2, 3, 4, 5, 5)))
                 .isInstanceOf(IllegalArgumentException.class);
     }
+    @DisplayName("로또 번호가 6개 미만이면 예외가 발생한다.")
+    @Test
+    void createLottoByMinSize() {
+        assertThatThrownBy(() -> new Lotto(List.of(1)))
+                .isInstanceOf(IllegalArgumentException.class);
+    }
 
-    // 아래에 추가 테스트 작성 가능
 }
\ No newline at end of file

리뷰: 단위 테스트도 도메인 별로 다양하게 진행해보면 더 좋을거 같아요 :)
@@ -1,7 +1,13 @@
 package lotto;
 
+import lotto.controller.LottoController;
+
 public class Application {
     public static void main(String[] args) {
-        // TODO: 프로그램 구현
+        LottoController.setPrice();
+        LottoController.setBuyLottoNumberPrint();
+        LottoController.setPrizeNumberInput();
+        LottoController.winningStatistic();
+        LottoController.PerformanceCalculation();
     }
 }

리뷰: 순서대로 모두 실행해야한다면 controller안에서 하나의 메소드로 실행하면 조금 더 코드가 깔끔해질 것 같아요.
@@ -0,0 +1,79 @@
+package lotto.model;
+
+import lotto.model.constants.LottoPrize;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Predicate;
+
+import static lotto.constants.ErrorMessage.DUPLICATION;
+import static lotto.constants.ErrorMessage.SIXNUMBER;
+import static lotto.model.constants.LottoPrize.*;
+public class Lotto {
+    private final List<Integer> numbers;
+
+    public Lotto(List<Integer> numbers) {
+        validate(numbers);
+        duplicate(numbers);
+        this.numbers = numbers;
+    }
+
+    private void duplicate(List<Integer> numbers) {
+                List<Integer> duplication = numbers.stream()
+                        .distinct()
+                        .toList();
+                if (duplication.size() != numbers.size()) {
+                    throw new IllegalArgumentException(DUPLICATION.getMessage());
+                }
+    }
+
+    private void validate(List<Integer> numbers) {
+                if (numbers.size() != 6) {
+                    throw new IllegalArgumentException(SIXNUMBER.getMessage());
+        }
+    }
+    public void checkSame(Integer bonusNumber, List<List<Integer>> lottoNumber) {
+        bonusDuplication(bonusNumber);
+        for (List<Integer> integers : lottoNumber) {
+            List<Integer> Result = integers.stream()
+                    .filter(i -> this.numbers.stream().anyMatch(Predicate.isEqual(i)))
+                    .toList();
+            long bonusResult = integers.stream()
+                    .filter(bonusNumber::equals).count();
+            CheckPrize(Result.size(), bonusResult).addWinCount();
+
+        }
+    }
+
+    private void bonusDuplication(Integer bonusNumber) {
+        List<Integer> Result = this.numbers.stream()
+                .filter(i-> !Objects.equals(i, bonusNumber))
+                .toList();
+        if(Result.size()!=6){
+            throw new IllegalArgumentException(DUPLICATION.getMessage());
+        }
+
+    }
+
+    public LottoPrize CheckPrize(int result, long bonusResult){
+        if(result==6){
+            return FIRST_PRIZE;
+        }
+        if(result==5&&bonusResult==1){
+            return SECOND_PRIZE;
+        }
+        if(result==5&&bonusResult==0){
+            return THIRD_PRIZE;
+        }
+        if(result==4){
+            return FOURTH_PRIZE;
+        }
+        if(result==3){
+            return FIFTH_PRIZE;
+        }
+        if(result<3){
+            return LOOSE;
+        }
+        throw new IllegalArgumentException("존재 하지 않는 순위입니다.");
+    }
+}

리뷰: set을 이용하지 않는 방법도 있었네요.
@@ -0,0 +1,79 @@
+package lotto.model;
+
+import lotto.model.constants.LottoPrize;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Predicate;
+
+import static lotto.constants.ErrorMessage.DUPLICATION;
+import static lotto.constants.ErrorMessage.SIXNUMBER;
+import static lotto.model.constants.LottoPrize.*;
+public class Lotto {
+    private final List<Integer> numbers;
+
+    public Lotto(List<Integer> numbers) {
+        validate(numbers);
+        duplicate(numbers);
+        this.numbers = numbers;
+    }
+
+    private void duplicate(List<Integer> numbers) {
+                List<Integer> duplication = numbers.stream()
+                        .distinct()
+                        .toList();
+                if (duplication.size() != numbers.size()) {
+                    throw new IllegalArgumentException(DUPLICATION.getMessage());
+                }
+    }
+
+    private void validate(List<Integer> numbers) {
+                if (numbers.size() != 6) {
+                    throw new IllegalArgumentException(SIXNUMBER.getMessage());
+        }
+    }
+    public void checkSame(Integer bonusNumber, List<List<Integer>> lottoNumber) {
+        bonusDuplication(bonusNumber);
+        for (List<Integer> integers : lottoNumber) {
+            List<Integer> Result = integers.stream()
+                    .filter(i -> this.numbers.stream().anyMatch(Predicate.isEqual(i)))
+                    .toList();
+            long bonusResult = integers.stream()
+                    .filter(bonusNumber::equals).count();
+            CheckPrize(Result.size(), bonusResult).addWinCount();
+
+        }
+    }
+
+    private void bonusDuplication(Integer bonusNumber) {
+        List<Integer> Result = this.numbers.stream()
+                .filter(i-> !Objects.equals(i, bonusNumber))
+                .toList();
+        if(Result.size()!=6){
+            throw new IllegalArgumentException(DUPLICATION.getMessage());
+        }
+
+    }
+
+    public LottoPrize CheckPrize(int result, long bonusResult){
+        if(result==6){
+            return FIRST_PRIZE;
+        }
+        if(result==5&&bonusResult==1){
+            return SECOND_PRIZE;
+        }
+        if(result==5&&bonusResult==0){
+            return THIRD_PRIZE;
+        }
+        if(result==4){
+            return FOURTH_PRIZE;
+        }
+        if(result==3){
+            return FIFTH_PRIZE;
+        }
+        if(result<3){
+            return LOOSE;
+        }
+        throw new IllegalArgumentException("존재 하지 않는 순위입니다.");
+    }
+}

리뷰: 해당 부분을 LottoPrize에서 해주면 lotto의 역할을 줄일 수 있을 것이라고 생각하는데 어떠신가요?
stream을 이용해서 filter를 하면 조금 더 깔끔해 질 것 같아요.
@@ -0,0 +1,67 @@
+package lotto.model;
+
+import camp.nextstep.edu.missionutils.Randoms;
+import lotto.controller.LottoController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import static lotto.constants.ErrorMessage.ISNOTINTEGER;
+import static lotto.constants.ErrorMessage.NOTTHOUSAND;
+
+public class LottoNumberMaker {
+    private static int buyPrice;
+    private static final List<List<Integer>> numbers = new ArrayList<>();
+    private static final LottoController lottoController = new LottoController();
+
+    public static int getBuyPrice() {
+        return buyPrice;
+    }
+
+    public void makeLottoNumber(Integer count) {
+        buyPrice = count;
+        checkThousand(count);
+        IntStream.range(0, count / 1000)
+                .forEach(i -> numbers.add(makeRandomNumber()));
+    }
+
+    private void checkThousand(Integer count) {
+        if(count%1000!=0){
+           throw new IllegalArgumentException(NOTTHOUSAND.getMessage());
+        }
+        return;
+    }
+
+    private List<Integer> makeRandomNumber() {
+        return Randoms.pickUniqueNumbersInRange(1, 45, 6).stream()
+                .sorted()
+                .collect(Collectors.toList());
+    }
+
+    public void checkInt() {
+        while (true) {
+            try {
+                int number = checkCount();
+                makeLottoNumber(number);
+                break;
+            } catch (IllegalArgumentException e) {
+                System.out.println(ISNOTINTEGER.getMessage());
+                System.out.println(NOTTHOUSAND.getMessage());
+            }
+        }
+    }
+
+    private int checkCount() {
+        try {
+            return Integer.parseInt(lottoController.askPrice());
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException(ISNOTINTEGER.getMessage());
+        }
+    }
+
+    public List<List<Integer>> getLottoNumber() {
+        return numbers;
+    }
+}

리뷰: 매직 넘버 해주시면 더 좋을 것 같습니다.
@@ -0,0 +1,62 @@
+package lotto.view;
+
+import camp.nextstep.edu.missionutils.Console;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static lotto.constants.ErrorMessage.*;
+import static lotto.view.ConstantsMessage.*;
+
+public class LottoInput {
+    public String askPrice() {
+        System.out.println(ASK_BUY_PRICE.getMessage());
+        String input = Console.readLine();
+        return input;
+
+    }
+
+    public List<Integer> prizeNumberInput() {
+        while (true) {
+            try {
+                printNewLine();
+                System.out.println(ASK_PRIZE_NUMBER.getMessage());
+               return  changeInt(Arrays.asList(Console.readLine().split(",")));
+            }catch (IllegalArgumentException e){
+                System.out.println(OUTFRANGE.getMessage());
+            }
+        }
+    }
+    public Integer bonusNumberInput() {
+        try{
+        printNewLine();
+        System.out.println(ASK_BONUS_NUMBER.getMessage());
+        String input = Console.readLine();
+
+        return Integer.parseInt(input);
+        }catch (NumberFormatException e){
+            throw new IllegalArgumentException(ONENUMBER.getMessage());
+        }
+
+    }
+    private List<Integer> changeInt(List<String> prizeNumbers) {
+            try{
+                List<Integer> numbers = prizeNumbers.stream()
+                        .map(Integer::parseInt)
+                        .filter(i->i>0&&i<45)
+                        .toList();
+                if(numbers.size() != prizeNumbers.size()){
+                    throw new NumberFormatException();
+                }
+                return numbers;
+            }catch (NumberFormatException e){
+                throw new IllegalArgumentException(OUTFRANGE.getMessage());
+            }
+
+    }
+
+    private void printNewLine() {
+        System.out.println();
+    }
+}

리뷰: 메시지 앞에 %n를 이용해서 printf를 이용한다면 printNewLine 코드를 안써도 될 것 같은데 이 부분에 대해서 어떻게 생각하시는지 궁금합니다.
@@ -0,0 +1,21 @@
+package lotto.constants;
+
+public enum ErrorMessage {
+    DUPLICATION("[ERROR] 값이 중복되었습니다"),
+    ISNOTINTEGER("[ERROR] 숫자를 입력해주세요"),
+    SIXNUMBER("[ERROR] 번호 6개를 입력해주세요"),
+    OUTFRANGE("[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다."),
+    ONENUMBER("[ERROR] 숫자 번호 1개를 입력해주세요"),
+    NOTTHOUSAND("[ERROR] 1000원 단위로 입력해 주세요");
+
+
+    private final String message;
+
+    ErrorMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+}

리뷰: constants 패키지가 두개가 존재하는데 이름을 달리해서 구분하는게 조금 더 가독성에는 좋을 것 같습니다.
@@ -0,0 +1,34 @@
+#   로또
+
+## 기능 목록
+- [V] 랜덤 하게 생성한 로또 번호와 사용자가 임의로 선정한 당첨 번호를 비교하여
+  당첨된 등수와 수익률을 계산한다.
+    - [V] 사용자로부터 로또 구입 금액을 입력 받는다.
+    - [V] 입력 받은 금액에 따라 랜덤하게 6개의 숫자를 생성하여 로또 번호를 생성한다.(1~45범위, 중복X, 오름차순 정렬)
+    - [V] 사용자로부터 당첨 번호와 보너스 번호를 입력 받은 후, 생성한 로또 번호와 비교하여 등수를 출력한다.
+    - [V] 수익률을 계산하여 출력한다.(소수점 둘떄 자리 반올림)
+      -[]입력값 예외처리
+      -[V]로또 번호 중복 예외처리
+      -[V]로또 번호 범위 벗어남 예외처리
+      -[] 보너스 번호 예외처리
+##  기능 요구 사항
+- 로또 번호의 숫자 범위는 1~45까지이다.
+- 1개의 로또를 발행할 때 중복되지 않는 6개의 숫자를 뽑는다.
+- 당첨 번호 추첨 시 중복되지 않는 숫자 6개와 보너스 번호 1개를 뽑는다.
+- 당첨은 1등부터 5등까지 있다. 당첨 기준과 금액은 아래와 같다.
+    - 1등: 6개 번호 일치 / 2,000,000,000원
+    - 2등: 5개 번호 + 보너스 번호 일치 / 30,000,000원
+    - 3등: 5개 번호 일치 / 1,500,000원
+    - 4등: 4개 번호 일치 / 50,000원
+    - 5등: 3개 번호 일치 / 5,000원
+
+### 추가된 요구 사항
+-[V] 함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다.
+- 함수(또는 메서드)가 한 가지 일만 잘 하도록 구현한다.
+-[V] else 예약어를 쓰지 않는다.
+- 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
+- else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.
+-[V] Java Enum을 적용한다.
+-[] 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(System.out, System.in, Scanner) 로직은 제외한다.
+    - 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 분리해 구현한다.
+    - 단위 테스트 작성이 익숙하지 않다면 `test/java/lotto/LottoTest`를 참고하여 학습한 후 테스트를 구현한다.
\ No newline at end of file

리뷰: 완료된 부분 체크하여 리드미도 꼼꼼하게 관리해주시는 것이 좋을 것 같습니다~
@@ -0,0 +1,50 @@
+package lotto.controller;
+
+import lotto.model.Lotto;
+import lotto.model.LottoNumberMaker;
+import lotto.model.LottoPercentageCalculation;
+import lotto.model.constants.LottoPrize;
+import lotto.view.LottoInput;
+import lotto.view.LottoOutput;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static java.util.Arrays.asList;
+import static lotto.model.constants.LottoPrize.*;
+
+public class LottoController {
+    private static final LottoNumberMaker lottoNumberMaker = new LottoNumberMaker();
+    private static final LottoInput lottoInput = new LottoInput();
+    private static final LottoOutput lottoOutput = new LottoOutput();
+    private static final LottoPercentageCalculation lottoPercentageCalculation = new LottoPercentageCalculation();
+    public static void setPrice() {
+        lottoNumberMaker.checkInt();
+    }
+
+//    static List<LottoPrize> LottoPrizelist= asList(FIFTH_PRIZE,FOURTH_PRIZE,THIRD_PRIZE,SECOND_PRIZE,FIRST_PRIZE);
+    public static void setBuyLottoNumberPrint() {
+        lottoOutput.buyLottoNumberPrint(lottoNumberMaker.getLottoNumber());
+    }
+
+    public static void setPrizeNumberInput() {
+        Lotto lotto = new Lotto(lottoInput.prizeNumberInput());
+        lotto.checkSame(lottoInput.bonusNumberInput(),lottoNumberMaker.getLottoNumber());
+    }
+
+    public static void winningStatistic() {
+        List<String> lottoPrizes = new ArrayList<>();
+        for(LottoPrize lottoPrize: LottoPrize.values()){
+            lottoPrizes.add(lottoPrize.getText()+lottoPrize.getWinCount()+lottoPrize.getUnit());
+        }
+        LottoOutput.seeWinningStatstic(lottoPrizes);
+    }
+
+    public static void PerformanceCalculation() {
+        lottoOutput.seePercentage(lottoPercentageCalculation.percentageCalculation(LottoPrize.values(),lottoNumberMaker.getBuyPrice()));
+    }
+
+    public String askPrice() {
+        return lottoInput.askPrice();
+    }
+}
\ No newline at end of file

리뷰: set이라는 메서드명은 Setter의 느낌이 강한데 혹시 다른 변수명을 고려해보시는건 어떠실까요?
@@ -0,0 +1,79 @@
+package lotto.model;
+
+import lotto.model.constants.LottoPrize;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Predicate;
+
+import static lotto.constants.ErrorMessage.DUPLICATION;
+import static lotto.constants.ErrorMessage.SIXNUMBER;
+import static lotto.model.constants.LottoPrize.*;
+public class Lotto {
+    private final List<Integer> numbers;
+
+    public Lotto(List<Integer> numbers) {
+        validate(numbers);
+        duplicate(numbers);
+        this.numbers = numbers;
+    }
+
+    private void duplicate(List<Integer> numbers) {
+                List<Integer> duplication = numbers.stream()
+                        .distinct()
+                        .toList();
+                if (duplication.size() != numbers.size()) {
+                    throw new IllegalArgumentException(DUPLICATION.getMessage());
+                }
+    }
+
+    private void validate(List<Integer> numbers) {
+                if (numbers.size() != 6) {
+                    throw new IllegalArgumentException(SIXNUMBER.getMessage());
+        }
+    }
+    public void checkSame(Integer bonusNumber, List<List<Integer>> lottoNumber) {
+        bonusDuplication(bonusNumber);
+        for (List<Integer> integers : lottoNumber) {
+            List<Integer> Result = integers.stream()
+                    .filter(i -> this.numbers.stream().anyMatch(Predicate.isEqual(i)))
+                    .toList();
+            long bonusResult = integers.stream()
+                    .filter(bonusNumber::equals).count();
+            CheckPrize(Result.size(), bonusResult).addWinCount();
+
+        }
+    }
+
+    private void bonusDuplication(Integer bonusNumber) {
+        List<Integer> Result = this.numbers.stream()
+                .filter(i-> !Objects.equals(i, bonusNumber))
+                .toList();
+        if(Result.size()!=6){
+            throw new IllegalArgumentException(DUPLICATION.getMessage());
+        }
+
+    }
+
+    public LottoPrize CheckPrize(int result, long bonusResult){
+        if(result==6){
+            return FIRST_PRIZE;
+        }
+        if(result==5&&bonusResult==1){
+            return SECOND_PRIZE;
+        }
+        if(result==5&&bonusResult==0){
+            return THIRD_PRIZE;
+        }
+        if(result==4){
+            return FOURTH_PRIZE;
+        }
+        if(result==3){
+            return FIFTH_PRIZE;
+        }
+        if(result<3){
+            return LOOSE;
+        }
+        throw new IllegalArgumentException("존재 하지 않는 순위입니다.");
+    }
+}

리뷰: 저도 놓친 부분이긴한데 매직넘버 처리해주시는게 좋을듯 합니다!