Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 43 additions & 29 deletions src/main/java/lotto2/controller/LottoController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import lotto2.model.*;
import lotto2.model.enums.LottoPrize;
import lotto2.model.enums.WinningRank;
import lotto2.model.generator.LottoGeneratorFromWinningNumbers;
import lotto2.model.generator.LottoGeneratorFromUserInput;
import lotto2.model.generator.LottoGeneratorRandom;
import lotto2.view.InputView;
import lotto2.view.OutputView;
Expand All @@ -20,59 +20,73 @@ public LottoController(InputView inputView, OutputView outputView) {
}

public void run() {
final MoneyToBuy money = acceptInputMoney();
final List<Lotto> lottoBucket = generateManyLotto(money);
final Lotto winningNumbers = acceptWinningNumbers();
final LottoNumber bonusNumber = acceptBonusNumber();
final Map<WinningRank, Integer> result = calculateLotto(lottoBucket, winningNumbers, bonusNumber);
final MoneyToBuy moneyToBuy = acceptInputMoney();
final ManualLottoCount manualLottoCount = acceptManualCount(moneyToBuy);
final List<Lotto> lottoBucket = acceptManyManualLotto(manualLottoCount);
final int automaticLottoCount = getAutomaticLottoCount(moneyToBuy, manualLottoCount);
generateManyAutomaticLotto(automaticLottoCount, lottoBucket);
displayAllLotto(manualLottoCount, automaticLottoCount, lottoBucket);
final WinningLotto winningLotto = acceptWinningNumbers();
acceptBonusNumber(winningLotto);
final Map<WinningRank, Integer> result = calculateLotto(lottoBucket, winningLotto);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ด์ „ PR์— ์ฝ”๋ฉ˜ํŠธ ๋‚จ๊ฒจ์ฃผ์‹  ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋‹ต๋ณ€ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. :)

๊ทธ๋Ÿฐ๋ฐ WinningRank Enum ์—์„œ LottoPrize Enum ์— ์žˆ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š”๊ฒŒ
์–ด๋–ค๊ฑด์ง€ ์ž˜ ๊ฐ์ด ์•ˆ ์˜ต๋‹ˆ๋‹ค.
์กฐ๊ธˆ ๋” ํžŒํŠธ๋ฅผ ์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”???

ํ˜„์žฌ calculateLotto์—์„œ ๋“ฑ์ˆ˜ ๊ณ„์‚ฐ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด WinningRank๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, WinningRank ๋Œ€์‹  LottoPrize๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™์•„์š”. WinningRank๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์— LottoPrize๊ฐ€ ๋“ค์–ด๊ฐ€๋„ ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :)

WinningRank์—๋Š” ๋“ฑ์ˆ˜์™€ ๋งค์น˜๋˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”. 1. calculateLotto์—์„œ ์ด ๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 2. ์ด ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„, LottoPrize์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ๋“ฑ์ˆ˜์™€ ๋งค์น˜๋˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ, LottoPrize์— ์žˆ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, WinningRank ๋Œ€์‹  LottoPrize์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ , WinningRank ํด๋ž˜์Šค๋Š” ์‚ญ์ œํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


์ฝ”๋“œ์— ๋Œ€ํ•œ ์ฝ”๋ฉ˜ํŠธ์™€ ๋ณ„๊ฐœ๋กœ enum ์˜ ํ™œ์šฉ๋ฒ•์€ ๋‚˜์ค‘์— ์‹œ๊ฐ„์ด ๋˜์‹ค ๋•Œ ํ•™์Šตํ•ด๋ณด์‹œ๋ฉด ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

enum์„ ์ฃผ๋กœ ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, enum์— ์ •์˜๋œ ๊ฐ’์€ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์ด๋ฏ€๋กœ, ์ด ์ ์„ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ธˆ ๋” ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. enum ์œผ๋กœ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด ๊ตฌํ˜„ํ•˜๊ธฐ, enum ์œผ๋กœ ์ „๋žต ํŒจํ„ด ๊ตฌํ˜„ํ•˜๊ธฐ ๋“ฑ์˜ ํ‚ค์›Œ๋“œ๋กœ ํ•™์Šตํ•ด๋ณด์‹œ๋ฉด ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :)

