From 9f0f9760d3b1145a2db5d954396d2b3106c82bc7 Mon Sep 17 00:00:00 2001 From: eunii Date: Wed, 21 Jul 2021 20:08:27 +0900 Subject: [PATCH 1/4] =?UTF-8?q?refactor:=20lotts=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20&=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/LottoController.java | 7 ++++--- src/main/java/domain/Lotto.java | 2 -- src/main/java/domain/LottoMachine.java | 4 ++-- src/main/java/domain/Lottos.java | 16 ++++++++++++++++ src/main/java/view/OutputView.java | 7 ++++--- src/test/java/domain/LottoMachineTest.java | 19 ++++++++++--------- 6 files changed, 36 insertions(+), 19 deletions(-) create mode 100644 src/main/java/domain/Lottos.java diff --git a/src/main/java/controller/LottoController.java b/src/main/java/controller/LottoController.java index 37082b72..b5e292e9 100644 --- a/src/main/java/controller/LottoController.java +++ b/src/main/java/controller/LottoController.java @@ -2,6 +2,7 @@ import domain.Lotto; import domain.LottoMachine; +import domain.Lottos; import enums.Rank; import view.InputView; import view.OutputView; @@ -17,13 +18,13 @@ public class LottoController { public static void main(String[] args) { LottoMachine lottoMachine = new LottoMachine(inputView.inputMoney()); - List lottoTickets = lottoMachine.getLottoTickets(); - outputView.printLottoTickets(lottoTickets); + Lottos lottos= new Lottos(lottoMachine.getLottoTickets()); + outputView.printLottoTickets(lottos); List winningNumbers = lottoMachine.getWinningNumber(inputView.inputWinningNumbers()); int bonusNumber = lottoMachine.getBonusBall(inputView.inputBonusBall(), winningNumbers); - Map rankResult = lottoMachine.getRankResult(lottoTickets, winningNumbers, bonusNumber); + Map rankResult = lottoMachine.getRankResult(lottos, winningNumbers, bonusNumber); outputView.printRankResult(rankResult); outputView.printStatistics(lottoMachine.getProfitRate(rankResult)); } diff --git a/src/main/java/domain/Lotto.java b/src/main/java/domain/Lotto.java index 8b76c4f4..649d151c 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/domain/Lotto.java @@ -17,8 +17,6 @@ public List getLottoNumbers() { } public Rank getRank(List winningNumber, int bonusNumber) { - countOfMatches(winningNumber); - countOfBonusMatch(bonusNumber); return Rank.getRank(countOfMatches(winningNumber), countOfBonusMatch(bonusNumber)); } diff --git a/src/main/java/domain/LottoMachine.java b/src/main/java/domain/LottoMachine.java index 36849c53..23e09bd1 100644 --- a/src/main/java/domain/LottoMachine.java +++ b/src/main/java/domain/LottoMachine.java @@ -57,7 +57,7 @@ public List getLottoTickets() { return lottoTicket; } - public TreeMap getRankResult(List lottos, List winningNumber, int bonusNumber) { + public TreeMap getRankResult(Lottos lottos, List winningNumber, int bonusNumber) { TreeMap result = new TreeMap() {{ put(Rank.FIRST_PLACE, 0); @@ -68,7 +68,7 @@ public TreeMap getRankResult(List lottos, List winningNumber, in put(Rank.ETC, 0); }}; - for (Lotto lotto : lottos) { + for (Lotto lotto : lottos.getLottos()) { result.put(lotto.getRank(winningNumber, bonusNumber), result.get(lotto.getRank(winningNumber, bonusNumber)) + 1); } return result; diff --git a/src/main/java/domain/Lottos.java b/src/main/java/domain/Lottos.java new file mode 100644 index 00000000..35045b6d --- /dev/null +++ b/src/main/java/domain/Lottos.java @@ -0,0 +1,16 @@ +package domain; + +import java.util.List; + +public class Lottos { + + private final List lottos; + + public Lottos(List lottos) { + this.lottos = lottos; + } + + public List getLottos() { + return lottos; + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 402abdd1..a65a4ce0 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,15 +1,16 @@ package view; import domain.Lotto; +import domain.Lottos; import enums.Rank; import java.util.List; import java.util.Map; public class OutputView { - public void printLottoTickets(List lottoTickets) { - System.out.println(lottoTickets.size() + "개를 구매했습니다."); - for (Lotto lottoTicket : lottoTickets) { + public void printLottoTickets(Lottos lottos) { + System.out.println(lottos.getLottos().size() + "개를 구매했습니다."); + for (Lotto lottoTicket : lottos.getLottos()) { System.out.println(getLottoNumberString(lottoTicket.getLottoNumbers())); } } diff --git a/src/test/java/domain/LottoMachineTest.java b/src/test/java/domain/LottoMachineTest.java index b5db52ea..f04b1dd6 100644 --- a/src/test/java/domain/LottoMachineTest.java +++ b/src/test/java/domain/LottoMachineTest.java @@ -158,15 +158,15 @@ void getRankResult() { Lotto lotto = new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6)); lottoTicket.add(lotto); - + Lottos lottos = new Lottos(lottoTicket); //when - TreeMap rankResult = lottoMachine.getRankResult(lottoTicket, Arrays.asList(1, 2, 3, 4, 5, 6), 7); + TreeMap rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 6), 7); //then assertThat(rankResult.get(Rank.FIRST_PLACE)).isEqualTo(1); - assertThat(rankResult.get(Rank.SECOND_PLACE)).isEqualTo(0); - assertThat(rankResult.get(Rank.THIRD_PLACE)).isEqualTo(0); + assertThat(rankResult.get(Rank.SECOND_PLACE)).isZero(); + assertThat(rankResult.get(Rank.THIRD_PLACE)).isZero(); } @Test @@ -179,10 +179,11 @@ void getRankResult2() { Lotto lotto = new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6)); lottoTicket.add(lotto); + Lottos lottos = new Lottos(lottoTicket); //when - TreeMap rankResult = lottoMachine.getRankResult(lottoTicket, Arrays.asList(1, 2, 3, 4, 5, 7), 6); + TreeMap rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 7), 6); //then assertThat(rankResult.get(Rank.SECOND_PLACE)).isEqualTo(1); @@ -198,9 +199,9 @@ void getProfitRate() { Lotto lotto = new Lotto(Arrays.asList(1, 2, 3, 4, 5, 6)); lottoTicket.add(lotto); - + Lottos lottos = new Lottos(lottoTicket); //when - Map rankResult = lottoMachine.getRankResult(lottoTicket, Arrays.asList(1, 2, 3, 4, 5, 6), 7); + Map rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 6), 7); double profitRate = lottoMachine.getProfitRate(rankResult); //then @@ -222,9 +223,9 @@ void getProfitRate2() { lottoTicket.add(lotto2); lottoTicket.add(lotto2); lottoTicket.add(lotto2); - + Lottos lottos = new Lottos(lottoTicket); //when - Map rankResult = lottoMachine.getRankResult(lottoTicket, Arrays.asList(1, 2, 3, 11, 12, 13), 7); + Map rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 11, 12, 13), 7); double profitRate = lottoMachine.getProfitRate(rankResult); //then From fa19e9fd02179fbc184431155562249bbc8df478 Mon Sep 17 00:00:00 2001 From: eunii Date: Wed, 21 Jul 2021 20:23:21 +0900 Subject: [PATCH 2/4] =?UTF-8?q?refactor:=20LottoValication=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=B6=84=EB=A6=AC.=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../study}/controller/LottoController.java | 15 +- .../java/{ => com/study}/domain/Lotto.java | 4 +- .../java/com/study/domain/LottoMachine.java | 80 ++++++++++ .../com/study/domain/LottoValication.java | 67 +++++++++ .../java/{ => com/study}/domain/Lottos.java | 2 +- src/main/java/{ => com/study}/enums/Rank.java | 2 +- .../study}/utils/InputValidation.java | 2 +- .../java/{ => com/study}/view/InputView.java | 5 +- .../java/{ => com/study}/view/OutputView.java | 8 +- src/main/java/domain/LottoMachine.java | 138 ------------------ .../study}/domain/LottoMachineTest.java | 7 +- .../{ => com/study}/domain/LottoTest.java | 6 +- .../java/{ => com/study}/enums/RankTest.java | 3 +- 13 files changed, 176 insertions(+), 163 deletions(-) rename src/main/java/{ => com/study}/controller/LottoController.java (81%) rename src/main/java/{ => com/study}/domain/Lotto.java (93%) create mode 100644 src/main/java/com/study/domain/LottoMachine.java create mode 100644 src/main/java/com/study/domain/LottoValication.java rename src/main/java/{ => com/study}/domain/Lottos.java (89%) rename src/main/java/{ => com/study}/enums/Rank.java (97%) rename src/main/java/{ => com/study}/utils/InputValidation.java (98%) rename src/main/java/{ => com/study}/view/InputView.java (92%) rename src/main/java/{ => com/study}/view/OutputView.java (92%) delete mode 100644 src/main/java/domain/LottoMachine.java rename src/test/java/{ => com/study}/domain/LottoMachineTest.java (98%) rename src/test/java/{ => com/study}/domain/LottoTest.java (92%) rename src/test/java/{ => com/study}/enums/RankTest.java (96%) diff --git a/src/main/java/controller/LottoController.java b/src/main/java/com/study/controller/LottoController.java similarity index 81% rename from src/main/java/controller/LottoController.java rename to src/main/java/com/study/controller/LottoController.java index b5e292e9..d29c3b64 100644 --- a/src/main/java/controller/LottoController.java +++ b/src/main/java/com/study/controller/LottoController.java @@ -1,11 +1,10 @@ -package controller; - -import domain.Lotto; -import domain.LottoMachine; -import domain.Lottos; -import enums.Rank; -import view.InputView; -import view.OutputView; +package com.study.controller; + +import com.study.domain.LottoMachine; +import com.study.domain.Lottos; +import com.study.enums.Rank; +import com.study.view.InputView; +import com.study.view.OutputView; import java.util.List; import java.util.Map; diff --git a/src/main/java/domain/Lotto.java b/src/main/java/com/study/domain/Lotto.java similarity index 93% rename from src/main/java/domain/Lotto.java rename to src/main/java/com/study/domain/Lotto.java index 649d151c..113ca95b 100644 --- a/src/main/java/domain/Lotto.java +++ b/src/main/java/com/study/domain/Lotto.java @@ -1,6 +1,6 @@ -package domain; +package com.study.domain; -import enums.Rank; +import com.study.enums.Rank; import java.util.List; diff --git a/src/main/java/com/study/domain/LottoMachine.java b/src/main/java/com/study/domain/LottoMachine.java new file mode 100644 index 00000000..ecb0ce38 --- /dev/null +++ b/src/main/java/com/study/domain/LottoMachine.java @@ -0,0 +1,80 @@ +package com.study.domain; + +import com.study.enums.Rank; +import com.study.utils.InputValidation; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class LottoMachine { + + private final int lottoTicketCount; + private final int money; + private static InputValidation inputValidation = new InputValidation(); + private final LottoValication lottoValication= new LottoValication(); + + public LottoMachine(String inputMoney) { + this.money = lottoValication.checkGivenMoney(inputMoney); + this.lottoTicketCount = this.money / lottoValication.LOTTO_PRICE; + } + + public int getLottoTicketCount() { + return this.lottoTicketCount; + } + + public List createRandomNumber() { + List balls = IntStream.range(1, 45) + .boxed() + .collect(Collectors.toList()); + Collections.shuffle(balls); + List lottoNumbers = balls.subList(0, 6); + Collections.sort(lottoNumbers); + return lottoNumbers; + } + + public List getLottoTickets() { + List lottoTicket = new ArrayList<>(); + for (int i = 0; i < lottoTicketCount; i++) { + lottoTicket.add(new Lotto(createRandomNumber())); + } + return lottoTicket; + } + public int getBonusBall(String bonusInput, List winningNumber) { + int bonusInputNumber = Integer.parseInt(bonusInput); + lottoValication.checkBound(bonusInputNumber); + lottoValication.checkBonusDuplicate(bonusInputNumber, winningNumber); + return bonusInputNumber; + } + public TreeMap getRankResult(Lottos lottos, List winningNumber, int bonusNumber) { + + TreeMap result = new TreeMap() {{ + put(Rank.FIRST_PLACE, 0); + put(Rank.SECOND_PLACE, 0); + put(Rank.THIRD_PLACE, 0); + put(Rank.FOURTH_PLACE, 0); + put(Rank.FIFTH_PLACE, 0); + put(Rank.ETC, 0); + }}; + + for (Lotto lotto : lottos.getLottos()) { + result.put(lotto.getRank(winningNumber, bonusNumber), result.get(lotto.getRank(winningNumber, bonusNumber)) + 1); + } + return result; + } + + public double getProfitRate(Map rankResult) { + double totalPrize = rankResult.entrySet() + .stream() + .mapToDouble((rank) -> rank.getKey().prize() * rank.getValue()) + .sum(); + return totalPrize / this.money; + } + + public List getWinningNumber(String winningNumber) { + List winningNumbers = inputValidation.toIntegers(inputValidation.splitByComma(winningNumber)); + lottoValication.winningNumberValidate(winningNumbers); + return winningNumbers; + } + +} diff --git a/src/main/java/com/study/domain/LottoValication.java b/src/main/java/com/study/domain/LottoValication.java new file mode 100644 index 00000000..a3cbabe1 --- /dev/null +++ b/src/main/java/com/study/domain/LottoValication.java @@ -0,0 +1,67 @@ +package com.study.domain; + +import java.util.List; +import java.util.regex.Pattern; + +public class LottoValication { + public static final int LOTTO_PRICE = 1000; + public static final int BOUND_MIN = 1; + public static final int BOUND_MAX = 45; + public static final int LOTTO_LENGTH = 6; + + + private static final String LOTTO_PRICE_PATTERN = "\\d*000"; + private static final String ALERT_CHECK_BOUND = String.format("당첨번호는 %d - %d 사이값을 입력해주세요", BOUND_MIN, BOUND_MAX); + private static final String ALERT_CHECK_LENGTH = String.format("당첨번호는 %d개 이어야 합니다.", LOTTO_LENGTH); + private static final String ALERT_CHECK_DUPLICATION = "중복되는 숫자가 포함되어 있는지 확인해주세요."; + private static final String ALERT_CHECK_BONUS_DUPLICATE = "보너스볼이 당첨 번호와 중복되는지 확인해주세요."; + + public int checkGivenMoney(String givenMoney) { + if (!Pattern.matches(LOTTO_PRICE_PATTERN, givenMoney)) { + throw new RuntimeException("1000원 단위의 금액만 투입할 수 있습니다."); + } + return Integer.parseInt(givenMoney); + } + + public void winningNumberValidate(List winningNumbers) { + checkListBound(winningNumbers); + checkLength(winningNumbers); + checkDuplicate(winningNumbers); + } + + public void checkBound(int number) { + if (BOUND_MIN > number || number > BOUND_MAX) { + throw new IllegalArgumentException(ALERT_CHECK_BOUND); + } + } + + public void checkBonusDuplicate(int bonusInputNumber, List winningNumber) { + boolean isDuplicate = winningNumber.stream() + .anyMatch(number -> bonusInputNumber == number); + + if (isDuplicate) { + throw new IllegalArgumentException(ALERT_CHECK_BONUS_DUPLICATE); + } + } + + private void checkListBound(List winningNumbers) { + for (Integer winningNumber : winningNumbers) { + checkBound(winningNumber); + } + } + private void checkLength(List winningNumbers) { + if (winningNumbers.size() != LOTTO_LENGTH) { + throw new IllegalArgumentException(ALERT_CHECK_LENGTH); + + } + } + private void checkDuplicate(List winningNumbers) { + int countOfDeDuplication = (int) winningNumbers.stream() + .distinct() + .count(); + + if (countOfDeDuplication != winningNumbers.size()) { + throw new IllegalArgumentException(ALERT_CHECK_DUPLICATION); + } + } +} diff --git a/src/main/java/domain/Lottos.java b/src/main/java/com/study/domain/Lottos.java similarity index 89% rename from src/main/java/domain/Lottos.java rename to src/main/java/com/study/domain/Lottos.java index 35045b6d..278115ff 100644 --- a/src/main/java/domain/Lottos.java +++ b/src/main/java/com/study/domain/Lottos.java @@ -1,4 +1,4 @@ -package domain; +package com.study.domain; import java.util.List; diff --git a/src/main/java/enums/Rank.java b/src/main/java/com/study/enums/Rank.java similarity index 97% rename from src/main/java/enums/Rank.java rename to src/main/java/com/study/enums/Rank.java index 6c8bf711..a8204c85 100644 --- a/src/main/java/enums/Rank.java +++ b/src/main/java/com/study/enums/Rank.java @@ -1,4 +1,4 @@ -package enums; +package com.study.enums; import java.util.Arrays; diff --git a/src/main/java/utils/InputValidation.java b/src/main/java/com/study/utils/InputValidation.java similarity index 98% rename from src/main/java/utils/InputValidation.java rename to src/main/java/com/study/utils/InputValidation.java index 4f107d12..874305fa 100644 --- a/src/main/java/utils/InputValidation.java +++ b/src/main/java/com/study/utils/InputValidation.java @@ -1,4 +1,4 @@ -package utils; +package com.study.utils; import org.apache.commons.lang3.StringUtils; diff --git a/src/main/java/view/InputView.java b/src/main/java/com/study/view/InputView.java similarity index 92% rename from src/main/java/view/InputView.java rename to src/main/java/com/study/view/InputView.java index b57a386e..811dc569 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/com/study/view/InputView.java @@ -1,8 +1,7 @@ -package view; +package com.study.view; -import utils.InputValidation; +import com.study.utils.InputValidation; -import java.util.List; import java.util.Scanner; public class InputView { diff --git a/src/main/java/view/OutputView.java b/src/main/java/com/study/view/OutputView.java similarity index 92% rename from src/main/java/view/OutputView.java rename to src/main/java/com/study/view/OutputView.java index a65a4ce0..9837befe 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/com/study/view/OutputView.java @@ -1,8 +1,8 @@ -package view; +package com.study.view; -import domain.Lotto; -import domain.Lottos; -import enums.Rank; +import com.study.domain.Lotto; +import com.study.domain.Lottos; +import com.study.enums.Rank; import java.util.List; import java.util.Map; diff --git a/src/main/java/domain/LottoMachine.java b/src/main/java/domain/LottoMachine.java deleted file mode 100644 index 23e09bd1..00000000 --- a/src/main/java/domain/LottoMachine.java +++ /dev/null @@ -1,138 +0,0 @@ -package domain; - -import enums.Rank; -import utils.InputValidation; - -import java.util.*; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class LottoMachine { - - private static final int LOTTO_PRICE = 1000; - private final int lottoTicketCount; - private static final String LOTTO_PRICE_PATTERN = "\\d*000"; - private final int money; - private static final int BOUND_MIN = 1; - private static final int BOUND_MAX = 45; - private static final int LOTTO_LENGTH = 6; - private static InputValidation inputValidation = new InputValidation(); - private static final String ALERT_CHECK_BOUND = String.format("당첨번호는 %d - %d 사이값을 입력해주세요", BOUND_MIN, BOUND_MAX); - private static final String ALERT_CHECK_LENGTH = String.format("당첨번호는 %d개 이어야 합니다.", LOTTO_LENGTH); - private static final String ALERT_CHECK_DUPLICATION = "중복되는 숫자가 포함되어 있는지 확인해주세요."; - private static final String ALERT_CHECK_BONUS_DUPLICATE = "보너스볼이 당첨 번호와 중복되는지 확인해주세요."; - - public LottoMachine(String inputMoney) { - this.money = checkGivenMoney(inputMoney); - this.lottoTicketCount = this.money / LOTTO_PRICE; - } - - private int checkGivenMoney(String givenMoney) { - if (!Pattern.matches(LOTTO_PRICE_PATTERN, givenMoney)) { - throw new RuntimeException("1000원 단위의 금액만 투입할 수 있습니다."); - } - return Integer.parseInt(givenMoney); - } - - public int getLottoTicketCount() { - return this.lottoTicketCount; - } - - public List createRandomNumber() { - List balls = IntStream.range(1, 45) - .boxed() - .collect(Collectors.toList()); - Collections.shuffle(balls); - List lottoNumbers = balls.subList(0, 6); - Collections.sort(lottoNumbers); - return lottoNumbers; - } - - public List getLottoTickets() { - List lottoTicket = new ArrayList<>(); - for (int i = 0; i < lottoTicketCount; i++) { - lottoTicket.add(new Lotto(createRandomNumber())); - } - return lottoTicket; - } - - public TreeMap getRankResult(Lottos lottos, List winningNumber, int bonusNumber) { - - TreeMap result = new TreeMap() {{ - put(Rank.FIRST_PLACE, 0); - put(Rank.SECOND_PLACE, 0); - put(Rank.THIRD_PLACE, 0); - put(Rank.FOURTH_PLACE, 0); - put(Rank.FIFTH_PLACE, 0); - put(Rank.ETC, 0); - }}; - - for (Lotto lotto : lottos.getLottos()) { - result.put(lotto.getRank(winningNumber, bonusNumber), result.get(lotto.getRank(winningNumber, bonusNumber)) + 1); - } - return result; - } - - public double getProfitRate(Map rankResult) { - double totalPrize = rankResult.entrySet() - .stream() - .mapToDouble((rank) -> rank.getKey().prize() * rank.getValue()) - .sum(); - return totalPrize / this.money; - } - - public List getWinningNumber(String winningNumber) { - List winningNumbers = inputValidation.toIntegers(inputValidation.splitByComma(winningNumber)); - winningNumberValidate(winningNumbers); - return winningNumbers; - } - private void winningNumberValidate(List winningNumbers) { - checkListBound(winningNumbers); - checkLength(winningNumbers); - checkDuplicate(winningNumbers); - } - - private void checkListBound(List winningNumbers) { - for (Integer winningNumber : winningNumbers) { - checkBound(winningNumber); - } - } - - public void checkBound(int number) { - if (BOUND_MIN > number || number > BOUND_MAX) { - throw new IllegalArgumentException(ALERT_CHECK_BOUND); - } - } - - private void checkLength(List winningNumbers) { - if (winningNumbers.size() != LOTTO_LENGTH) { - throw new IllegalArgumentException(ALERT_CHECK_LENGTH); - - } - } - - private void checkDuplicate(List winningNumbers) { - int countOfDeDuplication = (int) winningNumbers.stream() - .distinct() - .count(); - - if (countOfDeDuplication != winningNumbers.size()) { - throw new IllegalArgumentException(ALERT_CHECK_DUPLICATION); - } - } - public int getBonusBall(String bonusInput, List winningNumber) { - int bonusInputNumber = Integer.parseInt(bonusInput); - checkBound(bonusInputNumber); - checkBonusDuplicate(bonusInputNumber, winningNumber); - return bonusInputNumber; - } - private void checkBonusDuplicate(int bonusInputNumber, List winningNumber) { - boolean isDuplicate = winningNumber.stream() - .anyMatch(number -> bonusInputNumber == number); - - if (isDuplicate) { - throw new IllegalArgumentException(ALERT_CHECK_BONUS_DUPLICATE); - } - } -} diff --git a/src/test/java/domain/LottoMachineTest.java b/src/test/java/com/study/domain/LottoMachineTest.java similarity index 98% rename from src/test/java/domain/LottoMachineTest.java rename to src/test/java/com/study/domain/LottoMachineTest.java index f04b1dd6..4858730f 100644 --- a/src/test/java/domain/LottoMachineTest.java +++ b/src/test/java/com/study/domain/LottoMachineTest.java @@ -1,6 +1,9 @@ -package domain; +package com.study.domain; -import enums.Rank; +import com.study.domain.Lotto; +import com.study.domain.LottoMachine; +import com.study.domain.Lottos; +import com.study.enums.Rank; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/domain/LottoTest.java b/src/test/java/com/study/domain/LottoTest.java similarity index 92% rename from src/test/java/domain/LottoTest.java rename to src/test/java/com/study/domain/LottoTest.java index 7f0797f8..0273f68b 100644 --- a/src/test/java/domain/LottoTest.java +++ b/src/test/java/com/study/domain/LottoTest.java @@ -1,6 +1,8 @@ -package domain; +package com.study.domain; -import enums.Rank; +import com.study.domain.Lotto; +import com.study.domain.LottoMachine; +import com.study.enums.Rank; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/src/test/java/enums/RankTest.java b/src/test/java/com/study/enums/RankTest.java similarity index 96% rename from src/test/java/enums/RankTest.java rename to src/test/java/com/study/enums/RankTest.java index 8ee367c2..609c3094 100644 --- a/src/test/java/enums/RankTest.java +++ b/src/test/java/com/study/enums/RankTest.java @@ -1,5 +1,6 @@ -package enums; +package com.study.enums; +import com.study.enums.Rank; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; From e7d37733c136554f364fb71f76116cbef3030cdf Mon Sep 17 00:00:00 2001 From: eunii Date: Wed, 21 Jul 2021 21:40:23 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=EB=A1=9C=EB=98=90=20=EC=88=98?= =?UTF-8?q?=EB=8F=99=20=EB=B2=88=ED=98=B8=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/study/controller/LottoController.java | 5 +- src/main/java/com/study/domain/Lotto.java | 2 + .../java/com/study/domain/LottoMachine.java | 50 ++++++++++++++--- .../com/study/domain/LottoValication.java | 12 ++++- .../java/com/study/utils/InputValidation.java | 7 ++- src/main/java/com/study/view/InputView.java | 30 ++++++++++- ...hineTest.java => LottoValicationTest.java} | 54 ++++++------------- 7 files changed, 106 insertions(+), 54 deletions(-) rename src/test/java/com/study/domain/{LottoMachineTest.java => LottoValicationTest.java} (79%) diff --git a/src/main/java/com/study/controller/LottoController.java b/src/main/java/com/study/controller/LottoController.java index d29c3b64..8608fd88 100644 --- a/src/main/java/com/study/controller/LottoController.java +++ b/src/main/java/com/study/controller/LottoController.java @@ -16,8 +16,9 @@ public class LottoController { public static void main(String[] args) { - LottoMachine lottoMachine = new LottoMachine(inputView.inputMoney()); - Lottos lottos= new Lottos(lottoMachine.getLottoTickets()); + LottoMachine lottoMachine = new LottoMachine(inputView.inputMoney(), inputView.manualTicketCount()); + List> manulLottos = inputView.manualLottlNumbers(lottoMachine.getLottoManualTicketCount()); + Lottos lottos = new Lottos(lottoMachine.getLottoTotalTickets(manulLottos)); outputView.printLottoTickets(lottos); List winningNumbers = lottoMachine.getWinningNumber(inputView.inputWinningNumbers()); diff --git a/src/main/java/com/study/domain/Lotto.java b/src/main/java/com/study/domain/Lotto.java index 113ca95b..17f88c6b 100644 --- a/src/main/java/com/study/domain/Lotto.java +++ b/src/main/java/com/study/domain/Lotto.java @@ -7,8 +7,10 @@ public class Lotto { private final List lottoNumbers; + private final LottoValication lottoValication = new LottoValication(); public Lotto(List randomNumber) { + lottoValication.lottoNumberValidate(randomNumber); this.lottoNumbers = randomNumber; } diff --git a/src/main/java/com/study/domain/LottoMachine.java b/src/main/java/com/study/domain/LottoMachine.java index ecb0ce38..4c7c4e25 100644 --- a/src/main/java/com/study/domain/LottoMachine.java +++ b/src/main/java/com/study/domain/LottoMachine.java @@ -9,18 +9,42 @@ public class LottoMachine { - private final int lottoTicketCount; + private final int lottoTotalTicketCount; + private final int lottoAutoTicketCount; + private final int lottoManualTicketCount; private final int money; private static InputValidation inputValidation = new InputValidation(); private final LottoValication lottoValication= new LottoValication(); public LottoMachine(String inputMoney) { this.money = lottoValication.checkGivenMoney(inputMoney); - this.lottoTicketCount = this.money / lottoValication.LOTTO_PRICE; + this.lottoTotalTicketCount = this.money / lottoValication.LOTTO_PRICE; + lottoManualTicketCount = lottoTotalTicketCount; + lottoAutoTicketCount = 0; + } + +// public LottoMachine(String inputMoney, List> manulLottos) { +// this.money = lottoValication.checkGivenMoney(inputMoney); +// lottoValication.canbyAllTickets(money, manulLottos.size()); +// this.lottoTotalTicketCount = this.money / lottoValication.LOTTO_PRICE; +// this.lottoAutoTicketCount = manulLottos.size(); +// this.lottoManualTicketCount = lottoTotalTicketCount - lottoAutoTicketCount; +// } + + public LottoMachine(String inputMoney, int manualTicketCount) { + this.money = lottoValication.checkGivenMoney(inputMoney); + lottoValication.canbyAllTickets(money, manualTicketCount); + this.lottoTotalTicketCount = this.money / lottoValication.LOTTO_PRICE; + this.lottoAutoTicketCount = manualTicketCount; + this.lottoManualTicketCount = lottoTotalTicketCount - lottoAutoTicketCount; } public int getLottoTicketCount() { - return this.lottoTicketCount; + return this.lottoTotalTicketCount; + } + + public int getLottoManualTicketCount() { + return lottoManualTicketCount; } public List createRandomNumber() { @@ -33,13 +57,27 @@ public List createRandomNumber() { return lottoNumbers; } - public List getLottoTickets() { + public List getLottoTotalTickets(List> manualLottos) { + List lottoTickets = new ArrayList<>(); + lottoTickets.addAll(getLottoManulTickets(manualLottos)); + lottoTickets.addAll(getAutoLottoTickets()); + return lottoTickets; + } + public List getAutoLottoTickets() { List lottoTicket = new ArrayList<>(); - for (int i = 0; i < lottoTicketCount; i++) { + for (int i = 0; i < lottoAutoTicketCount; i++) { lottoTicket.add(new Lotto(createRandomNumber())); } return lottoTicket; } + + public List getLottoManulTickets(List> manualLottos) { + List lottoTicket = new ArrayList<>(); + for (int i = 0; i < lottoManualTicketCount; i++) { + lottoTicket.add(new Lotto(manualLottos.get(i))); + } + return lottoTicket; + } public int getBonusBall(String bonusInput, List winningNumber) { int bonusInputNumber = Integer.parseInt(bonusInput); lottoValication.checkBound(bonusInputNumber); @@ -73,7 +111,7 @@ public double getProfitRate(Map rankResult) { public List getWinningNumber(String winningNumber) { List winningNumbers = inputValidation.toIntegers(inputValidation.splitByComma(winningNumber)); - lottoValication.winningNumberValidate(winningNumbers); + lottoValication.lottoNumberValidate(winningNumbers); return winningNumbers; } diff --git a/src/main/java/com/study/domain/LottoValication.java b/src/main/java/com/study/domain/LottoValication.java index a3cbabe1..13bd7910 100644 --- a/src/main/java/com/study/domain/LottoValication.java +++ b/src/main/java/com/study/domain/LottoValication.java @@ -15,15 +15,17 @@ public class LottoValication { private static final String ALERT_CHECK_LENGTH = String.format("당첨번호는 %d개 이어야 합니다.", LOTTO_LENGTH); private static final String ALERT_CHECK_DUPLICATION = "중복되는 숫자가 포함되어 있는지 확인해주세요."; private static final String ALERT_CHECK_BONUS_DUPLICATE = "보너스볼이 당첨 번호와 중복되는지 확인해주세요."; + private static final String ALERT_CHECK_PAYMENT_MANUAL= "구매 금액 이상의 수동 로또를 살 수 없습니다."; + private static final String ALERT_CHECK_PAYMENT= "1000원 단위의 금액만 투입할 수 있습니다."; public int checkGivenMoney(String givenMoney) { if (!Pattern.matches(LOTTO_PRICE_PATTERN, givenMoney)) { - throw new RuntimeException("1000원 단위의 금액만 투입할 수 있습니다."); + throw new IllegalArgumentException(ALERT_CHECK_PAYMENT); } return Integer.parseInt(givenMoney); } - public void winningNumberValidate(List winningNumbers) { + public void lottoNumberValidate(List winningNumbers) { checkListBound(winningNumbers); checkLength(winningNumbers); checkDuplicate(winningNumbers); @@ -64,4 +66,10 @@ private void checkDuplicate(List winningNumbers) { throw new IllegalArgumentException(ALERT_CHECK_DUPLICATION); } } + + public void canbyAllTickets(int totalCount, int manulCount) { + if(totalCount toIntegers(List input) { return new ArrayList<>(Collections.unmodifiableList(input.stream() .mapToInt(Integer::parseInt) @@ -40,5 +37,7 @@ public void checkNullOrEmpty(String input) { } } - + public String removeBlank(String input) { + return input.replaceAll(" ", ""); + } } diff --git a/src/main/java/com/study/view/InputView.java b/src/main/java/com/study/view/InputView.java index 811dc569..9ccd6322 100644 --- a/src/main/java/com/study/view/InputView.java +++ b/src/main/java/com/study/view/InputView.java @@ -2,6 +2,8 @@ import com.study.utils.InputValidation; +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; public class InputView { @@ -13,7 +15,24 @@ public String inputMoney() { System.out.println("구입금액을 입력해 주세요."); String money = scanner.nextLine(); inputValidation.checkNullOrEmpty(money); - return money; + return money; + } + + public int manualTicketCount() { + System.out.println("수동으로 구매할 로또 수를 입력해 주세요."); + String manulTicketCount = scanner.nextLine(); + inputValidation.checkNullOrEmpty(manulTicketCount); + return Integer.parseInt(manulTicketCount); + } + + public List> manualLottlNumbers(int manulTicketCount) { + System.out.println("수동으로 구매할 번호를 입력해 주세요."); + List> lottos = new ArrayList<>(); + for (int i = 0; i < manulTicketCount; i++) { + List lottoNumbers = manualLottlNumber(); + lottos.add(lottoNumbers); + } + return lottos; } public String inputWinningNumbers() { @@ -28,4 +47,13 @@ public String inputBonusBall() { return scanner.nextLine(); } + private List manualLottlNumber() { + + String manulTicketCount = inputValidation.removeBlank(scanner.nextLine()); + inputValidation.checkNullOrEmpty(manulTicketCount); + List manulLottoNumbers = inputValidation.splitByComma(manulTicketCount); + List numberList = inputValidation.toIntegers(manulLottoNumbers); + return numberList; + } + } diff --git a/src/test/java/com/study/domain/LottoMachineTest.java b/src/test/java/com/study/domain/LottoValicationTest.java similarity index 79% rename from src/test/java/com/study/domain/LottoMachineTest.java rename to src/test/java/com/study/domain/LottoValicationTest.java index 4858730f..1df61c31 100644 --- a/src/test/java/com/study/domain/LottoMachineTest.java +++ b/src/test/java/com/study/domain/LottoValicationTest.java @@ -1,8 +1,5 @@ package com.study.domain; -import com.study.domain.Lotto; -import com.study.domain.LottoMachine; -import com.study.domain.Lottos; import com.study.enums.Rank; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -11,20 +8,13 @@ import static org.assertj.core.api.Assertions.*; -public class LottoMachineTest { +public class LottoValicationTest { + LottoValication lottoValication = new LottoValication(); - @Test - void 돈을_입력받으면_구매한_로또_수를_리턴한다() { - //given - String givenMoney = "14000"; - LottoMachine lottoMachine = new LottoMachine(givenMoney); - //when //than - assertThat(lottoMachine.getLottoTicketCount()).isEqualTo(14); - } @Test void _1에서_45_사이의_로또번호와_중복된_보너스번호_입력_하면_에러_리턴() { //given - String bonusNumbers = "45"; + int bonusNumbers = 45; List winningNumber = new ArrayList<>(); winningNumber.add(1); winningNumber.add(2); @@ -33,48 +23,46 @@ public class LottoMachineTest { winningNumber.add(5); winningNumber.add(45); //when - LottoMachine machine = new LottoMachine("1000"); + //then assertThatThrownBy( - () -> machine.getBonusBall(bonusNumbers, winningNumber)) + () -> lottoValication.checkBonusDuplicate(bonusNumbers, winningNumber)) .isInstanceOf(IllegalArgumentException.class); } + @Test @DisplayName("입력 숫자의 범위가 1-45가 아닐 경우 예외가 발생한다.") public void checkBound() { //given - String bonusNumbers = "46"; List winningNumber = new ArrayList<>(); winningNumber.add(1); winningNumber.add(2); winningNumber.add(3); winningNumber.add(4); winningNumber.add(5); - winningNumber.add(45); + winningNumber.add(0); //when - LottoMachine machine = new LottoMachine("1000"); + // then - assertThatIllegalArgumentException().isThrownBy(() -> machine.getBonusBall(bonusNumbers, winningNumber)); + assertThatIllegalArgumentException().isThrownBy(() -> lottoValication.lottoNumberValidate(winningNumber)); } @Test @DisplayName("입력 숫자가 음수 일 경우 경우 예외가 발생한다.") public void checkBoundMinus() { //given - String bonusNumbers = "-46"; List winningNumber = new ArrayList<>(); winningNumber.add(1); winningNumber.add(2); winningNumber.add(3); winningNumber.add(4); winningNumber.add(5); - winningNumber.add(45); + winningNumber.add(-45); //when - LottoMachine machine = new LottoMachine("1000"); // then - assertThatIllegalArgumentException().isThrownBy(() -> machine.getBonusBall(bonusNumbers, winningNumber)); + assertThatIllegalArgumentException().isThrownBy(() -> lottoValication.lottoNumberValidate(winningNumber)); } @Test @@ -90,19 +78,19 @@ public void checkBoundMinus() { winningNumber.add(6); //when LottoMachine machine = new LottoMachine("1000"); - int result = machine.getBonusBall(bonusNumbers, winningNumber); + int result = machine.getBonusBall(bonusNumbers, winningNumber); //then assertThat(result).isEqualTo(45); } + @Test void 문자_100을_입력받으면_런타임에러를_리턴한다() { //given String givenMoney = "100"; //when //then - assertThatThrownBy(() -> - new LottoMachine(givenMoney)). - isInstanceOf(RuntimeException.class); + assertThatIllegalArgumentException().isThrownBy(() -> + lottoValication.checkGivenMoney(givenMoney)); } @Test @@ -139,18 +127,6 @@ public void checkBoundMinus() { } - @Test - void 부여받은_티켓_개수대로_로또_만들어서_리턴한다() { - //given - String money = "1000"; - LottoMachine lottoMachine = new LottoMachine(money); - //when - List lottoTickets = lottoMachine.getLottoTickets(); - //than - assertThat(lottoTickets.size()).isEqualTo(1); - - } - @Test @DisplayName("1등_당첨_결과를_리턴한다") void getRankResult() { From b48d0f7e06c17d92720cdecc7ced513ae87b525e Mon Sep 17 00:00:00 2001 From: eunii Date: Wed, 21 Jul 2021 22:44:28 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor:=20sonarLint=20=EA=B8=B0=EB=B0=98?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../com/study/controller/LottoController.java | 5 +- .../java/com/study/domain/LottoMachine.java | 53 +++++++------------ .../com/study/domain/LottoValication.java | 2 +- src/main/java/com/study/enums/RankMap.java | 18 +++++++ .../java/com/study/utils/InputValidation.java | 5 +- src/main/java/com/study/view/InputView.java | 18 +++---- .../com/study/domain/LottoValicationTest.java | 9 ++-- 8 files changed, 58 insertions(+), 54 deletions(-) create mode 100644 src/main/java/com/study/enums/RankMap.java diff --git a/build.gradle b/build.gradle index 079c9a02..6ecd2248 100644 --- a/build.gradle +++ b/build.gradle @@ -15,4 +15,4 @@ dependencies { test { useJUnitPlatform() -} +} \ No newline at end of file diff --git a/src/main/java/com/study/controller/LottoController.java b/src/main/java/com/study/controller/LottoController.java index 8608fd88..c1d5b939 100644 --- a/src/main/java/com/study/controller/LottoController.java +++ b/src/main/java/com/study/controller/LottoController.java @@ -17,8 +17,9 @@ public class LottoController { public static void main(String[] args) { LottoMachine lottoMachine = new LottoMachine(inputView.inputMoney(), inputView.manualTicketCount()); - List> manulLottos = inputView.manualLottlNumbers(lottoMachine.getLottoManualTicketCount()); - Lottos lottos = new Lottos(lottoMachine.getLottoTotalTickets(manulLottos)); + List> manulLottoNumbers = inputView.manualLottlNumbers(lottoMachine.getLottoManualTicketCount()); + + Lottos lottos = new Lottos(lottoMachine.getLottoTotalTickets(manulLottoNumbers)); outputView.printLottoTickets(lottos); List winningNumbers = lottoMachine.getWinningNumber(inputView.inputWinningNumbers()); diff --git a/src/main/java/com/study/domain/LottoMachine.java b/src/main/java/com/study/domain/LottoMachine.java index 4c7c4e25..aac3b2e3 100644 --- a/src/main/java/com/study/domain/LottoMachine.java +++ b/src/main/java/com/study/domain/LottoMachine.java @@ -1,6 +1,7 @@ package com.study.domain; import com.study.enums.Rank; +import com.study.enums.RankMap; import com.study.utils.InputValidation; import java.util.*; @@ -14,29 +15,21 @@ public class LottoMachine { private final int lottoManualTicketCount; private final int money; private static InputValidation inputValidation = new InputValidation(); - private final LottoValication lottoValication= new LottoValication(); + private final static LottoValication LOTTO_VALIDATION = new LottoValication(); public LottoMachine(String inputMoney) { - this.money = lottoValication.checkGivenMoney(inputMoney); - this.lottoTotalTicketCount = this.money / lottoValication.LOTTO_PRICE; + this.money = LOTTO_VALIDATION.checkGivenMoney(inputMoney); + this.lottoTotalTicketCount = this.money / LOTTO_VALIDATION.LOTTO_PRICE; lottoManualTicketCount = lottoTotalTicketCount; lottoAutoTicketCount = 0; } -// public LottoMachine(String inputMoney, List> manulLottos) { -// this.money = lottoValication.checkGivenMoney(inputMoney); -// lottoValication.canbyAllTickets(money, manulLottos.size()); -// this.lottoTotalTicketCount = this.money / lottoValication.LOTTO_PRICE; -// this.lottoAutoTicketCount = manulLottos.size(); -// this.lottoManualTicketCount = lottoTotalTicketCount - lottoAutoTicketCount; -// } - public LottoMachine(String inputMoney, int manualTicketCount) { - this.money = lottoValication.checkGivenMoney(inputMoney); - lottoValication.canbyAllTickets(money, manualTicketCount); - this.lottoTotalTicketCount = this.money / lottoValication.LOTTO_PRICE; - this.lottoAutoTicketCount = manualTicketCount; - this.lottoManualTicketCount = lottoTotalTicketCount - lottoAutoTicketCount; + this.money = LOTTO_VALIDATION.checkGivenMoney(inputMoney); + LOTTO_VALIDATION.canbyAllTickets(money, manualTicketCount); + this.lottoTotalTicketCount = this.money / LOTTO_VALIDATION.LOTTO_PRICE; + this.lottoManualTicketCount = manualTicketCount; + this.lottoAutoTicketCount = lottoTotalTicketCount - lottoManualTicketCount; } public int getLottoTicketCount() { @@ -63,6 +56,7 @@ public List getLottoTotalTickets(List> manualLottos) { lottoTickets.addAll(getAutoLottoTickets()); return lottoTickets; } + public List getAutoLottoTickets() { List lottoTicket = new ArrayList<>(); for (int i = 0; i < lottoAutoTicketCount; i++) { @@ -78,40 +72,33 @@ public List getLottoManulTickets(List> manualLottos) { } return lottoTicket; } + public int getBonusBall(String bonusInput, List winningNumber) { int bonusInputNumber = Integer.parseInt(bonusInput); - lottoValication.checkBound(bonusInputNumber); - lottoValication.checkBonusDuplicate(bonusInputNumber, winningNumber); + LOTTO_VALIDATION.checkBound(bonusInputNumber); + LOTTO_VALIDATION.checkBonusDuplicate(bonusInputNumber, winningNumber); return bonusInputNumber; } - public TreeMap getRankResult(Lottos lottos, List winningNumber, int bonusNumber) { - - TreeMap result = new TreeMap() {{ - put(Rank.FIRST_PLACE, 0); - put(Rank.SECOND_PLACE, 0); - put(Rank.THIRD_PLACE, 0); - put(Rank.FOURTH_PLACE, 0); - put(Rank.FIFTH_PLACE, 0); - put(Rank.ETC, 0); - }}; + public RankMap getRankResult(Lottos lottos, List winningNumber, int bonusNumber) { + RankMap rankMap = new RankMap(Rank.class); for (Lotto lotto : lottos.getLottos()) { - result.put(lotto.getRank(winningNumber, bonusNumber), result.get(lotto.getRank(winningNumber, bonusNumber)) + 1); + rankMap.put(lotto.getRank(winningNumber, bonusNumber), rankMap.get(lotto.getRank(winningNumber, bonusNumber)) + 1); } - return result; + return rankMap; } public double getProfitRate(Map rankResult) { double totalPrize = rankResult.entrySet() .stream() - .mapToDouble((rank) -> rank.getKey().prize() * rank.getValue()) + .mapToDouble(rank -> rank.getKey().prize() * rank.getValue()) .sum(); return totalPrize / this.money; } - public List getWinningNumber(String winningNumber) { + public List getWinningNumber(String winningNumber) { List winningNumbers = inputValidation.toIntegers(inputValidation.splitByComma(winningNumber)); - lottoValication.lottoNumberValidate(winningNumbers); + LOTTO_VALIDATION.lottoNumberValidate(winningNumbers); return winningNumbers; } diff --git a/src/main/java/com/study/domain/LottoValication.java b/src/main/java/com/study/domain/LottoValication.java index 13bd7910..117acd8d 100644 --- a/src/main/java/com/study/domain/LottoValication.java +++ b/src/main/java/com/study/domain/LottoValication.java @@ -4,12 +4,12 @@ import java.util.regex.Pattern; public class LottoValication { + public static final int LOTTO_PRICE = 1000; public static final int BOUND_MIN = 1; public static final int BOUND_MAX = 45; public static final int LOTTO_LENGTH = 6; - private static final String LOTTO_PRICE_PATTERN = "\\d*000"; private static final String ALERT_CHECK_BOUND = String.format("당첨번호는 %d - %d 사이값을 입력해주세요", BOUND_MIN, BOUND_MAX); private static final String ALERT_CHECK_LENGTH = String.format("당첨번호는 %d개 이어야 합니다.", LOTTO_LENGTH); diff --git a/src/main/java/com/study/enums/RankMap.java b/src/main/java/com/study/enums/RankMap.java new file mode 100644 index 00000000..ec9e7180 --- /dev/null +++ b/src/main/java/com/study/enums/RankMap.java @@ -0,0 +1,18 @@ +package com.study.enums; + +import java.util.EnumMap; + +public class RankMap extends EnumMap { + + { + put(Rank.FIRST_PLACE, 0); + put(Rank.SECOND_PLACE, 0); + put(Rank.THIRD_PLACE, 0); + put(Rank.FOURTH_PLACE, 0); + put(Rank.FIFTH_PLACE, 0); + put(Rank.ETC, 0); + } + public RankMap(Class keyType) { + super(keyType); + } +} diff --git a/src/main/java/com/study/utils/InputValidation.java b/src/main/java/com/study/utils/InputValidation.java index 5ff3865c..2081d36a 100644 --- a/src/main/java/com/study/utils/InputValidation.java +++ b/src/main/java/com/study/utils/InputValidation.java @@ -6,10 +6,9 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.regex.Pattern; import java.util.stream.Collectors; -public class InputValidation { +public class InputValidation { private static final String COMMA = ","; private static final String ALERT_CHECK_COMMA = String.format("구분자를 \"%s\"로 입력하셨는지 확인해주세요.", COMMA); @@ -38,6 +37,6 @@ public void checkNullOrEmpty(String input) { } public String removeBlank(String input) { - return input.replaceAll(" ", ""); + return input.replace(" ", ""); } } diff --git a/src/main/java/com/study/view/InputView.java b/src/main/java/com/study/view/InputView.java index 9ccd6322..eabf88cd 100644 --- a/src/main/java/com/study/view/InputView.java +++ b/src/main/java/com/study/view/InputView.java @@ -9,19 +9,19 @@ public class InputView { private static Scanner scanner = new Scanner(System.in); - private static InputValidation inputValidation = new InputValidation(); + private static final InputValidation INPUT_VALICATION = new InputValidation(); public String inputMoney() { System.out.println("구입금액을 입력해 주세요."); String money = scanner.nextLine(); - inputValidation.checkNullOrEmpty(money); + INPUT_VALICATION.checkNullOrEmpty(money); return money; } public int manualTicketCount() { System.out.println("수동으로 구매할 로또 수를 입력해 주세요."); String manulTicketCount = scanner.nextLine(); - inputValidation.checkNullOrEmpty(manulTicketCount); + INPUT_VALICATION.checkNullOrEmpty(manulTicketCount); return Integer.parseInt(manulTicketCount); } @@ -38,7 +38,7 @@ public List> manualLottlNumbers(int manulTicketCount) { public String inputWinningNumbers() { System.out.println("지난 주 당첨 번호를 입력해 주세요."); String winningNumber = scanner.nextLine(); - inputValidation.checkNullOrEmpty(winningNumber); + INPUT_VALICATION.checkNullOrEmpty(winningNumber); return winningNumber; } @@ -48,12 +48,10 @@ public String inputBonusBall() { } private List manualLottlNumber() { - - String manulTicketCount = inputValidation.removeBlank(scanner.nextLine()); - inputValidation.checkNullOrEmpty(manulTicketCount); - List manulLottoNumbers = inputValidation.splitByComma(manulTicketCount); - List numberList = inputValidation.toIntegers(manulLottoNumbers); - return numberList; + String manulTicketCount = INPUT_VALICATION.removeBlank(scanner.nextLine()); + INPUT_VALICATION.checkNullOrEmpty(manulTicketCount); + List manulLottoNumbers = InputValidation.splitByComma(manulTicketCount); + return InputValidation.toIntegers(manulLottoNumbers); } } diff --git a/src/test/java/com/study/domain/LottoValicationTest.java b/src/test/java/com/study/domain/LottoValicationTest.java index 1df61c31..fd541a9b 100644 --- a/src/test/java/com/study/domain/LottoValicationTest.java +++ b/src/test/java/com/study/domain/LottoValicationTest.java @@ -1,6 +1,7 @@ package com.study.domain; import com.study.enums.Rank; +import com.study.enums.RankMap; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -32,7 +33,7 @@ public class LottoValicationTest { @Test @DisplayName("입력 숫자의 범위가 1-45가 아닐 경우 예외가 발생한다.") - public void checkBound() { + void checkBound() { //given List winningNumber = new ArrayList<>(); winningNumber.add(1); @@ -50,7 +51,7 @@ public void checkBound() { @Test @DisplayName("입력 숫자가 음수 일 경우 경우 예외가 발생한다.") - public void checkBoundMinus() { + void checkBoundMinus() { //given List winningNumber = new ArrayList<>(); winningNumber.add(1); @@ -140,7 +141,7 @@ void getRankResult() { Lottos lottos = new Lottos(lottoTicket); //when - TreeMap rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 6), 7); + RankMap rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 6), 7); //then assertThat(rankResult.get(Rank.FIRST_PLACE)).isEqualTo(1); @@ -162,7 +163,7 @@ void getRankResult2() { //when - TreeMap rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 7), 6); + RankMap rankResult = lottoMachine.getRankResult(lottos, Arrays.asList(1, 2, 3, 4, 5, 7), 6); //then assertThat(rankResult.get(Rank.SECOND_PLACE)).isEqualTo(1);