From 69792548d98adeeaa8bac4516a81db346f19cb55 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 13:21:41 +0900 Subject: [PATCH 01/15] =?UTF-8?q?docs(readme):=20README=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 --- README.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/README.md b/README.md index 8a4f22ed0..2c72d664a 100644 --- a/README.md +++ b/README.md @@ -1 +1,51 @@ # java-planetlotto-precourse + + +--- + +## 입출력 + +### 입력 + +입력 함수는 입력만 담당하며, 객체 생성과 검증은 다른 계층에서 수행한다. + +### 1. 로또 구입 금액 입력 + +- 입력값은 500으로 나누어 떨어져야 한다. +- 숫자만 입력해야 한다. + +### 2. 당첨 번호 입력 + +- 5개의 숫자만 입력해야 하며 허용된 범위 안의 숫자여야 한다. +- 중복된 숫자는 입력할 수 없다. +- 쉼표로 구분하며 공백은 허용되지 않는다. + +### 3. 보너스 번호 입력 + +- 당첨 번호와 중복되서는 안된다. +- 허용된 범위 안의 숫자여야 한다. + +--- + +### 출력 + +출력 함수는 계산된 값을 전달받아 출력만 담당한다. + +1. 구매한 로또 출력 +2. 당첨 통계 출력 + +--- + +## 핵심 기능 + +### 로또 구입 기능 +- 금액을 입력하면 입력한 금액만큼의 로또를 랜덤으로 생성한다. +### 당첨 번호 및 보너스 번호 입력 기능 +- 당첨 번호를 입력할 수 있다. + +### 당첨 통계 기능 +- 사용자가 구입한 로또와 당첨 로또를 비교하여 등수를 측정한다. +- 총 등수와 금액을 출력한다. + +--- + From 492799919a424b5e88c699bb860ea8b7d4057d04 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 14:16:49 +0900 Subject: [PATCH 02/15] =?UTF-8?q?feat:=20=EB=A1=9C=EB=98=90=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사용자에게 금액 입력 받고, 그 수 만큼 로또 생성 - 랜덤 숫자 생성기 구현 --- src/main/java/planetlotto/Application.java | 11 ++++- .../controller/LottoController.java | 41 ++++++++++++++++++ src/main/java/planetlotto/domain/Lotto.java | 41 ++++++++++++++++++ .../generator/NumberGenerator.java | 8 ++++ .../generator/RandomNumberGenerator.java | 23 ++++++++++ .../planetlotto/service/LottoService.java | 42 +++++++++++++++++++ .../java/planetlotto/view/OutputView.java | 14 +++++++ 7 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 src/main/java/planetlotto/controller/LottoController.java create mode 100644 src/main/java/planetlotto/domain/Lotto.java create mode 100644 src/main/java/planetlotto/generator/NumberGenerator.java create mode 100644 src/main/java/planetlotto/generator/RandomNumberGenerator.java create mode 100644 src/main/java/planetlotto/service/LottoService.java diff --git a/src/main/java/planetlotto/Application.java b/src/main/java/planetlotto/Application.java index 27d0a8f96..7658069ae 100644 --- a/src/main/java/planetlotto/Application.java +++ b/src/main/java/planetlotto/Application.java @@ -1,7 +1,16 @@ package planetlotto; +import planetlotto.controller.LottoController; +import planetlotto.generator.NumberGenerator; +import planetlotto.generator.RandomNumberGenerator; +import planetlotto.service.LottoService; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + NumberGenerator numberGenerator = new RandomNumberGenerator(); + LottoService lottoService = new LottoService(numberGenerator); + + LottoController lottoController = new LottoController(lottoService); + lottoController.run(); } } diff --git a/src/main/java/planetlotto/controller/LottoController.java b/src/main/java/planetlotto/controller/LottoController.java new file mode 100644 index 000000000..a250b45d9 --- /dev/null +++ b/src/main/java/planetlotto/controller/LottoController.java @@ -0,0 +1,41 @@ +package planetlotto.controller; + +import java.util.List; +import planetlotto.domain.Lotto; +import planetlotto.service.LottoService; +import planetlotto.view.InputView; +import planetlotto.view.OutputView; + +public class LottoController { + + private final LottoService lottoService; + + public LottoController(LottoService lottoService) { + this.lottoService = lottoService; + } + + public void run() { + runPurchaseLottoStep(); + } + + private void runPurchaseLottoStep() { + while (true) { + try { + execute(); + return; + } catch (IllegalArgumentException e) { + handleError(e); + } + } + } + + private void execute() { + int amount = InputView.askAmount(); + List lottos = lottoService.purchaseLotto(amount); + OutputView.printPurchasedLotto(lottos); + } + + private void handleError(IllegalArgumentException e) { + OutputView.printErrorMessage(e.getMessage()); + } +} diff --git a/src/main/java/planetlotto/domain/Lotto.java b/src/main/java/planetlotto/domain/Lotto.java new file mode 100644 index 000000000..48507d47e --- /dev/null +++ b/src/main/java/planetlotto/domain/Lotto.java @@ -0,0 +1,41 @@ +package planetlotto.domain; + +import java.util.ArrayList; +import java.util.List; + +public class Lotto { + + private List numbers = new ArrayList<>(); + + public Lotto(List numbers) { + this.numbers = numbers; + } + + public Lotto() { + } + + public void addNumber(int number){ + numbers.add(number); + } + + public void validateLotto(List numbers) { + + //숫자 범위 검증 + for (Integer number : numbers) { + if (number < 1 || number > 30) { + throw new IllegalArgumentException("로또 번호는 1부터 30 사이의 숫자여야 합니다.\n"); + } + } + + //숫자 개수 검증 + if (numbers.size() != 5) { + throw new IllegalArgumentException("로또 번호는 5개여야 합니다."); + } + + } + + public List getNumbers(){ + return numbers; + } + +} diff --git a/src/main/java/planetlotto/generator/NumberGenerator.java b/src/main/java/planetlotto/generator/NumberGenerator.java new file mode 100644 index 000000000..bf9a80a19 --- /dev/null +++ b/src/main/java/planetlotto/generator/NumberGenerator.java @@ -0,0 +1,8 @@ +package planetlotto.generator; + +import java.util.List; + +public interface NumberGenerator { + + List generate(); +} diff --git a/src/main/java/planetlotto/generator/RandomNumberGenerator.java b/src/main/java/planetlotto/generator/RandomNumberGenerator.java new file mode 100644 index 000000000..659794cc9 --- /dev/null +++ b/src/main/java/planetlotto/generator/RandomNumberGenerator.java @@ -0,0 +1,23 @@ +package planetlotto.generator; + +import static camp.nextstep.edu.missionutils.Randoms.*; + +import java.util.Collections; +import java.util.List; + +public class RandomNumberGenerator implements NumberGenerator { + + private static final int START = 1; + private static final int END = 30; + private static final int COUNT = 5; + + @Override + public List generate(){ + + List numbers = pickUniqueNumbersInRange(START, END, COUNT); + Collections.sort(numbers); + + return numbers; + } + +} diff --git a/src/main/java/planetlotto/service/LottoService.java b/src/main/java/planetlotto/service/LottoService.java new file mode 100644 index 000000000..0934fed83 --- /dev/null +++ b/src/main/java/planetlotto/service/LottoService.java @@ -0,0 +1,42 @@ +package planetlotto.service; + +import java.util.ArrayList; +import java.util.List; +import planetlotto.domain.Lotto; +import planetlotto.generator.NumberGenerator; + +public class LottoService { + + private static final int PURCHASE_AMOUNT = 500; + + private final NumberGenerator numberGenerator; + + public LottoService(NumberGenerator numberGenerator) { + this.numberGenerator = numberGenerator; + } + + public List purchaseLotto(int money) { + + int count = money/PURCHASE_AMOUNT; + + if (money % PURCHASE_AMOUNT != 0) { + throw new IllegalArgumentException("로또 1장의 가격은 500원입니다."); + } + + List lottos = new ArrayList<>(); + + for (int i = 0; i < count; i++) { + List numbers = numberGenerator.generate(); + // Lotto lotto = new Lotto(numbers); + Lotto lotto = new Lotto(); + for(int number: numbers){ + lotto.addNumber(number); + } + lottos.add(lotto); + } + + return lottos; + } + + +} diff --git a/src/main/java/planetlotto/view/OutputView.java b/src/main/java/planetlotto/view/OutputView.java index 0452898da..6ecc3178e 100644 --- a/src/main/java/planetlotto/view/OutputView.java +++ b/src/main/java/planetlotto/view/OutputView.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import planetlotto.domain.Lotto; import static java.lang.System.lineSeparator; @@ -44,4 +45,17 @@ public static void printResult(final Map countsByRank) { public static void printErrorMessage(final String message) { System.out.printf("[ERROR] %s%n", message); } + + public static void printPurchasedLotto(List lottos){ + + int quantity = lottos.size(); + + System.out.printf("%s개를 구매했습니다\n",quantity); + + for(Lotto lotto : lottos){ + System.out.println(lotto.getNumbers()); + } + + + } } From c5e29f12c8cd3bef3595b8c6c606e930355a4fb7 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 14:45:16 +0900 Subject: [PATCH 03/15] =?UTF-8?q?feat:=20=EB=8B=B9=EC=B2=A8=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=EC=99=80=20=EB=B3=B4=EB=84=88=EC=8A=A4=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기존 도메인인 Lotto를 이용 - 보너스 번호와 당첨 로또 생성을 달리 하여 따로 받을 수 있도록 구현 --- .../controller/LottoController.java | 47 ++++++++++++++++++- .../java/planetlotto/domain/WinningLotto.java | 30 ++++++++++++ .../planetlotto/service/LottoService.java | 13 ++++- 3 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 src/main/java/planetlotto/domain/WinningLotto.java diff --git a/src/main/java/planetlotto/controller/LottoController.java b/src/main/java/planetlotto/controller/LottoController.java index a250b45d9..3d2435d8a 100644 --- a/src/main/java/planetlotto/controller/LottoController.java +++ b/src/main/java/planetlotto/controller/LottoController.java @@ -1,7 +1,9 @@ package planetlotto.controller; + import java.util.List; import planetlotto.domain.Lotto; +import planetlotto.domain.WinningLotto; import planetlotto.service.LottoService; import planetlotto.view.InputView; import planetlotto.view.OutputView; @@ -16,12 +18,16 @@ public LottoController(LottoService lottoService) { public void run() { runPurchaseLottoStep(); + + WinningLotto winningLotto = runSetWinningLottoStep(); + runSetBonusNumberStep(winningLotto); + } private void runPurchaseLottoStep() { while (true) { try { - execute(); + purchaseLotto(); return; } catch (IllegalArgumentException e) { handleError(e); @@ -29,12 +35,49 @@ private void runPurchaseLottoStep() { } } - private void execute() { + private void purchaseLotto() { int amount = InputView.askAmount(); List lottos = lottoService.purchaseLotto(amount); OutputView.printPurchasedLotto(lottos); } + + private WinningLotto runSetWinningLottoStep(){ + while (true) { + try { + WinningLotto winningLotto = setWinningLotto(); + return winningLotto; + } catch (IllegalArgumentException e) { + handleError(e); + } + } + } + + + private WinningLotto setWinningLotto() { + List integers = InputView.askWinningLotto(); + + return lottoService.setWinningLotto(integers); + } + + private void runSetBonusNumberStep(WinningLotto winningLotto){ + while (true) { + try { + setBonusNumber(winningLotto); + return; + } catch (IllegalArgumentException e) { + handleError(e); + } + } + } + + private void setBonusNumber(WinningLotto winningLotto) { + + int bonusNumber = InputView.askBonusNumber(); + lottoService.setBonusNumber(winningLotto, bonusNumber); + + } + private void handleError(IllegalArgumentException e) { OutputView.printErrorMessage(e.getMessage()); } diff --git a/src/main/java/planetlotto/domain/WinningLotto.java b/src/main/java/planetlotto/domain/WinningLotto.java new file mode 100644 index 000000000..30d6cdc5b --- /dev/null +++ b/src/main/java/planetlotto/domain/WinningLotto.java @@ -0,0 +1,30 @@ +package planetlotto.domain; + +import java.util.List; + +public class WinningLotto { + + private final Lotto winningLotto; + private int bonusNumber; + + public WinningLotto(List numbers) { + this.winningLotto = new Lotto(numbers); + this.bonusNumber = 0; + } + + public void setBonusNumber(int number){ + validateBonusNumber(number); + this.bonusNumber = number; + } + + public void validateBonusNumber(int bonusNumber){ + List numbers = winningLotto.getNumbers(); + + for(int number: numbers){ + if (number == bonusNumber){ + throw new IllegalArgumentException("보너스 숫자와 당첨 번호는 중복될 수 없습니다."); + } + } + } +} + diff --git a/src/main/java/planetlotto/service/LottoService.java b/src/main/java/planetlotto/service/LottoService.java index 0934fed83..4b61da7b7 100644 --- a/src/main/java/planetlotto/service/LottoService.java +++ b/src/main/java/planetlotto/service/LottoService.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; import planetlotto.domain.Lotto; +import planetlotto.domain.WinningLotto; import planetlotto.generator.NumberGenerator; public class LottoService { @@ -17,7 +18,7 @@ public LottoService(NumberGenerator numberGenerator) { public List purchaseLotto(int money) { - int count = money/PURCHASE_AMOUNT; + int count = money / PURCHASE_AMOUNT; if (money % PURCHASE_AMOUNT != 0) { throw new IllegalArgumentException("로또 1장의 가격은 500원입니다."); @@ -29,7 +30,7 @@ public List purchaseLotto(int money) { List numbers = numberGenerator.generate(); // Lotto lotto = new Lotto(numbers); Lotto lotto = new Lotto(); - for(int number: numbers){ + for (int number : numbers) { lotto.addNumber(number); } lottos.add(lotto); @@ -38,5 +39,13 @@ public List purchaseLotto(int money) { return lottos; } + public WinningLotto setWinningLotto(List numbers) { + return new WinningLotto(numbers); + } + + public void setBonusNumber(WinningLotto winningLotto, int bonusNumber) { + winningLotto.setBonusNumber(bonusNumber); + } + } From 2528c908b3d406933ffe3b4590724194b7e198bd Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 14:16:49 +0900 Subject: [PATCH 04/15] =?UTF-8?q?feat:=20=EB=8B=B9=EC=B2=A8=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EB=B0=98=ED=99=98=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rank를 통해 로또 결과를 바로 볼 수 있도록 구현 --- .../controller/LottoController.java | 32 +++++++++++++--- src/main/java/planetlotto/domain/Rank.java | 37 +++++++++++++++++++ .../java/planetlotto/domain/WinningLotto.java | 11 ++++++ .../planetlotto/service/LottoService.java | 22 +++++++++++ 4 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 src/main/java/planetlotto/domain/Rank.java diff --git a/src/main/java/planetlotto/controller/LottoController.java b/src/main/java/planetlotto/controller/LottoController.java index 3d2435d8a..11aa56adc 100644 --- a/src/main/java/planetlotto/controller/LottoController.java +++ b/src/main/java/planetlotto/controller/LottoController.java @@ -2,6 +2,7 @@ import java.util.List; +import java.util.Map; import planetlotto.domain.Lotto; import planetlotto.domain.WinningLotto; import planetlotto.service.LottoService; @@ -17,28 +18,32 @@ public LottoController(LottoService lottoService) { } public void run() { - runPurchaseLottoStep(); + List userLottos = runPurchaseLottoStep(); WinningLotto winningLotto = runSetWinningLottoStep(); runSetBonusNumberStep(winningLotto); + runPrintResultStep(userLottos, winningLotto); } - private void runPurchaseLottoStep() { + + + private List runPurchaseLottoStep() { while (true) { try { - purchaseLotto(); - return; + return purchaseLotto(); } catch (IllegalArgumentException e) { handleError(e); } } } - private void purchaseLotto() { + private List purchaseLotto() { int amount = InputView.askAmount(); List lottos = lottoService.purchaseLotto(amount); OutputView.printPurchasedLotto(lottos); + + return lottos; } @@ -78,6 +83,23 @@ private void setBonusNumber(WinningLotto winningLotto) { } + private void runPrintResultStep(List userLottos, WinningLotto winningLotto) { + while (true) { + try { + getResult(userLottos, winningLotto); + return; + } catch (IllegalArgumentException e) { + handleError(e); + } + } + } + + private void getResult(List userLottos, WinningLotto winningLotto) { + + Map userResult = lottoService.getUserResult(userLottos, winningLotto); + OutputView.printResult(userResult); + } + private void handleError(IllegalArgumentException e) { OutputView.printErrorMessage(e.getMessage()); } diff --git a/src/main/java/planetlotto/domain/Rank.java b/src/main/java/planetlotto/domain/Rank.java new file mode 100644 index 000000000..10de2a73c --- /dev/null +++ b/src/main/java/planetlotto/domain/Rank.java @@ -0,0 +1,37 @@ +package planetlotto.domain; + +import java.util.Arrays; + +public enum Rank { + FIRST(5, false, 1), + SECOND(4, true, 2), + THIRD(4, false, 3), + FOURTH(3, true, 4), + FIFTH(2, true, 5), + MISS(0, false, 6); + + private final int matchCount; + private final boolean matchedBonusNumber; + private final int prize; + + Rank(int matchCount, boolean matchedBonusNumber, int prize) { + this.matchCount = matchCount; + this.prize = prize; + this.matchedBonusNumber = matchedBonusNumber; + } + + public static Rank of(int matchCount, boolean matchedBonusNumber) { + return Arrays.stream(values()) + .filter(rank -> rank.matchCount == matchCount) + .filter(rank -> rank.matchedBonusNumber == matchedBonusNumber) + .findFirst() + .orElse(MISS); + } + + public int getPrize(){ + return prize; + } + + + +} \ No newline at end of file diff --git a/src/main/java/planetlotto/domain/WinningLotto.java b/src/main/java/planetlotto/domain/WinningLotto.java index 30d6cdc5b..6df3d82e0 100644 --- a/src/main/java/planetlotto/domain/WinningLotto.java +++ b/src/main/java/planetlotto/domain/WinningLotto.java @@ -26,5 +26,16 @@ public void validateBonusNumber(int bonusNumber){ } } } + + public Rank match(Lotto lotto){ + int count = Math.toIntExact(lotto.getNumbers().stream() + .filter(winningLotto.getNumbers()::contains) + .count()); + + boolean matchedBonus = lotto.getNumbers().contains(bonusNumber); + + return Rank.of(count, matchedBonus); + } + } diff --git a/src/main/java/planetlotto/service/LottoService.java b/src/main/java/planetlotto/service/LottoService.java index 4b61da7b7..ff23e13f0 100644 --- a/src/main/java/planetlotto/service/LottoService.java +++ b/src/main/java/planetlotto/service/LottoService.java @@ -1,8 +1,12 @@ package planetlotto.service; import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; import java.util.List; +import java.util.Map; import planetlotto.domain.Lotto; +import planetlotto.domain.Rank; import planetlotto.domain.WinningLotto; import planetlotto.generator.NumberGenerator; @@ -47,5 +51,23 @@ public void setBonusNumber(WinningLotto winningLotto, int bonusNumber) { winningLotto.setBonusNumber(bonusNumber); } + public Map getUserResult(List userLottos, WinningLotto winningLotto){ + + Map count = new EnumMap<>(Rank.class); + + for(Lotto userLotto : userLottos){ + Rank match = winningLotto.match(userLotto); + count.put(match, count.getOrDefault(match, 0) + 1); + } + + Map result = new HashMap<>(); + + for (Map.Entry entry : count.entrySet()) { + result.put(entry.getKey().getPrize(),entry.getValue()); + } + + return result; + } + } From f1337c2a7e4214128959671bc8b5d2c207e46d2a Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 15:41:30 +0900 Subject: [PATCH 05/15] =?UTF-8?q?refactor:=20OutputView=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=20=ED=95=A8=EC=88=98=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../planetlotto/controller/LottoController.java | 4 +++- .../java/planetlotto/service/LottoService.java | 16 +++++++++++++++- src/main/java/planetlotto/view/OutputView.java | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/planetlotto/controller/LottoController.java b/src/main/java/planetlotto/controller/LottoController.java index 11aa56adc..0de976315 100644 --- a/src/main/java/planetlotto/controller/LottoController.java +++ b/src/main/java/planetlotto/controller/LottoController.java @@ -41,7 +41,9 @@ private List runPurchaseLottoStep() { private List purchaseLotto() { int amount = InputView.askAmount(); List lottos = lottoService.purchaseLotto(amount); - OutputView.printPurchasedLotto(lottos); + + List> results = lottoService.convertLotto(lottos); + OutputView.printPurchasedLottos(results); return lottos; } diff --git a/src/main/java/planetlotto/service/LottoService.java b/src/main/java/planetlotto/service/LottoService.java index ff23e13f0..238494195 100644 --- a/src/main/java/planetlotto/service/LottoService.java +++ b/src/main/java/planetlotto/service/LottoService.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import planetlotto.domain.Lotto; import planetlotto.domain.Rank; import planetlotto.domain.WinningLotto; @@ -43,6 +44,19 @@ public List purchaseLotto(int money) { return lottos; } + public List> convertLotto(List lottos){ + + List> results = new ArrayList<>(); + + for(Lotto lotto : lottos){ + List numbers = lotto.getNumbers(); + results.add(numbers); + } + + return results; + } + + public WinningLotto setWinningLotto(List numbers) { return new WinningLotto(numbers); } @@ -62,7 +76,7 @@ public Map getUserResult(List userLottos, WinningLotto Map result = new HashMap<>(); - for (Map.Entry entry : count.entrySet()) { + for (Entry entry : count.entrySet()) { result.put(entry.getKey().getPrize(),entry.getValue()); } diff --git a/src/main/java/planetlotto/view/OutputView.java b/src/main/java/planetlotto/view/OutputView.java index 6ecc3178e..1574949df 100644 --- a/src/main/java/planetlotto/view/OutputView.java +++ b/src/main/java/planetlotto/view/OutputView.java @@ -50,7 +50,7 @@ public static void printPurchasedLotto(List lottos){ int quantity = lottos.size(); - System.out.printf("%s개를 구매했습니다\n",quantity); + System.out.printf("\n%s개를 구매했습니다\n",quantity); for(Lotto lotto : lottos){ System.out.println(lotto.getNumbers()); From b7be21e2ec0966a433dc03b3b20b7ff9601eac87 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 15:58:01 +0900 Subject: [PATCH 06/15] =?UTF-8?q?fix:=20=EA=B8=B0=EB=B3=B8=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 결과 반납할 때 MISS의 prize를 0으로 수정하여 계산 안되던 오류 수정 --- src/main/java/planetlotto/domain/Lotto.java | 1 + src/main/java/planetlotto/domain/Rank.java | 2 +- .../java/planetlotto/generator/RandomNumberGenerator.java | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/planetlotto/domain/Lotto.java b/src/main/java/planetlotto/domain/Lotto.java index 48507d47e..4bcaf1a0d 100644 --- a/src/main/java/planetlotto/domain/Lotto.java +++ b/src/main/java/planetlotto/domain/Lotto.java @@ -8,6 +8,7 @@ public class Lotto { private List numbers = new ArrayList<>(); public Lotto(List numbers) { + validateLotto(numbers); this.numbers = numbers; } diff --git a/src/main/java/planetlotto/domain/Rank.java b/src/main/java/planetlotto/domain/Rank.java index 10de2a73c..c4a1f30f0 100644 --- a/src/main/java/planetlotto/domain/Rank.java +++ b/src/main/java/planetlotto/domain/Rank.java @@ -8,7 +8,7 @@ public enum Rank { THIRD(4, false, 3), FOURTH(3, true, 4), FIFTH(2, true, 5), - MISS(0, false, 6); + MISS(0, true, 0); private final int matchCount; private final boolean matchedBonusNumber; diff --git a/src/main/java/planetlotto/generator/RandomNumberGenerator.java b/src/main/java/planetlotto/generator/RandomNumberGenerator.java index 659794cc9..d7be7ee39 100644 --- a/src/main/java/planetlotto/generator/RandomNumberGenerator.java +++ b/src/main/java/planetlotto/generator/RandomNumberGenerator.java @@ -3,6 +3,7 @@ import static camp.nextstep.edu.missionutils.Randoms.*; import java.util.Collections; +import java.util.Comparator; import java.util.List; public class RandomNumberGenerator implements NumberGenerator { @@ -15,9 +16,8 @@ public class RandomNumberGenerator implements NumberGenerator { public List generate(){ List numbers = pickUniqueNumbersInRange(START, END, COUNT); - Collections.sort(numbers); - - return numbers; + List list = numbers.stream().sorted().toList(); + return list; } } From 563909f74d0c5309dd882dcd6f919ff662c2a1f5 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 16:36:06 +0900 Subject: [PATCH 07/15] =?UTF-8?q?refactor:=20AppConfig=20=EB=A1=9C=20?= =?UTF-8?q?=EC=A2=85=EC=86=8D=EC=84=B1=20=EA=B4=80=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/planetlotto/config/AppConfig.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/main/java/planetlotto/config/AppConfig.java diff --git a/src/main/java/planetlotto/config/AppConfig.java b/src/main/java/planetlotto/config/AppConfig.java new file mode 100644 index 000000000..7fc1159bd --- /dev/null +++ b/src/main/java/planetlotto/config/AppConfig.java @@ -0,0 +1,86 @@ +package planetlotto.config; + +import planetlotto.controller.LottoController; +import planetlotto.controller.MainController; +import planetlotto.controller.UserController; +import planetlotto.generator.NumberGenerator; +import planetlotto.generator.RandomNumberGenerator; +import planetlotto.repository.UserLotto; +import planetlotto.service.LottoService; +import planetlotto.service.UserService; + +public class AppConfig { + + private static final AppConfig INSTANCE = new AppConfig(); + + // ===== Infra / Storage ===== + private UserLotto userLottoRepository; + + // ===== Services ===== + private UserService userService; + private LottoService lottoService; + + // ===== Controllers ===== + private MainController mainController; + private UserController userController; + private LottoController lottoController; + + private NumberGenerator numberGenerator = new RandomNumberGenerator(); + + private AppConfig() { + } + + public static AppConfig getInstance() { + return INSTANCE; + } + + public MainController mainController() { + if (mainController == null) { + mainController = new MainController( + userController(), + lottoController() + ); + } + return mainController; + } + + protected UserController userController() { + if (userController == null) { + userController = new UserController( + userService() + ); + } + return userController; + } + + protected LottoController lottoController() { + if (lottoController == null) { + lottoController = new LottoController( + lottoService() + ); + } + return lottoController; + } + + protected UserService userService() { + if (userService == null) { + userService = new UserService(numberGenerator, repository()); + } + return userService; + } + + protected LottoService lottoService() { + if (lottoService == null) { + lottoService = new LottoService(numberGenerator, repository()); + } + return lottoService; + } + + protected UserLotto repository() { + if (userLottoRepository == null) { + userLottoRepository = new UserLotto(); + } + return userLottoRepository; + } + +} From 8fa48c40cc76bbffd7a14737825bba645b22f348 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 16:36:46 +0900 Subject: [PATCH 08/15] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20Lotto=20=EC=A0=80=EC=9E=A5=EC=86=8C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../planetlotto/repository/UserLotto.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/planetlotto/repository/UserLotto.java diff --git a/src/main/java/planetlotto/repository/UserLotto.java b/src/main/java/planetlotto/repository/UserLotto.java new file mode 100644 index 000000000..69ef6800e --- /dev/null +++ b/src/main/java/planetlotto/repository/UserLotto.java @@ -0,0 +1,30 @@ +package planetlotto.repository; + +import java.util.ArrayList; +import java.util.List; +import planetlotto.domain.Lotto; + +public class UserLotto { + + private List userLottos = new ArrayList<>(); + + public void save(Lotto userLotto){ + userLottos.add(userLotto); + } + + public List> getUserLottoResult(){ + + List> results = new ArrayList<>(); + + for(Lotto lotto : userLottos){ + List numbers = lotto.getNumbers(); + results.add(numbers); + } + + return results; + } + + public List getUserLottos(){ + return userLottos; + } +} From dc2c3eb70eda6e5679c6db37600f9661631cc16c Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 16:37:18 +0900 Subject: [PATCH 09/15] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사용자 로또 구입 기능 구현 분리 --- .../controller/UserController.java | 43 +++++++++++++++ .../java/planetlotto/service/UserService.java | 52 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 src/main/java/planetlotto/controller/UserController.java create mode 100644 src/main/java/planetlotto/service/UserService.java diff --git a/src/main/java/planetlotto/controller/UserController.java b/src/main/java/planetlotto/controller/UserController.java new file mode 100644 index 000000000..4b97ae91b --- /dev/null +++ b/src/main/java/planetlotto/controller/UserController.java @@ -0,0 +1,43 @@ +package planetlotto.controller; + +import java.util.List; +import planetlotto.service.UserService; +import planetlotto.view.InputView; +import planetlotto.view.OutputView; + +public class UserController { + + private final UserService userService; + + public UserController(UserService userService) { + this.userService = userService; + } + + public void run() { + runPurchaseLottoStep(); + + } + + private void runPurchaseLottoStep() { + while (true) { + try { + purchaseLotto(); + return; + } catch (IllegalArgumentException e) { + handleError(e); + } + } + } + + private void purchaseLotto() { + int amount = InputView.askAmount(); + userService.purchaseLotto(amount); + + List> results = userService.getUserLottos(); + OutputView.printPurchasedLottos(results); + } + + private void handleError(IllegalArgumentException e) { + OutputView.printErrorMessage(e.getMessage()); + } +} diff --git a/src/main/java/planetlotto/service/UserService.java b/src/main/java/planetlotto/service/UserService.java new file mode 100644 index 000000000..a2c0510a1 --- /dev/null +++ b/src/main/java/planetlotto/service/UserService.java @@ -0,0 +1,52 @@ +package planetlotto.service; + +import java.util.List; +import planetlotto.domain.Lotto; +import planetlotto.generator.NumberGenerator; +import planetlotto.repository.UserLotto; + +public class UserService { + + private static final int PURCHASE_AMOUNT = 500; + + private final NumberGenerator numberGenerator; + private final UserLotto userLotto; + + public UserService(NumberGenerator numberGenerator, UserLotto userLotto) { + this.numberGenerator = numberGenerator; + this.userLotto = userLotto; + } + + public void purchaseLotto(int money) { + int count = getPurchaseCount(money); + + for (int i = 0; i < count; i++) { + List numbers = numberGenerator.generate(); + userLotto.save(createLotto(numbers)); + + } + + } + + + public List> getUserLottos(){ + return userLotto.getUserLottoResult(); + } + + private Lotto createLotto(List numbers) { + Lotto lotto = new Lotto(); + for (int number : numbers) { + lotto.addNumber(number); + } + return lotto; + } + + public int getPurchaseCount(int money){ + if (money % PURCHASE_AMOUNT != 0) { + throw new IllegalArgumentException("로또 1장의 가격은 500원입니다."); + } + + return money / PURCHASE_AMOUNT; + } + +} From e265dc5dd3b2d00f72ed64a702e84113c0bf3a7e Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 16:39:15 +0900 Subject: [PATCH 10/15] =?UTF-8?q?refactor:=20=EB=A1=9C=EB=98=90=20?= =?UTF-8?q?=EB=8B=B9=EC=B2=A8=20=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사용자 기능을 모두 제거 - WinningLotto 생성과 결과 반환만 유지 --- .../controller/LottoController.java | 35 ++----------- .../planetlotto/service/LottoService.java | 51 +++---------------- 2 files changed, 12 insertions(+), 74 deletions(-) diff --git a/src/main/java/planetlotto/controller/LottoController.java b/src/main/java/planetlotto/controller/LottoController.java index 0de976315..c5e7f5b4f 100644 --- a/src/main/java/planetlotto/controller/LottoController.java +++ b/src/main/java/planetlotto/controller/LottoController.java @@ -3,7 +3,6 @@ import java.util.List; import java.util.Map; -import planetlotto.domain.Lotto; import planetlotto.domain.WinningLotto; import planetlotto.service.LottoService; import planetlotto.view.InputView; @@ -18,37 +17,13 @@ public LottoController(LottoService lottoService) { } public void run() { - List userLottos = runPurchaseLottoStep(); WinningLotto winningLotto = runSetWinningLottoStep(); runSetBonusNumberStep(winningLotto); - runPrintResultStep(userLottos, winningLotto); + runPrintResultStep(winningLotto); } - - - private List runPurchaseLottoStep() { - while (true) { - try { - return purchaseLotto(); - } catch (IllegalArgumentException e) { - handleError(e); - } - } - } - - private List purchaseLotto() { - int amount = InputView.askAmount(); - List lottos = lottoService.purchaseLotto(amount); - - List> results = lottoService.convertLotto(lottos); - OutputView.printPurchasedLottos(results); - - return lottos; - } - - private WinningLotto runSetWinningLottoStep(){ while (true) { try { @@ -85,10 +60,10 @@ private void setBonusNumber(WinningLotto winningLotto) { } - private void runPrintResultStep(List userLottos, WinningLotto winningLotto) { + private void runPrintResultStep(WinningLotto winningLotto) { while (true) { try { - getResult(userLottos, winningLotto); + getResult(winningLotto); return; } catch (IllegalArgumentException e) { handleError(e); @@ -96,9 +71,9 @@ private void runPrintResultStep(List userLottos, WinningLotto winningLott } } - private void getResult(List userLottos, WinningLotto winningLotto) { + private void getResult(WinningLotto winningLotto) { - Map userResult = lottoService.getUserResult(userLottos, winningLotto); + Map userResult = lottoService.getUserResult(winningLotto); OutputView.printResult(userResult); } diff --git a/src/main/java/planetlotto/service/LottoService.java b/src/main/java/planetlotto/service/LottoService.java index 238494195..cd9712a93 100644 --- a/src/main/java/planetlotto/service/LottoService.java +++ b/src/main/java/planetlotto/service/LottoService.java @@ -1,6 +1,5 @@ package planetlotto.service; -import java.util.ArrayList; import java.util.EnumMap; import java.util.HashMap; import java.util.List; @@ -9,54 +8,16 @@ import planetlotto.domain.Lotto; import planetlotto.domain.Rank; import planetlotto.domain.WinningLotto; -import planetlotto.generator.NumberGenerator; +import planetlotto.repository.UserLotto; public class LottoService { - private static final int PURCHASE_AMOUNT = 500; + private final UserLotto userLottoRepository; - private final NumberGenerator numberGenerator; - - public LottoService(NumberGenerator numberGenerator) { - this.numberGenerator = numberGenerator; - } - - public List purchaseLotto(int money) { - - int count = money / PURCHASE_AMOUNT; - - if (money % PURCHASE_AMOUNT != 0) { - throw new IllegalArgumentException("로또 1장의 가격은 500원입니다."); - } - - List lottos = new ArrayList<>(); - - for (int i = 0; i < count; i++) { - List numbers = numberGenerator.generate(); - // Lotto lotto = new Lotto(numbers); - Lotto lotto = new Lotto(); - for (int number : numbers) { - lotto.addNumber(number); - } - lottos.add(lotto); - } - - return lottos; + public LottoService(UserLotto userLotto) { + this.userLottoRepository = userLotto; } - public List> convertLotto(List lottos){ - - List> results = new ArrayList<>(); - - for(Lotto lotto : lottos){ - List numbers = lotto.getNumbers(); - results.add(numbers); - } - - return results; - } - - public WinningLotto setWinningLotto(List numbers) { return new WinningLotto(numbers); } @@ -65,7 +26,9 @@ public void setBonusNumber(WinningLotto winningLotto, int bonusNumber) { winningLotto.setBonusNumber(bonusNumber); } - public Map getUserResult(List userLottos, WinningLotto winningLotto){ + public Map getUserResult(WinningLotto winningLotto){ + + List userLottos = userLottoRepository.getUserLottos(); Map count = new EnumMap<>(Rank.class); From 813cb84b817ce629e3f6ece7cc4a9215a61f3c14 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 16:40:00 +0900 Subject: [PATCH 11/15] =?UTF-8?q?refactor:=20=EB=A9=94=EC=9D=B8=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EB=8F=84=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사용자와 로또 서비스 분리에 따른 통합 컨트롤러 도입 --- src/main/java/planetlotto/Application.java | 13 +++------- .../controller/MainController.java | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 src/main/java/planetlotto/controller/MainController.java diff --git a/src/main/java/planetlotto/Application.java b/src/main/java/planetlotto/Application.java index 7658069ae..d2cedb9d0 100644 --- a/src/main/java/planetlotto/Application.java +++ b/src/main/java/planetlotto/Application.java @@ -1,16 +1,11 @@ package planetlotto; -import planetlotto.controller.LottoController; -import planetlotto.generator.NumberGenerator; -import planetlotto.generator.RandomNumberGenerator; -import planetlotto.service.LottoService; +import planetlotto.config.AppConfig; + public class Application { public static void main(String[] args) { - NumberGenerator numberGenerator = new RandomNumberGenerator(); - LottoService lottoService = new LottoService(numberGenerator); - - LottoController lottoController = new LottoController(lottoService); - lottoController.run(); + AppConfig.getInstance() + .mainController(); } } diff --git a/src/main/java/planetlotto/controller/MainController.java b/src/main/java/planetlotto/controller/MainController.java new file mode 100644 index 000000000..23fdc279b --- /dev/null +++ b/src/main/java/planetlotto/controller/MainController.java @@ -0,0 +1,25 @@ +package planetlotto.controller; + +public class MainController { + + private boolean running = true; + + public MainController( + UserController userController, + LottoController lottoController + ) { + userController.run(); + lottoController.run(); + } + + public void run() { + while (running) { + try { + + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + } + } + +} \ No newline at end of file From 6f8b61fddb0b0db498c14ea9595df22c863ed8d0 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 16:40:20 +0900 Subject: [PATCH 12/15] =?UTF-8?q?fix:=20LottoService=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/planetlotto/config/AppConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/planetlotto/config/AppConfig.java b/src/main/java/planetlotto/config/AppConfig.java index 7fc1159bd..c3a760ffe 100644 --- a/src/main/java/planetlotto/config/AppConfig.java +++ b/src/main/java/planetlotto/config/AppConfig.java @@ -71,7 +71,7 @@ protected UserService userService() { protected LottoService lottoService() { if (lottoService == null) { - lottoService = new LottoService(numberGenerator, repository()); + lottoService = new LottoService(repository()); } return lottoService; } From 16f05b07f40fffab3573d17fb16d57106a32240f Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 16:42:11 +0900 Subject: [PATCH 13/15] =?UTF-8?q?refactor:=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EB=A7=A4=ED=95=91=20=ED=95=A8=EC=88=98=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/planetlotto/service/LottoService.java | 4 ++++ src/main/java/planetlotto/service/UserService.java | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/planetlotto/service/LottoService.java b/src/main/java/planetlotto/service/LottoService.java index cd9712a93..cca2dde67 100644 --- a/src/main/java/planetlotto/service/LottoService.java +++ b/src/main/java/planetlotto/service/LottoService.java @@ -37,6 +37,10 @@ public Map getUserResult(WinningLotto winningLotto){ count.put(match, count.getOrDefault(match, 0) + 1); } + return convertResult(count); + } + + private static Map convertResult(Map count) { Map result = new HashMap<>(); for (Entry entry : count.entrySet()) { diff --git a/src/main/java/planetlotto/service/UserService.java b/src/main/java/planetlotto/service/UserService.java index a2c0510a1..94e20c2d1 100644 --- a/src/main/java/planetlotto/service/UserService.java +++ b/src/main/java/planetlotto/service/UserService.java @@ -28,7 +28,6 @@ public void purchaseLotto(int money) { } - public List> getUserLottos(){ return userLotto.getUserLottoResult(); } From 71367c7dacf81f465f4f2aaa3fbe8fe8bcc04a21 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 16:47:14 +0900 Subject: [PATCH 14/15] =?UTF-8?q?feat:=20=EB=A1=9C=EB=98=90=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=A7=81=EC=A0=91=20=EC=A7=80=EC=A0=95=20=EC=A0=84?= =?UTF-8?q?=EB=9E=B5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generator/FixedNumberGenerator.java | 14 ++++++++++++++ src/main/java/planetlotto/view/InputView.java | 15 ++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/main/java/planetlotto/generator/FixedNumberGenerator.java diff --git a/src/main/java/planetlotto/generator/FixedNumberGenerator.java b/src/main/java/planetlotto/generator/FixedNumberGenerator.java new file mode 100644 index 000000000..b13a4684d --- /dev/null +++ b/src/main/java/planetlotto/generator/FixedNumberGenerator.java @@ -0,0 +1,14 @@ +package planetlotto.generator; + +import java.util.List; +import planetlotto.view.InputView; + +public class FixedNumberGenerator implements NumberGenerator { + + @Override + public List generate() { + + return InputView.askUserLotto(); + } + +} diff --git a/src/main/java/planetlotto/view/InputView.java b/src/main/java/planetlotto/view/InputView.java index c1eb55343..85a08bc1e 100644 --- a/src/main/java/planetlotto/view/InputView.java +++ b/src/main/java/planetlotto/view/InputView.java @@ -5,7 +5,6 @@ import java.util.Arrays; import java.util.List; import java.util.function.Predicate; -import java.util.stream.Collectors; public class InputView { public static int askAmount() { @@ -39,4 +38,18 @@ public static int askBonusNumber() { throw new IllegalArgumentException("보너스 번호는 숫자여야 합니다."); } } + + public static List askUserLotto() { + System.out.println("번호를 입력해 주세요."); + try { + return Arrays.stream(Console.readLine() + .split(",")) + .map(String::trim) + .filter(Predicate.not(String::isBlank)) + .map(Integer::parseInt) + .toList(); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("당첨 번호는 숫자여야 합니다."); + } + } } From a4bc783de1e36cdc304d62c4cc9cdbdf4f3f4e91 Mon Sep 17 00:00:00 2001 From: bmh7190 Date: Sat, 10 Jan 2026 16:53:17 +0900 Subject: [PATCH 15/15] =?UTF-8?q?feat:=20=EB=8B=B9=EC=B2=A8=20=EB=A1=9C?= =?UTF-8?q?=EB=98=90=20=EB=9E=9C=EB=8D=A4=20=EC=83=9D=EC=84=B1=20=EB=A1=9C?= =?UTF-8?q?=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 --- .../java/planetlotto/config/AppConfig.java | 2 +- .../generator/RandomNumberGenerator.java | 2 -- .../planetlotto/service/LottoService.java | 19 +++++++++++++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/planetlotto/config/AppConfig.java b/src/main/java/planetlotto/config/AppConfig.java index c3a760ffe..7fc1159bd 100644 --- a/src/main/java/planetlotto/config/AppConfig.java +++ b/src/main/java/planetlotto/config/AppConfig.java @@ -71,7 +71,7 @@ protected UserService userService() { protected LottoService lottoService() { if (lottoService == null) { - lottoService = new LottoService(repository()); + lottoService = new LottoService(numberGenerator, repository()); } return lottoService; } diff --git a/src/main/java/planetlotto/generator/RandomNumberGenerator.java b/src/main/java/planetlotto/generator/RandomNumberGenerator.java index d7be7ee39..ca30cfc36 100644 --- a/src/main/java/planetlotto/generator/RandomNumberGenerator.java +++ b/src/main/java/planetlotto/generator/RandomNumberGenerator.java @@ -2,8 +2,6 @@ import static camp.nextstep.edu.missionutils.Randoms.*; -import java.util.Collections; -import java.util.Comparator; import java.util.List; public class RandomNumberGenerator implements NumberGenerator { diff --git a/src/main/java/planetlotto/service/LottoService.java b/src/main/java/planetlotto/service/LottoService.java index cca2dde67..56ebb8a6e 100644 --- a/src/main/java/planetlotto/service/LottoService.java +++ b/src/main/java/planetlotto/service/LottoService.java @@ -8,20 +8,35 @@ import planetlotto.domain.Lotto; import planetlotto.domain.Rank; import planetlotto.domain.WinningLotto; +import planetlotto.generator.NumberGenerator; import planetlotto.repository.UserLotto; +import static camp.nextstep.edu.missionutils.Randoms.*; + public class LottoService { private final UserLotto userLottoRepository; - - public LottoService(UserLotto userLotto) { + private final NumberGenerator numberGenerator; + public LottoService(NumberGenerator numberGenerator, UserLotto userLotto) { this.userLottoRepository = userLotto; + this.numberGenerator = numberGenerator; } public WinningLotto setWinningLotto(List numbers) { return new WinningLotto(numbers); } + // 새로운 전략 + public void randomCreateLotto(){ + List numbers = numberGenerator.generate(); + setWinningLotto(numbers); + } + + public void randomBonusLotto(WinningLotto winningLotto){ + int bonus = pickNumberInRange(1, 30); + setBonusNumber(winningLotto, bonus); + } + public void setBonusNumber(WinningLotto winningLotto, int bonusNumber) { winningLotto.setBonusNumber(bonusNumber); }