final List<WinningRankCountDto> winningRankCounts = winningRankCountsAsArray(result);
displayStatistics(winningRankCounts);
final double profitRatio = calculateProfitRatio(money, winningRankCounts);
final double profitRatio = calculateProfitRatio(moneyToBuy, winningRankCounts);
displayProfitRatio(profitRatio);
}

private MoneyToBuy acceptInputMoney() {
final MoneyToBuy money = inputView.inputMoney();
outputView.printNumberOfBoughtLotto(money);
return money;
return inputView.inputMoney();
}

private List<Lotto> generateManyLotto(MoneyToBuy money) {
final List<Lotto> lottoBucket = new ArrayList<>();
final Round round = new Round(money.getCount());
private ManualLottoCount acceptManualCount(MoneyToBuy moneyToBuy) {
return inputView.inputManualCount(moneyToBuy);
}

private List<Lotto> acceptManyManualLotto(ManualLottoCount lottoCount) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Many๋Š” ๋ช‡ ๊ฐœ๋ฅผ ์˜๋ฏธํ• ๊นŒ์š”? 0๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ด ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ์š”? :)
๋ณดํ†ต ๋ณต์ˆ˜๊ฐœ๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” s๋ฅผ ๋ถ™์—ฌ์„œ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, acceptManualLottos, generateAutomaticLottos, displayLottos์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

return inputView.inputManyManualLotto(lottoCount);
}

private int getAutomaticLottoCount(MoneyToBuy moneyToBuy, ManualLottoCount manualLottoCount) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ˆ˜๋™ ๊ตฌ๋งค ์ˆ˜๋Ÿ‰๋งŒํผ ์ œ์™ธํ•˜๊ณ  ์ž๋™ ๊ตฌ๋งค ์ˆ˜๋Ÿ‰์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ ์ž˜ ๊ตฌํ˜„ํ•ด์ฃผ์…จ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘
์ˆ˜๋™ ๊ตฌ๋งค ์ˆ˜๋Ÿ‰์€ ๊ฐ’ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ์‹œ๊ณ , ์ž๋™ ๊ตฌ๋งค ์ˆ˜๋Ÿ‰์€ int ํƒ€์ž…์œผ๋กœ ๊ด€๋ฆฌํ•˜์‹  ์ด์œ ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜๋„ค์š”!

return moneyToBuy.count() - manualLottoCount.count();
}

private List<Lotto> generateManyAutomaticLotto(int count, List<Lotto> lottoBucket) {
final Round round = new Round(count);
while (round.hasNext()) {
round.goNext();
lottoBucket.add(generateEachLotto());
}
outputView.printListOfLotto(lottoBucket);
return lottoBucket;
}

private Lotto generateEachLotto() {
return LottoGeneratorRandom.generate();
}

