From dd8555eed729a943d6191a1f9554f713492a55a2 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Fri, 5 Dec 2025 20:12:14 +0900 Subject: [PATCH 01/16] =?UTF-8?q?docs:=20=EC=88=98=EB=8F=99=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EA=B4=80=EB=A0=A8=20=EC=9A=94=EA=B5=AC=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e7b064ab49..d655ef9d20 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,8 @@ - 로또 구입 금액을 입력하면 구입 금액에 해당하는 만큼 로또를 발급한다. - 로또 1장의 가격은 1,000원이다. - 로또 번호는 1~45 사이의 숫자 6개로 구성된다. +- 수동으로 구매할 로또 수를 입력받는다. +- 수동으로 구매할 로또 번호를 입력받는다. - 당첨 번호 6개를 입력받는다. - 보너스 번호 1개를 입력받는다. - 발행한 로또와 당첨 번호를 비교하여 당첨 통계를 계산한다. @@ -51,7 +53,7 @@ ### 로또 기계 -- 구입 금액을 기준으로 발행할 로또 장수를 계산한다. +- 자동 발행 로또 수를 계산한다. - 각 로또와 당첨 번호를 비교하여 당첨 통계를 계산한다. - 당첨 금액 및 수익률을 계산한다. @@ -59,6 +61,8 @@ - 구입 금액을 입력받는다. - 1,000원 단위의 양수 +- 수동으로 구매할 로또 수를 입력받는다. +- 수동으로 구매할 번호를 입력받는다. - 당첨 번호 6개와 보너스 번호 1개를 입력받는다. - 1~45 사이의 숫자, 중복 불가 From 456cc9dbdd7540a558a495e1e7f1917808924de2 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Fri, 5 Dec 2025 20:23:46 +0900 Subject: [PATCH 02/16] =?UTF-8?q?feat:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=EB=A1=9C=20=EC=88=98=EB=8F=99=20Lot?= =?UTF-8?q?tos=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Lottos.java | 4 ++++ src/test/java/lotto/LottosTest.java | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/lotto/Lottos.java b/src/main/java/lotto/Lottos.java index f24a019faf..488eacedaa 100644 --- a/src/main/java/lotto/Lottos.java +++ b/src/main/java/lotto/Lottos.java @@ -11,6 +11,10 @@ public Lottos(List lottos) { this.lottos = lottos; } + public static Lottos manualLottos(List manualNumbers) { + return new Lottos(manualNumbers.stream().map(Lotto::new).toList()); + } + public int count() { return lottos.size(); } diff --git a/src/test/java/lotto/LottosTest.java b/src/test/java/lotto/LottosTest.java index b2d33bedfb..b499e9d774 100644 --- a/src/test/java/lotto/LottosTest.java +++ b/src/test/java/lotto/LottosTest.java @@ -4,6 +4,7 @@ import java.util.List; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; @@ -29,4 +30,12 @@ void matchResult(int matchCount, int expectedCount) { assertThat(result.countMatches(rank)).isEqualTo(expectedCount); } + @DisplayName("문자열 리스트를 받으면 로또 리스트를 생성한다") + @Test + void createManualLottos() { + List manual = List.of("1,2,3,4,5,6", "7,8,9,10,11,12"); + Lottos lottos = Lottos.manualLottos(manual); + assertThat(lottos.count()).isEqualTo(2); + } + } From 49cf45ff9b3eaaea1b96515d48be10cb8e553806 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Fri, 5 Dec 2025 20:48:28 +0900 Subject: [PATCH 03/16] =?UTF-8?q?feat:=20=EC=88=98=EB=8F=99=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=9D=84=20=ED=95=A9=EC=B9=98=EA=B8=B0=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20merge=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Lottos.java | 6 ++++++ src/test/java/lotto/LottosTest.java | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/src/main/java/lotto/Lottos.java b/src/main/java/lotto/Lottos.java index 488eacedaa..05dc0b68d2 100644 --- a/src/main/java/lotto/Lottos.java +++ b/src/main/java/lotto/Lottos.java @@ -15,6 +15,12 @@ public static Lottos manualLottos(List manualNumbers) { return new Lottos(manualNumbers.stream().map(Lotto::new).toList()); } + public Lottos merge(Lottos other) { + List mergedLottos = new ArrayList<>(this.lottos); + mergedLottos.addAll(other.lottos); + return new Lottos(mergedLottos); + } + public int count() { return lottos.size(); } diff --git a/src/test/java/lotto/LottosTest.java b/src/test/java/lotto/LottosTest.java index b499e9d774..60e583e31e 100644 --- a/src/test/java/lotto/LottosTest.java +++ b/src/test/java/lotto/LottosTest.java @@ -38,4 +38,13 @@ void createManualLottos() { assertThat(lottos.count()).isEqualTo(2); } + @DisplayName("수동, 자동 Lottos를 합쳐 하나로 반환한다") + @Test + void mergeLottos() { + Lottos manualLottos = Lottos.manualLottos(List.of("1,2,3,4,5,6", "2,3,4,5,6,7")); + Lottos autoLottos = Lottos.manualLottos(List.of("1,2,3,4,5,6", "3,4,5,6,7,8")); + Lottos mergedLottos = manualLottos.merge(autoLottos); + assertThat(mergedLottos.count()).isEqualTo(4); + } + } From ca456e5f1273bdff408cd3ebc33b6981578b463a Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Fri, 5 Dec 2025 21:23:26 +0900 Subject: [PATCH 04/16] =?UTF-8?q?feat:=20=EC=88=98=EB=8F=99=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/LottoApplication.java | 11 +++++++++-- src/main/java/lotto/view/InputView.java | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/lotto/LottoApplication.java b/src/main/java/lotto/LottoApplication.java index 9ecfe85d1b..c99dbebaa6 100644 --- a/src/main/java/lotto/LottoApplication.java +++ b/src/main/java/lotto/LottoApplication.java @@ -1,5 +1,6 @@ package lotto; +import java.util.List; import lotto.view.InputView; import lotto.view.ResultView; @@ -10,8 +11,14 @@ public static void main(String[] args) { int input = InputView.readPurchaseAmount(); PurchaseAmount amount = new PurchaseAmount(input); - Lottos lottos = LottoMachine.randomLottos(amount.ticketCount()); - ResultView.printPurchasedLottos(lottos); + int manualCount = InputView.readManualLottoCount(); + List manualInputs = InputView.readManualLottos(manualCount); + Lottos manualLottos = Lottos.manualLottos(manualInputs); + + Lottos lottos = LottoMachine.randomLottos(amount.ticketCount() - manualCount); + + Lottos mergedLottos = manualLottos.merge(lottos); + ResultView.printPurchasedLottos(mergedLottos); Lotto winningNumbers = new Lotto(InputView.readWinningNumbers()); LottoNumber bonusNumber = LottoNumber.of(InputView.readBonusNumber()); diff --git a/src/main/java/lotto/view/InputView.java b/src/main/java/lotto/view/InputView.java index 0506914e78..f20e8471aa 100644 --- a/src/main/java/lotto/view/InputView.java +++ b/src/main/java/lotto/view/InputView.java @@ -1,5 +1,7 @@ package lotto.view; +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; public class InputView { @@ -29,4 +31,17 @@ private static int parseIntOrThrow(String input) { } } + public static int readManualLottoCount() { + System.out.println("수동으로 구매할 로또 수를 입력해 주세요."); + return parseIntOrThrow(SCANNER.nextLine()); + } + + public static List readManualLottos(int count) { + System.out.println("수동으로 구매할 번호를 입력해 주세요."); + List input = new ArrayList<>(); + while (count-- > 0) { + input.add(SCANNER.nextLine()); + } + return input; + } } From cb79cd687122ce929261144a59f8d00e4f63097b Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Fri, 5 Dec 2025 21:31:40 +0900 Subject: [PATCH 05/16] =?UTF-8?q?feat:=20=EC=88=98=EB=8F=99,=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=20=EB=A1=9C=EB=98=90=20=EC=B6=9C=EB=A0=A5=20=ED=98=95?= =?UTF-8?q?=EC=8B=9D=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/LottoApplication.java | 2 +- src/main/java/lotto/view/ResultView.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/lotto/LottoApplication.java b/src/main/java/lotto/LottoApplication.java index c99dbebaa6..33082753d0 100644 --- a/src/main/java/lotto/LottoApplication.java +++ b/src/main/java/lotto/LottoApplication.java @@ -18,7 +18,7 @@ public static void main(String[] args) { Lottos lottos = LottoMachine.randomLottos(amount.ticketCount() - manualCount); Lottos mergedLottos = manualLottos.merge(lottos); - ResultView.printPurchasedLottos(mergedLottos); + ResultView.printPurchasedLottos(mergedLottos, manualCount); Lotto winningNumbers = new Lotto(InputView.readWinningNumbers()); LottoNumber bonusNumber = LottoNumber.of(InputView.readBonusNumber()); diff --git a/src/main/java/lotto/view/ResultView.java b/src/main/java/lotto/view/ResultView.java index 5406f88837..68c70ac9bf 100644 --- a/src/main/java/lotto/view/ResultView.java +++ b/src/main/java/lotto/view/ResultView.java @@ -7,8 +7,8 @@ public class ResultView { - public static void printPurchasedLottos(Lottos lottos) { - System.out.printf("%d개를 구매했습니다.%n", lottos.count()); + public static void printPurchasedLottos(Lottos lottos, int manualCount) { + System.out.printf("수동으로 %d장, 자동으로 %d개를 구매했습니다.%n", manualCount, lottos.count() - manualCount); for (String line : lottos.toDisplayStrings()) { System.out.println(line); } From fa8b67ba1f0c9d30c5feff1f0814301e6a5c6ffc Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Fri, 5 Dec 2025 21:45:11 +0900 Subject: [PATCH 06/16] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5/=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=ED=98=95=EC=8B=9D=20=EB=B0=8F=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/view/InputView.java | 43 ++++++++++++------------ src/main/java/lotto/view/ResultView.java | 1 - 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/lotto/view/InputView.java b/src/main/java/lotto/view/InputView.java index f20e8471aa..6c137ad95a 100644 --- a/src/main/java/lotto/view/InputView.java +++ b/src/main/java/lotto/view/InputView.java @@ -10,38 +10,39 @@ public class InputView { public static int readPurchaseAmount() { System.out.println("구입금액을 입력해 주세요."); - return parseIntOrThrow(SCANNER.nextLine()); - } - - public static String readWinningNumbers() { - System.out.println("지난 주 당첨 번호를 입력해 주세요."); - return SCANNER.nextLine(); - } - - public static String readBonusNumber() { - System.out.println("보너스 볼을 입력해 주세요."); - return SCANNER.nextLine(); - } - - private static int parseIntOrThrow(String input) { - try { - return Integer.parseInt(input.trim()); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("숫자만 입력 가능합니다: " + input); - } + return readInt(); } public static int readManualLottoCount() { System.out.println("수동으로 구매할 로또 수를 입력해 주세요."); - return parseIntOrThrow(SCANNER.nextLine()); + return readInt(); } public static List readManualLottos(int count) { System.out.println("수동으로 구매할 번호를 입력해 주세요."); List input = new ArrayList<>(); while (count-- > 0) { - input.add(SCANNER.nextLine()); + input.add(SCANNER.nextLine().trim()); } + System.out.println(); return input; } + + public static String readWinningNumbers() { + System.out.println("지난 주 당첨 번호를 입력해 주세요."); + return SCANNER.nextLine(); + } + + public static int readBonusNumber() { + System.out.println("보너스 볼을 입력해 주세요."); + return readInt(); + } + + private static int readInt() { + int value = SCANNER.nextInt(); + SCANNER.nextLine(); + System.out.println(); + return value; + } + } diff --git a/src/main/java/lotto/view/ResultView.java b/src/main/java/lotto/view/ResultView.java index 68c70ac9bf..e9cff34863 100644 --- a/src/main/java/lotto/view/ResultView.java +++ b/src/main/java/lotto/view/ResultView.java @@ -16,7 +16,6 @@ public static void printPurchasedLottos(Lottos lottos, int manualCount) { } public static void printLottoResult(LottoMatchResult matchResult, ProfitRate profitRate) { - System.out.println(); System.out.println("당첨 통계"); System.out.println("---------"); From 0a3f5e67bad4424cb24b99c54e68826293beeda4 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Fri, 5 Dec 2025 21:57:25 +0900 Subject: [PATCH 07/16] =?UTF-8?q?refactor:=20=EC=BA=90=EC=8B=B1=EC=97=90?= =?UTF-8?q?=20Map=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 입력 형식 개선으로 불필요해진 메서드 삭제 --- src/main/java/lotto/LottoNumber.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/lotto/LottoNumber.java b/src/main/java/lotto/LottoNumber.java index 2b76090a55..e949ff0fca 100644 --- a/src/main/java/lotto/LottoNumber.java +++ b/src/main/java/lotto/LottoNumber.java @@ -1,5 +1,7 @@ package lotto; +import java.util.HashMap; +import java.util.Map; import java.util.Objects; public class LottoNumber implements Comparable { @@ -9,11 +11,11 @@ public class LottoNumber implements Comparable { private static final String ERROR_OUT_OF_RANGE = "로또 번호는 1~45 범위의 숫자여야 한다"; - private static final LottoNumber[] CACHE = new LottoNumber[MAX_NUMBER + 1]; + private static final Map CACHE = new HashMap<>(); static { for (int i = MIN_NUMBER; i <= MAX_NUMBER; i++) { - CACHE[i] = new LottoNumber(i); + CACHE.put(i, new LottoNumber(i)); } } @@ -26,11 +28,7 @@ private LottoNumber(int number) { public static LottoNumber of(int number) { validateRange(number); - return CACHE[number]; - } - - public static LottoNumber of(String number) { - return of(Integer.parseInt(number)); + return CACHE.get(number); } public int number() { From 91ff04e9424bb8021ee358b9cdeccef73188c965 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Fri, 5 Dec 2025 22:05:53 +0900 Subject: [PATCH 08/16] =?UTF-8?q?refactor:=20rank=20=EB=B9=84=EA=B5=90?= =?UTF-8?q?=EB=A5=BC=20=EC=A7=81=EC=A0=91=20=EC=97=B0=EC=82=B0=EC=9E=90=20?= =?UTF-8?q?=EB=8C=80=EC=8B=A0=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=A1=9C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/LottoRank.java | 7 +++++++ src/main/java/lotto/view/ResultView.java | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/lotto/LottoRank.java b/src/main/java/lotto/LottoRank.java index 7211bdc5b8..3137bd8b9d 100644 --- a/src/main/java/lotto/LottoRank.java +++ b/src/main/java/lotto/LottoRank.java @@ -39,4 +39,11 @@ public static LottoRank of(int matchCount, boolean hasBonus) { .orElse(MISS); } + public boolean isMiss() { + return this == MISS; + } + + public boolean isSecond() { + return this == SECOND; + } } diff --git a/src/main/java/lotto/view/ResultView.java b/src/main/java/lotto/view/ResultView.java index e9cff34863..0bb21e7b0f 100644 --- a/src/main/java/lotto/view/ResultView.java +++ b/src/main/java/lotto/view/ResultView.java @@ -34,12 +34,12 @@ public static void printLottoResult(LottoMatchResult matchResult, ProfitRate pro } private static void printRank(LottoMatchResult matchResult, LottoRank rank) { - if (rank == LottoRank.MISS) { + if (rank.isMiss()) { return; } int count = matchResult.countMatches(rank); int prize = rank.prize(); - if (rank == LottoRank.SECOND) { + if (rank.isSecond()) { System.out.printf("5개 일치, 보너스 볼 일치 (%d원) - %d개%n", prize, count); return; } From 5c88ab72edbdd5830c5fd5a3410407a6746aff17 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Sat, 6 Dec 2025 00:15:45 +0900 Subject: [PATCH 09/16] =?UTF-8?q?feat:=20=EC=88=98=EB=8F=99=20=EA=B5=AC?= =?UTF-8?q?=EB=A7=A4=20=EC=88=98=EB=9F=89=20=EA=B0=9D=EC=B2=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/ManualLottoCount.java | 17 +++++++++++++++++ src/test/java/lotto/ManualLottoCountTest.java | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/main/java/lotto/ManualLottoCount.java create mode 100644 src/test/java/lotto/ManualLottoCountTest.java diff --git a/src/main/java/lotto/ManualLottoCount.java b/src/main/java/lotto/ManualLottoCount.java new file mode 100644 index 0000000000..330054011b --- /dev/null +++ b/src/main/java/lotto/ManualLottoCount.java @@ -0,0 +1,17 @@ +package lotto; + +public class ManualLottoCount { + + private final int count; + + public ManualLottoCount(int count, int purchaseAmount) { + this(count, new PurchaseAmount(purchaseAmount)); + } + + public ManualLottoCount(int count, PurchaseAmount amount) { + if (amount.ticketCount() < count) { + throw new IllegalArgumentException("수동 장수는 구입 가능한 수량을 초과할 수 없습니다."); + } + this.count = count; + } +} diff --git a/src/test/java/lotto/ManualLottoCountTest.java b/src/test/java/lotto/ManualLottoCountTest.java new file mode 100644 index 0000000000..9fc7de0531 --- /dev/null +++ b/src/test/java/lotto/ManualLottoCountTest.java @@ -0,0 +1,17 @@ +package lotto; + +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class ManualLottoCountTest { + + @DisplayName("수동 장수가 구입 가능한 수량을 초과히면 예외를 발생한다") + @Test + void createManualLottoCount() { + assertThatIllegalArgumentException().isThrownBy(() -> new ManualLottoCount(10, 1000)) + .withMessageContaining("구입 가능한 수량을 초과"); + } + +} \ No newline at end of file From 225ec419c61458fa909ab448b3d250726f4130b3 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Sat, 6 Dec 2025 00:34:50 +0900 Subject: [PATCH 10/16] =?UTF-8?q?feat:=20ManualLottoCount=20=EB=8F=84?= =?UTF-8?q?=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/LottoApplication.java | 11 +++++------ src/main/java/lotto/ManualLottoCount.java | 4 ++++ src/main/java/lotto/PurchaseAmount.java | 5 ++++- src/main/java/lotto/view/ResultView.java | 6 ++++-- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/java/lotto/LottoApplication.java b/src/main/java/lotto/LottoApplication.java index 33082753d0..3d9428836b 100644 --- a/src/main/java/lotto/LottoApplication.java +++ b/src/main/java/lotto/LottoApplication.java @@ -1,6 +1,5 @@ package lotto; -import java.util.List; import lotto.view.InputView; import lotto.view.ResultView; @@ -11,14 +10,14 @@ public static void main(String[] args) { int input = InputView.readPurchaseAmount(); PurchaseAmount amount = new PurchaseAmount(input); - int manualCount = InputView.readManualLottoCount(); - List manualInputs = InputView.readManualLottos(manualCount); - Lottos manualLottos = Lottos.manualLottos(manualInputs); + ManualLottoCount manualLottoCount = new ManualLottoCount(InputView.readManualLottoCount(), + amount); + Lottos manualLottos = Lottos.manualLottos(InputView.readManualLottos(manualLottoCount.count())); - Lottos lottos = LottoMachine.randomLottos(amount.ticketCount() - manualCount); + Lottos lottos = LottoMachine.randomLottos(amount.autoCount(manualLottoCount)); Lottos mergedLottos = manualLottos.merge(lottos); - ResultView.printPurchasedLottos(mergedLottos, manualCount); + ResultView.printPurchasedLottos(mergedLottos, manualLottoCount); Lotto winningNumbers = new Lotto(InputView.readWinningNumbers()); LottoNumber bonusNumber = LottoNumber.of(InputView.readBonusNumber()); diff --git a/src/main/java/lotto/ManualLottoCount.java b/src/main/java/lotto/ManualLottoCount.java index 330054011b..116fa02e7c 100644 --- a/src/main/java/lotto/ManualLottoCount.java +++ b/src/main/java/lotto/ManualLottoCount.java @@ -14,4 +14,8 @@ public ManualLottoCount(int count, PurchaseAmount amount) { } this.count = count; } + + public int count() { + return count; + } } diff --git a/src/main/java/lotto/PurchaseAmount.java b/src/main/java/lotto/PurchaseAmount.java index 5ff2076b5a..1ff67032f7 100644 --- a/src/main/java/lotto/PurchaseAmount.java +++ b/src/main/java/lotto/PurchaseAmount.java @@ -21,10 +21,13 @@ public int ticketCount() { return value / PRICE_PER_LOTTO; } + public int autoCount(ManualLottoCount manualCount) { + return ticketCount() - manualCount.count(); + } + private static void validate(int amount) { if (amount < PRICE_PER_LOTTO || amount % PRICE_PER_LOTTO != 0) { throw new IllegalArgumentException(ERROR_INVALID_PURCHASE_AMOUNT); } } - } diff --git a/src/main/java/lotto/view/ResultView.java b/src/main/java/lotto/view/ResultView.java index 0bb21e7b0f..74c588c9e3 100644 --- a/src/main/java/lotto/view/ResultView.java +++ b/src/main/java/lotto/view/ResultView.java @@ -3,12 +3,14 @@ import lotto.LottoMatchResult; import lotto.LottoRank; import lotto.Lottos; +import lotto.ManualLottoCount; import lotto.ProfitRate; public class ResultView { - public static void printPurchasedLottos(Lottos lottos, int manualCount) { - System.out.printf("수동으로 %d장, 자동으로 %d개를 구매했습니다.%n", manualCount, lottos.count() - manualCount); + public static void printPurchasedLottos(Lottos lottos, ManualLottoCount manualCount) { + System.out.printf("수동으로 %d장, 자동으로 %d개를 구매했습니다.%n", manualCount.count(), + lottos.count() - manualCount.count()); for (String line : lottos.toDisplayStrings()) { System.out.println(line); } From f9454abd3ec327dc4db7e68f691e174574eb1fdf Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Sat, 6 Dec 2025 00:48:20 +0900 Subject: [PATCH 11/16] =?UTF-8?q?feat:=20=EC=9D=8C=EC=88=98=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EC=98=88=EC=99=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/ManualLottoCount.java | 18 +++++++++++++++--- src/test/java/lotto/ManualLottoCountTest.java | 6 ++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/lotto/ManualLottoCount.java b/src/main/java/lotto/ManualLottoCount.java index 116fa02e7c..0d8305f37d 100644 --- a/src/main/java/lotto/ManualLottoCount.java +++ b/src/main/java/lotto/ManualLottoCount.java @@ -9,13 +9,25 @@ public ManualLottoCount(int count, int purchaseAmount) { } public ManualLottoCount(int count, PurchaseAmount amount) { - if (amount.ticketCount() < count) { - throw new IllegalArgumentException("수동 장수는 구입 가능한 수량을 초과할 수 없습니다."); - } + validateNonNegativeCount(count); + validateNotExceedPurchaseAmount(count, amount); this.count = count; } public int count() { return count; } + + private static void validateNonNegativeCount(int count) { + if (count < 0) { + throw new IllegalArgumentException("수동 로또 수량은 0 이상이어야 합니다."); + } + } + + private static void validateNotExceedPurchaseAmount(int count, PurchaseAmount amount) { + if (amount.ticketCount() < count) { + throw new IllegalArgumentException("수동 장수는 구입 가능한 수량을 초과할 수 없습니다."); + } + } + } diff --git a/src/test/java/lotto/ManualLottoCountTest.java b/src/test/java/lotto/ManualLottoCountTest.java index 9fc7de0531..039b92a3fe 100644 --- a/src/test/java/lotto/ManualLottoCountTest.java +++ b/src/test/java/lotto/ManualLottoCountTest.java @@ -14,4 +14,10 @@ void createManualLottoCount() { .withMessageContaining("구입 가능한 수량을 초과"); } + @DisplayName("수동 장수가 음수인 경우 예외를 발생한다") + @Test + void negativeManualCount() { + assertThatIllegalArgumentException().isThrownBy(() -> new ManualLottoCount(-1, 1000)) + .withMessageContaining("0 이상"); + } } \ No newline at end of file From 1cedd9d1e510b81ce1d97b970e6046afa3c80a93 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Sat, 6 Dec 2025 01:03:10 +0900 Subject: [PATCH 12/16] =?UTF-8?q?feat:=20=EB=A1=9C=EB=98=90=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=A4=91=EB=B3=B5=20=EC=8B=9C=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Lotto.java | 20 +++++++++++++------- src/test/java/lotto/LottoTest.java | 7 +++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 30ef703d04..8c11ac1c8a 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -14,6 +14,7 @@ public class Lotto { public static final int LOTTO_NUMBER_COUNT = 6; private static final String ERROR_INVALID_COUNT = "로또 번호는 6개여야 한다"; + private static final String ERROR_DUPLICATE_NUMBER = "로또 번호에 중복이 있을 수 없습니다."; private final Set numbers; @@ -34,6 +35,14 @@ public static Lotto fromIntegers(List numbers) { return new Lotto(toLottoNumbers(numbers)); } + public List numbers() { + return Collections.unmodifiableList(new ArrayList<>(numbers)); + } + + public boolean contains(LottoNumber number) { + return numbers.contains(number); + } + private static List toLottoNumbers(List numbers) { return numbers.stream() .map(LottoNumber::of) @@ -61,14 +70,11 @@ private static void validateNumbersCount(List numbers) { if (numbers.size() != LOTTO_NUMBER_COUNT) { throw new IllegalArgumentException(ERROR_INVALID_COUNT); } - } - - public List numbers() { - return Collections.unmodifiableList(new ArrayList<>(numbers)); - } - public boolean contains(LottoNumber number) { - return numbers.contains(number); + long distinctCount = numbers.stream().distinct().count(); + if (distinctCount != LOTTO_NUMBER_COUNT) { + throw new IllegalArgumentException(ERROR_DUPLICATE_NUMBER); + } } @Override diff --git a/src/test/java/lotto/LottoTest.java b/src/test/java/lotto/LottoTest.java index bb5c9abff8..a594a5463b 100644 --- a/src/test/java/lotto/LottoTest.java +++ b/src/test/java/lotto/LottoTest.java @@ -39,6 +39,13 @@ void sortLottoNumbers() { assertThat(new Lotto("1,2,3,4,8,5")).isEqualTo(new Lotto("1,2,3,4,5,8")); } + @DisplayName("로또 번호는 중복 시 예외가 발생한다") + @Test + void duplicateLottoNumbers() { + assertThatIllegalArgumentException().isThrownBy(() -> new Lotto("1,2,3,4,8,8")) + .withMessageContaining("중복"); + } + static Stream> invalidLottoSizes() { return Stream.of( List.of(), From 7da001cfab14b5352aaf735c529878613baf1743 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Sat, 6 Dec 2025 15:42:52 +0900 Subject: [PATCH 13/16] =?UTF-8?q?feat:=20=EC=9E=AC=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/InputRetry.java | 19 +++++++++ src/main/java/lotto/LottoApplication.java | 48 ++++++++++++++++------- src/main/java/lotto/view/InputView.java | 17 ++++++-- 3 files changed, 66 insertions(+), 18 deletions(-) create mode 100644 src/main/java/lotto/InputRetry.java diff --git a/src/main/java/lotto/InputRetry.java b/src/main/java/lotto/InputRetry.java new file mode 100644 index 0000000000..f37f73d483 --- /dev/null +++ b/src/main/java/lotto/InputRetry.java @@ -0,0 +1,19 @@ +package lotto; + +import java.util.function.Supplier; + +public class InputRetry { + + private InputRetry() { + } + + public static T retry(Supplier action) { + while (true) { + try { + return action.get(); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + } + } +} diff --git a/src/main/java/lotto/LottoApplication.java b/src/main/java/lotto/LottoApplication.java index 3d9428836b..64c8c88dbc 100644 --- a/src/main/java/lotto/LottoApplication.java +++ b/src/main/java/lotto/LottoApplication.java @@ -7,25 +7,45 @@ public class LottoApplication { public static void main(String[] args) { - int input = InputView.readPurchaseAmount(); - PurchaseAmount amount = new PurchaseAmount(input); + PurchaseAmount amount = createPurchaseAmount(); - ManualLottoCount manualLottoCount = new ManualLottoCount(InputView.readManualLottoCount(), - amount); - Lottos manualLottos = Lottos.manualLottos(InputView.readManualLottos(manualLottoCount.count())); + ManualLottoCount manualCount = createManualLottoCount(amount); + Lottos manualLottos = createManualLottos(manualCount); + Lottos autoLottos = LottoMachine.randomLottos(amount.autoCount(manualCount)); - Lottos lottos = LottoMachine.randomLottos(amount.autoCount(manualLottoCount)); + Lottos purchased = manualLottos.merge(autoLottos); + ResultView.printPurchasedLottos(purchased, manualCount); - Lottos mergedLottos = manualLottos.merge(lottos); - ResultView.printPurchasedLottos(mergedLottos, manualLottoCount); - - Lotto winningNumbers = new Lotto(InputView.readWinningNumbers()); - LottoNumber bonusNumber = LottoNumber.of(InputView.readBonusNumber()); - - LottoMatchResult matchResult = lottos.matchResult( - new WinningNumbers(winningNumbers, bonusNumber)); + WinningNumbers winningNumbers = createWinningNumbers(); + LottoMatchResult matchResult = purchased.matchResult(winningNumbers); ProfitRate profitRate = new ProfitRate(matchResult.totalPrize(), amount); ResultView.printLottoResult(matchResult, profitRate); } + + private static PurchaseAmount createPurchaseAmount() { + return InputRetry.retry(() -> + new PurchaseAmount(InputView.readPurchaseAmount()) + ); + } + + private static ManualLottoCount createManualLottoCount(PurchaseAmount amount) { + return InputRetry.retry(() -> + new ManualLottoCount(InputView.readManualLottoCount(), amount) + ); + } + + private static Lottos createManualLottos(ManualLottoCount manualCount) { + return InputRetry.retry(() -> + Lottos.manualLottos(InputView.readManualLottos(manualCount.count())) + ); + } + + private static WinningNumbers createWinningNumbers() { + return InputRetry.retry(() -> { + Lotto winning = new Lotto(InputView.readWinningNumbers()); + LottoNumber bonus = LottoNumber.of(InputView.readBonusNumber()); + return new WinningNumbers(winning, bonus); + }); + } } diff --git a/src/main/java/lotto/view/InputView.java b/src/main/java/lotto/view/InputView.java index 6c137ad95a..eaeb22bbf3 100644 --- a/src/main/java/lotto/view/InputView.java +++ b/src/main/java/lotto/view/InputView.java @@ -1,8 +1,10 @@ package lotto.view; import java.util.ArrayList; +import java.util.InputMismatchException; import java.util.List; import java.util.Scanner; +import lotto.InputRetry; public class InputView { @@ -39,10 +41,17 @@ public static int readBonusNumber() { } private static int readInt() { - int value = SCANNER.nextInt(); - SCANNER.nextLine(); - System.out.println(); - return value; + return InputRetry.retry(() -> { + try { + int value = SCANNER.nextInt(); + SCANNER.nextLine(); + System.out.println(); + return value; + } catch (InputMismatchException e) { + SCANNER.nextLine(); + throw new IllegalArgumentException("숫자를 올바르게 입력하세요."); + } + }); } } From 6e21790efb4cf521439a88227e4bb92720b94e65 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Sat, 6 Dec 2025 15:50:47 +0900 Subject: [PATCH 14/16] =?UTF-8?q?refactor:=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=83=81=EC=88=98=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/Lotto.java | 3 ++- src/main/java/lotto/ManualLottoCount.java | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 8c11ac1c8a..e64c674eb7 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -15,6 +15,7 @@ public class Lotto { private static final String ERROR_INVALID_COUNT = "로또 번호는 6개여야 한다"; private static final String ERROR_DUPLICATE_NUMBER = "로또 번호에 중복이 있을 수 없습니다."; + private static final String ERROR_INVALID_FORMAT = "숫자 형식이 올바르지 않습니다: "; private final Set numbers; @@ -62,7 +63,7 @@ private static int parseIntOrThrow(String s) { try { return Integer.parseInt(s.trim()); } catch (NumberFormatException e) { - throw new IllegalArgumentException("숫자 형식이 올바르지 않습니다: " + s); + throw new IllegalArgumentException(ERROR_INVALID_FORMAT + s); } } diff --git a/src/main/java/lotto/ManualLottoCount.java b/src/main/java/lotto/ManualLottoCount.java index 0d8305f37d..cba04f1909 100644 --- a/src/main/java/lotto/ManualLottoCount.java +++ b/src/main/java/lotto/ManualLottoCount.java @@ -2,6 +2,8 @@ public class ManualLottoCount { + private static final String ERROR_NEGATIVE_COUNT = "수동 로또 수량은 0 이상이어야 합니다."; + private static final String ERROR_EXCEED_PURCHASE = "수동 장수는 구입 가능한 수량을 초과할 수 없습니다."; private final int count; public ManualLottoCount(int count, int purchaseAmount) { @@ -20,13 +22,13 @@ public int count() { private static void validateNonNegativeCount(int count) { if (count < 0) { - throw new IllegalArgumentException("수동 로또 수량은 0 이상이어야 합니다."); + throw new IllegalArgumentException(ERROR_NEGATIVE_COUNT); } } private static void validateNotExceedPurchaseAmount(int count, PurchaseAmount amount) { if (amount.ticketCount() < count) { - throw new IllegalArgumentException("수동 장수는 구입 가능한 수량을 초과할 수 없습니다."); + throw new IllegalArgumentException(ERROR_EXCEED_PURCHASE); } } From 642f982b853c1deb3488dda2da0784d165331a81 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Sun, 7 Dec 2025 22:12:48 +0900 Subject: [PATCH 15/16] =?UTF-8?q?feat:=20LottosGenerator=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=8F=84=EC=9E=85=20?= =?UTF-8?q?=EB=B0=8F=20Auto/Manual=20=EA=B5=AC=ED=98=84=EC=B2=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/AutoLottosGenerator.java | 23 +++++++++++++++++++ src/main/java/lotto/LottoMachine.java | 2 +- src/main/java/lotto/LottosGenerator.java | 6 +++++ .../java/lotto/ManualLottosGenerator.java | 17 ++++++++++++++ .../java/lotto/AutoLottosGeneratorTest.java | 14 +++++++++++ src/test/java/lotto/LottoMachineTest.java | 7 +++--- .../java/lotto/ManualLottosGeneratorTest.java | 15 ++++++++++++ 7 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 src/main/java/lotto/AutoLottosGenerator.java create mode 100644 src/main/java/lotto/LottosGenerator.java create mode 100644 src/main/java/lotto/ManualLottosGenerator.java create mode 100644 src/test/java/lotto/AutoLottosGeneratorTest.java create mode 100644 src/test/java/lotto/ManualLottosGeneratorTest.java diff --git a/src/main/java/lotto/AutoLottosGenerator.java b/src/main/java/lotto/AutoLottosGenerator.java new file mode 100644 index 0000000000..b120645e71 --- /dev/null +++ b/src/main/java/lotto/AutoLottosGenerator.java @@ -0,0 +1,23 @@ +package lotto; + +import java.util.ArrayList; +import java.util.List; + +public class AutoLottosGenerator implements LottosGenerator { + + private final int count; + + public AutoLottosGenerator(int count) { + this.count = count; + } + + @Override + public Lottos generate() { + List lottos = new ArrayList<>(); + for (int i = 0; i < count; i++) { + lottos.add(LottoMachine.randomLotto()); + } + return new Lottos(lottos); + } + +} diff --git a/src/main/java/lotto/LottoMachine.java b/src/main/java/lotto/LottoMachine.java index bb05463e96..b9db97a67f 100644 --- a/src/main/java/lotto/LottoMachine.java +++ b/src/main/java/lotto/LottoMachine.java @@ -14,7 +14,7 @@ public static Lottos randomLottos(int count) { return new Lottos(lottos); } - private static Lotto randomLotto() { + public static Lotto randomLotto() { List numbers = new ArrayList<>(); for (int i = Lotto.MIN_NUMBER; i <= Lotto.MAX_NUMBER; i++) { numbers.add(i); diff --git a/src/main/java/lotto/LottosGenerator.java b/src/main/java/lotto/LottosGenerator.java new file mode 100644 index 0000000000..88d97a6b82 --- /dev/null +++ b/src/main/java/lotto/LottosGenerator.java @@ -0,0 +1,6 @@ +package lotto; + +public interface LottosGenerator { + + Lottos generate(); +} diff --git a/src/main/java/lotto/ManualLottosGenerator.java b/src/main/java/lotto/ManualLottosGenerator.java new file mode 100644 index 0000000000..859c8f6edd --- /dev/null +++ b/src/main/java/lotto/ManualLottosGenerator.java @@ -0,0 +1,17 @@ +package lotto; + +import java.util.List; + +public class ManualLottosGenerator implements LottosGenerator { + + private final List manualNumbers; + + public ManualLottosGenerator(List manualNumbers) { + this.manualNumbers = manualNumbers; + } + + @Override + public Lottos generate() { + return new Lottos(manualNumbers.stream().map(Lotto::new).toList()); + } +} diff --git a/src/test/java/lotto/AutoLottosGeneratorTest.java b/src/test/java/lotto/AutoLottosGeneratorTest.java new file mode 100644 index 0000000000..e7859a59ab --- /dev/null +++ b/src/test/java/lotto/AutoLottosGeneratorTest.java @@ -0,0 +1,14 @@ +package lotto; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class AutoLottosGeneratorTest { + + @Test + void generateAutoLottos() { + assertThat(new AutoLottosGenerator(5).generate().count()).isEqualTo(5); + } + +} \ No newline at end of file diff --git a/src/test/java/lotto/LottoMachineTest.java b/src/test/java/lotto/LottoMachineTest.java index 31755e28d3..9f827491d0 100644 --- a/src/test/java/lotto/LottoMachineTest.java +++ b/src/test/java/lotto/LottoMachineTest.java @@ -7,10 +7,9 @@ public class LottoMachineTest { - @DisplayName("구입한 수만큼 로또를 발행한다") + @DisplayName("자동 로또를 1개 발행한다") @Test - void randomLottos() { - Lottos lottos = LottoMachine.randomLottos(10); - assertThat(lottos.count()).isEqualTo(10); + void randomLotto() { + assertThat(LottoMachine.randomLotto().numbers()).hasSize(6); } } diff --git a/src/test/java/lotto/ManualLottosGeneratorTest.java b/src/test/java/lotto/ManualLottosGeneratorTest.java new file mode 100644 index 0000000000..e8f41dfe58 --- /dev/null +++ b/src/test/java/lotto/ManualLottosGeneratorTest.java @@ -0,0 +1,15 @@ +package lotto; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import org.junit.jupiter.api.Test; + +class ManualLottosGeneratorTest { + + @Test + void generateManualLottos() { + List inputs = List.of("1,2,3,4,5,6", "7,8,9,10,11,12"); + assertThat(new ManualLottosGenerator(inputs).generate().count()).isEqualTo(2); + } +} \ No newline at end of file From 01f26c65cee7b74798a0457434b6c5feb633bf48 Mon Sep 17 00:00:00 2001 From: username0w <163955522+username0w@users.noreply.github.com> Date: Sun, 7 Dec 2025 23:42:14 +0900 Subject: [PATCH 16/16] =?UTF-8?q?refactor:=20LottoApplication=EC=97=90?= =?UTF-8?q?=EC=84=9C=20LottosGenerator=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/lotto/LottoApplication.java | 11 +++++++---- src/main/java/lotto/LottoMachine.java | 8 -------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/lotto/LottoApplication.java b/src/main/java/lotto/LottoApplication.java index 64c8c88dbc..768beddf8a 100644 --- a/src/main/java/lotto/LottoApplication.java +++ b/src/main/java/lotto/LottoApplication.java @@ -1,5 +1,6 @@ package lotto; +import java.util.List; import lotto.view.InputView; import lotto.view.ResultView; @@ -11,7 +12,7 @@ public static void main(String[] args) { ManualLottoCount manualCount = createManualLottoCount(amount); Lottos manualLottos = createManualLottos(manualCount); - Lottos autoLottos = LottoMachine.randomLottos(amount.autoCount(manualCount)); + Lottos autoLottos = new AutoLottosGenerator(amount.autoCount(manualCount)).generate(); Lottos purchased = manualLottos.merge(autoLottos); ResultView.printPurchasedLottos(purchased, manualCount); @@ -36,9 +37,11 @@ private static ManualLottoCount createManualLottoCount(PurchaseAmount amount) { } private static Lottos createManualLottos(ManualLottoCount manualCount) { - return InputRetry.retry(() -> - Lottos.manualLottos(InputView.readManualLottos(manualCount.count())) - ); + return InputRetry.retry(() -> { + List manualNumbers = InputView.readManualLottos(manualCount.count()); + LottosGenerator generator = new ManualLottosGenerator(manualNumbers); + return generator.generate(); + }); } private static WinningNumbers createWinningNumbers() { diff --git a/src/main/java/lotto/LottoMachine.java b/src/main/java/lotto/LottoMachine.java index b9db97a67f..f4f39da4a5 100644 --- a/src/main/java/lotto/LottoMachine.java +++ b/src/main/java/lotto/LottoMachine.java @@ -6,14 +6,6 @@ public class LottoMachine { - public static Lottos randomLottos(int count) { - List lottos = new ArrayList<>(); - for (int i = 0; i < count; i++) { - lottos.add(randomLotto()); - } - return new Lottos(lottos); - } - public static Lotto randomLotto() { List numbers = new ArrayList<>(); for (int i = Lotto.MIN_NUMBER; i <= Lotto.MAX_NUMBER; i++) {