From ce4b8e1a1f6f72de5702943df0ff2bc3611740f2 Mon Sep 17 00:00:00 2001 From: Jinhong <56240505+xlffm3@users.noreply.github.com> Date: Sat, 20 Feb 2021 16:14:48 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20PurchasingPrice=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EB=8A=94=20=ED=8B=B0=EC=BC=93=20=EA=B0=80=EA=B2=A9?= =?UTF-8?q?=EC=9D=84=20=EB=AA=A8=EB=A5=B4=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구입가격 객체는 양의 정수만을 허용하도록 변경한다. --- src/main/java/lotto/Application.java | 2 +- src/main/java/lotto/domain/LottoTickets.java | 8 ++++++++ src/main/java/lotto/domain/PurchasingPrice.java | 10 +++++----- src/test/java/lotto/domain/PurchasingPriceTest.java | 8 ++++---- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index 413c44d6d9..77c857ff4c 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -9,7 +9,7 @@ public class Application { public static void main(String[] args) { PurchasingPrice purchasingPrice = new PurchasingPrice(InputView.inputPurchasingPrice()); - int lottoTicketCounts = purchasingPrice.calculatePurchasableTicketCounts(); + int lottoTicketCounts = purchasingPrice.calculatePurchasableTicketCounts(1000); LottoTickets lottoTickets = LottoTickets.generateAutomatic(lottoTicketCounts, new RandomLottoNumberGenerator()); OutputView.printPurchasedLottoTicketCounts(lottoTicketCounts); OutputView.printAllLottoTicketNumbers(lottoTickets); diff --git a/src/main/java/lotto/domain/LottoTickets.java b/src/main/java/lotto/domain/LottoTickets.java index 20ee292c4c..bc86483d02 100644 --- a/src/main/java/lotto/domain/LottoTickets.java +++ b/src/main/java/lotto/domain/LottoTickets.java @@ -8,6 +8,7 @@ import java.util.stream.Stream; public class LottoTickets { + private static final int LOTTO_TICKET_PRICE = 1000; private final List lottoTickets; @@ -22,6 +23,13 @@ public static LottoTickets generateAutomatic(int lottoTicketCounts, LottoNumberG return new LottoTickets(lottoTickets); } + public static LottoTickets generateAutomatic2(PurchasingPrice purchasingPrice, LottoNumberGenerator lottoNumberGenerator) { + List lottoTickets = Stream.generate(() -> LottoTicket.from(lottoNumberGenerator.generate())) + .limit(purchasingPrice.calculatePurchasableTicketCounts(LOTTO_TICKET_PRICE)) + .collect(Collectors.toList()); + return new LottoTickets(lottoTickets); + } + public LottoResult checkResult(WinningLottoTicket winningLottoTicket) { Map statistics = lottoTickets.stream() .map(winningLottoTicket::compareNumbers) diff --git a/src/main/java/lotto/domain/PurchasingPrice.java b/src/main/java/lotto/domain/PurchasingPrice.java index 1781bc8f2f..c8a3de882b 100644 --- a/src/main/java/lotto/domain/PurchasingPrice.java +++ b/src/main/java/lotto/domain/PurchasingPrice.java @@ -1,8 +1,8 @@ package lotto.domain; public class PurchasingPrice { - private static final int MINIMUM_TICKET_PRICE = 1000; - private static final String INVALID_PRICE = "로또 티켓 최소 구매 금액은 1000원입니다."; + private static final int ZERO = 0; + private static final String INVALID_PRICE = "로또 티켓 구매 금액은 양의 정수이어야 합니다."; private final int price; @@ -12,13 +12,13 @@ public PurchasingPrice(int price) { } private void validatePrice(int price) { - if (price < MINIMUM_TICKET_PRICE) { + if (price <= ZERO) { throw new IllegalArgumentException(INVALID_PRICE); } } - public int calculatePurchasableTicketCounts() { - return price / MINIMUM_TICKET_PRICE; + public int calculatePurchasableTicketCounts(int ticketCost) { + return price / ticketCost; } public int getPrice() { diff --git a/src/test/java/lotto/domain/PurchasingPriceTest.java b/src/test/java/lotto/domain/PurchasingPriceTest.java index 06ddfb5ca4..55a4b2272e 100644 --- a/src/test/java/lotto/domain/PurchasingPriceTest.java +++ b/src/test/java/lotto/domain/PurchasingPriceTest.java @@ -11,14 +11,14 @@ class PurchasingPriceTest { - @DisplayName("로또 구입 금액은 1000원 미만인 경우 객체 생성 예외가 발생한다") + @DisplayName("로또 구입 금액은 양의 정수여야 한다.") @ParameterizedTest - @ValueSource(ints = {-10, 0, 999}) + @ValueSource(ints = {-10, 0}) void cannotMakePurchasingPrice(int purchasingPrice) { assertThatCode(() -> { new PurchasingPrice(purchasingPrice); }).isInstanceOf(IllegalArgumentException.class) - .hasMessage("로또 티켓 최소 구매 금액은 1000원입니다."); + .hasMessage("로또 티켓 구매 금액은 양의 정수이어야 합니다."); } @DisplayName("로또 구입 금액이 1000원 이상이면 객체가 정상 생성된다") @@ -37,7 +37,7 @@ void calculateLottoTicketCounts() { int price = 3987; PurchasingPrice purchasingPrice = new PurchasingPrice(price); - int purchasableLottoTicketCounts = purchasingPrice.calculatePurchasableTicketCounts(); + int purchasableLottoTicketCounts = purchasingPrice.calculatePurchasableTicketCounts(1000); assertThat(purchasableLottoTicketCounts).isEqualTo(3987 / 1000); }