private Lotto acceptWinningNumbers() {
private void displayAllLotto(ManualLottoCount manualLottoCount, int automaticLottoCount, List<Lotto> lottoBucket) {
outputView.printListOfLotto(manualLottoCount, automaticLottoCount, lottoBucket);
}

private WinningLotto acceptWinningNumbers() {
final String input = inputView.inputWinningNumbers();
final LottoGeneratorFromWinningNumbers lottoGenerator = new LottoGeneratorFromWinningNumbers(input);
return lottoGenerator.generate();
final LottoGeneratorFromUserInput lottoGenerator = new LottoGeneratorFromUserInput(input);
return new WinningLotto(lottoGenerator.generate());
}

private LottoNumber acceptBonusNumber() {
return inputView.inputBonusNumber();
private WinningLotto acceptBonusNumber(WinningLotto winningLotto) {
final LottoNumber bonusNumber = inputView.inputBonusNumber();
winningLotto.setBonusNumber(bonusNumber);
return winningLotto;
}

private Map<WinningRank, Integer> calculateLotto(
List<Lotto> lottoBucket,
Lotto winningNumbers,
LottoNumber bonusNumber) {
private Map<WinningRank, Integer> calculateLotto(List<Lotto> lottoBucket, WinningLotto winningLotto) {
final LottoCalculationUtils lottoCalculationUtils = new LottoCalculationUtils();
Map<WinningRank, Integer> countForEachWinningRank = lottoCalculationUtils.initializeCountMap();
for (Lotto eachLotto : lottoBucket) {
final int matchCount = lottoCalculationUtils.getMatchCount(eachLotto, winningNumbers);
final WinningRank winningRank = lottoCalculationUtils.winningRankForMatchCount(
matchCount,
eachLotto.contains(bonusNumber));
final int matchCount = eachLotto.getMatchCount(winningLotto.getLotto());
final WinningRank winningRank = lottoCalculationUtils.winningRankForMatchCount(matchCount,
eachLotto.contains(winningLotto.getBonusNumber()));
countForEachWinningRank = lottoCalculationUtils.setCountForEachWinningRank(
countForEachWinningRank, winningRank);
}
Expand All @@ -93,12 +107,12 @@ private void displayStatistics(List<WinningRankCountDto> winningRankCounts) {
outputView.printStatistics(winningRankCounts);
}

private double calculateProfitRatio(MoneyToBuy money, List<WinningRankCountDto> winningRankCounts) {
private double calculateProfitRatio(MoneyToBuy moneyToBuy, List<WinningRankCountDto> winningRankCounts) {
int totalPrize = 0;
for (final WinningRankCountDto winningRankCount : winningRankCounts) {
totalPrize += winningRankCount.getLottoPrize().getPrize() * winningRankCount.getCount();
}
return (double) totalPrize / money.getValue();
return (double) totalPrize / moneyToBuy.value();
}

private void displayProfitRatio(double profitRatio) {
Expand Down
27 changes: 25 additions & 2 deletions src/main/java/lotto2/model/Lotto.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
package lotto2.model;

import java.util.List;
import lotto2.model.constant.LottoConstant;

import java.util.*;

public class Lotto {
private final List<LottoNumber> lottoNumbers;

public Lotto(List<LottoNumber> lottoNumbers) {
checkDuplicateNumberInList(lottoNumbers);
this.lottoNumbers = lottoNumbers;
}

private void checkDuplicateNumberInList(List<LottoNumber> winningLottoNumbers) throws IllegalArgumentException {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. IllegalArgumentException์€ RuntimeException์ด๋‹ˆ ๋ช…์‹œ์ ์ธ throws ๊ตฌ๋ฌธ์ด ์—†์–ด๋„ ๋  ๊ฒƒ ๊ฐ™์•„์š”.
  2. ์šฐ์Šน ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•  ๋•Œ๋„ Lotto๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ตฌ๋งคํ•œ ๋กœ๋˜๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ๋„ Lotto๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ๊ทธ๋Ÿผ winningLottoNumbers๋ณด๋‹ค๋Š” lottoNumbers๊ฐ€ ์กฐ๊ธˆ ๋” ์ž˜ ์„ค๋ช…ํ•ด์ฃผ๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„์ผ ๊ฒƒ ๊ฐ™๋„ค์š”! ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋„ ๋‹น์ฒจ ๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹Œ ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ ์ ˆํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :)

final Set<LottoNumber> duplicateCheck = new HashSet<>(winningLottoNumbers);
if (duplicateCheck.size() != LottoConstant.COUNT_OF_NUMBER_IN_LOTTO) {
throw new IllegalArgumentException("์ตœ์ข…์ ์œผ๋กœ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋Š” ๋ฐ˜๋“œ์‹œ 6 ๊ฐœ๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
}
}

public boolean contains(LottoNumber lottoNumber) {
return lottoNumbers.contains(lottoNumber);
}
Expand All @@ -17,8 +27,21 @@ public List<LottoNumber> lottoNumbers() {
return lottoNumbers;
}

public int getMatchCount(Lotto other) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋กœ๋˜๊ฐ€ ์Šค์Šค๋กœ ๋‹ค๋ฅธ ๋กœ๋˜์™€ ์ผ์น˜ํ•˜๋Š” ๋ฒˆํ˜ธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•  ์ˆ˜ ์žˆ์–ด์„œ, ๋Šฅ๋™์ ์ธ ๊ฐ์ฒด ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋„ค์š”!

final List<LottoNumber> otherNumbers = other.lottoNumbers();
int matchCount = 0;
for (LottoNumber lottoNumber : otherNumbers) {
if (lottoNumbers.contains(lottoNumber)) {
++matchCount;
}
}
return matchCount;
}

@Override
public String toString() {
return lottoNumbers.toString();
final List<LottoNumber> listToPrint = new ArrayList<>(lottoNumbers);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋กœ๋˜์˜ ์ž…์ถœ๋ ฅ์„ ์ฝ˜์†”์—์„œ ์›น์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?
ํ˜„์žฌ๋Š” ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๊ณ  ์žˆ๊ธฐ์— toString์—์„œ ๊ตฌํ˜„ํ•ด๋„ ๊ดœ์ฐฎ์ง€๋งŒ, ์›น์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค๋ฉด ์ •๋ ฌํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์€ ํ™”๋ฉด์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”. ์•„๋‹ˆ๋ฉด ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ(e.g., dto ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ, ๋˜๋Š” getSortedLottoNumbers์™€ ๊ฐ™์€ ๋ช…์‹œ์ ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋  ๋•Œ) ์ •๋ ฌ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”.

์ œ ์ƒ๊ฐ์—๋Š” toString์— ํ™”๋ฉด ์ถœ๋ ฅ์„ ์œ„ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด, ๋„๋ฉ”์ธ์ด ํ™”๋ฉด์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์•Œ๊ฒŒ ๋˜๋ฏ€๋กœ ui์— ์˜์กด์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :) ์ด ๋กœ์ง์„ ๊ทธ๋Œ€๋กœ OutputView์—์„œ ๊ตฌํ˜„ํ•ด๋ณด์…”๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.

Collections.sort(listToPrint, Comparator.comparingInt(LottoNumber::value));
return listToPrint.toString();
}
}
15 changes: 3 additions & 12 deletions src/main/java/lotto2/model/LottoCalculationUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import lotto2.model.enums.WinningRank;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class LottoCalculationUtils {
Expand All @@ -17,17 +16,6 @@ public Map<WinningRank, Integer> initializeCountMap() {
return countForEachWinningRank;
}

public int getMatchCount(Lotto eachLotto, Lotto winningNumbers) {
final List<LottoNumber> lottoWinningNumbers = winningNumbers.lottoNumbers();
int matchCount = 0;
for (LottoNumber currentWinningNumber : lottoWinningNumbers) {
if (eachLotto.contains(currentWinningNumber)) {
++matchCount;
}
}
return matchCount;
}

public WinningRank winningRankForMatchCount(int matchCount, boolean containsBonusNumber) {
if (matchCount == 3) {
return WinningRank.FIFTH;
Expand All @@ -51,6 +39,9 @@ public Map<WinningRank, Integer> setCountForEachWinningRank(
Map<WinningRank, Integer> countMap,
WinningRank winningRank) {
final Map<WinningRank, Integer> countForEachWinningRank = new HashMap<>(countMap);
if (winningRank == WinningRank.NONE) {
return countMap;
}
final int count = countForEachWinningRank.get(winningRank);
countForEachWinningRank.put(winningRank, count + 1);
return countForEachWinningRank;
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/lotto2/model/LottoNumber.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ private boolean lottoNumberOutOfRange(int tokenValue) {
return tokenValue < LottoConstant.LOTTO_MINIMUM_NUMBER || LottoConstant.LOTTO_MAXIMUM_NUMBER < tokenValue;
}

public int value() {
return value;
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/lotto2/model/ManualLottoCount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package lotto2.model;

public class ManualLottoCount {
private final int count;

public ManualLottoCount(String input, MoneyToBuy moneyToBuy) {
this.count = parseInt(input, moneyToBuy);
}

private int parseInt(String input, MoneyToBuy moneyToBuy) {
int count;
try {
count = Integer.parseInt(input);
} catch (Exception e) {
throw new NumberFormatException("์ˆ˜๋™์œผ๋กœ ๊ตฌ๋งคํ•  ๋กœ๋˜๋Š” ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
}
if (isNegative(count)) {
throw new IllegalArgumentException("์ˆ˜๋™์œผ๋กœ ๊ตฌ๋งคํ•  ๋กœ๋˜๋Š” ๋ฐ˜๋“œ์‹œ 0 ์ด์ƒ์˜ ์ •์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
}
if (isMoreThanTotalCount(moneyToBuy, count)) {
throw new IllegalArgumentException("์ˆ˜๋™์œผ๋กœ ๊ตฌ๋งคํ•  ๋กœ๋˜๋Š” ์ž…๋ ฅํ•œ ๊ธˆ์•ก์œผ๋กœ ๊ตฌ์ž… ๊ฐ€๋Šฅํ•œ ์ด ๊ฐœ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
}
return count;
}

private boolean isNegative(int count) {
return count < 0;
}

private boolean isMoreThanTotalCount(MoneyToBuy moneyToBuy, int count) {
return moneyToBuy.count() < count;
}

public int count() {
return count;
}
}
4 changes: 2 additions & 2 deletions src/main/java/lotto2/model/MoneyToBuy.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ private boolean divisibleWithoutRemainder(int inputMoney) {
return inputMoney % PRICE_OF_SINGLE_LOTTO_TICKET == 0;
}

public int getValue() {
public int value() {
return value;
}

public int getCount() {
public int count() {
return count;
}
}
22 changes: 22 additions & 0 deletions src/main/java/lotto2/model/WinningLotto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package lotto2.model;

public class WinningLotto {
private final Lotto lotto;
private LottoNumber bonusNumber;

public WinningLotto(Lotto lotto) {
this.lotto = lotto;
}

public Lotto getLotto() {
return lotto;
}

public LottoNumber getBonusNumber() {
return bonusNumber;
}

public void setBonusNumber(LottoNumber bonusNumber) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WinningLotto ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— bonusNumber๋„ ์ธ์ž๋กœ ์ „๋‹ฌ ๋ฐ›์œผ๋ฉด ์–ด๋–จ๊นŒ์š”?
๊ทธ๋Ÿผ WinningLotto๋ฅผ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , bonusNumber๋Š” lotto์— ์žˆ๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค(๋‹น์ฒจ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†์œผ๋‹ˆ๊นŒ์š”)๋Š” ๋ฐธ๋ฆฌ๋ฐ์ด์…˜๋„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ์„ฑ์ž๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํ•„์š”ํ•œ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”!

๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๊ฐ€ ๋‹น์ฒจ๋ฒˆํ˜ธ์™€ ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค๋Š” ๋ฐธ๋ฆฌ๋ฐ์ด์…˜๋„ ์ถ”๊ฐ€ํ•ด๋ณด์‹œ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. :)

this.bonusNumber = bonusNumber;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,14 @@
import lotto2.model.LottoNumber;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class LottoGeneratorFromWinningNumbers {
public class LottoGeneratorFromUserInput {
private final String input;

private static final String LOTTO_NUMBERS_STRING_DELIMITER_REGEX = ",";

public LottoGeneratorFromWinningNumbers(String input) {
public LottoGeneratorFromUserInput(String input) {
this.input = input;
}

Expand All @@ -25,7 +23,6 @@ public Lotto generate() {
throw new IllegalArgumentException("๋‹น์ฒจ ๋ฒˆํ˜ธ๋Š” ๋ฐ˜๋“œ์‹œ 6 ๊ฐœ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
}
final List<LottoNumber> winningLottoNumbers = toLottoNumbers(tokens);
checkDuplicateNumberInList(winningLottoNumbers);
return new Lotto(winningLottoNumbers);
}

Expand Down Expand Up @@ -60,11 +57,4 @@ private List<LottoNumber> toLottoNumbers(String[] tokens) {
}
return lottoNumbersData;
}

private void checkDuplicateNumberInList(List<LottoNumber> winningLottoNumbers) throws IllegalArgumentException {
final Set<LottoNumber> duplicateCheck = new HashSet<>(winningLottoNumbers);
if (duplicateCheck.size() != LottoConstant.COUNT_OF_NUMBER_IN_LOTTO) {
throw new IllegalArgumentException("์ตœ์ข…์ ์œผ๋กœ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋Š” ๋ฐ˜๋“œ์‹œ 6 ๊ฐœ๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
}
}
}
27 changes: 26 additions & 1 deletion src/main/java/lotto2/view/InputView.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package lotto2.view;

import lotto2.controller.Round;
import lotto2.model.*;
import lotto2.model.generator.LottoGeneratorFromUserInput;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class InputView {
Expand All @@ -12,8 +16,29 @@ public MoneyToBuy inputMoney() {
return new MoneyToBuy(input);
}

public ManualLottoCount inputManualCount(MoneyToBuy moneyToBuy) {
System.out.print("\n์ˆ˜๋™์œผ๋กœ ๊ตฌ๋งคํ•  ๋กœ๋˜ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.\n");
final Scanner scanner = new Scanner(System.in);
final String input = scanner.nextLine();
return new ManualLottoCount(input, moneyToBuy);
}

public List<Lotto> inputManyManualLotto(ManualLottoCount lottoCount) {
System.out.print("\n์ˆ˜๋™์œผ๋กœ ๊ตฌ๋งคํ•  ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.\n");
final List<Lotto> lottoBucket = new ArrayList<>();
final Round round = new Round(lottoCount.count());
while (round.hasNext()) {
round.goNext();
final Scanner scanner = new Scanner(System.in);
final String input = scanner.nextLine();
final LottoGeneratorFromUserInput lottoGenerator = new LottoGeneratorFromUserInput(input);
lottoBucket.add(lottoGenerator.generate());
}
return lottoBucket;
}

public String inputWinningNumbers() {
System.out.print("์ง€๋‚œ ์ฃผ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.\n");
System.out.print("\n์ง€๋‚œ ์ฃผ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.\n");
final Scanner scanner = new Scanner(System.in);
return scanner.nextLine();
}
Expand Down
8 changes: 2 additions & 6 deletions src/main/java/lotto2/view/OutputView.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,11 @@
public class OutputView {
private static final DecimalFormat decimalFormat = new DecimalFormat("0.00");

public void printNumberOfBoughtLotto(MoneyToBuy money) {
System.out.printf("%d๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค.\n", money.getCount());
}

public void printListOfLotto(List<Lotto> lottoBucket) {
public void printListOfLotto(ManualLottoCount manualLottoCount, int automaticLottoCount, List<Lotto> lottoBucket) {
System.out.printf("\n์ˆ˜๋™์œผ๋กœ %d์žฅ, ์ž๋™์œผ๋กœ %d๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค.\n", manualLottoCount.count(), automaticLottoCount);
for (Lotto lotto : lottoBucket) {
printEachLotto(lotto);
}
System.out.println();
}

private void printEachLotto(Lotto lotto) {
Expand Down