Skip to content

Commit

Permalink
refactor: PurchasingPrice 객체는 티켓 가격을 모르도록 변경
Browse files Browse the repository at this point in the history
- 구입가격 객체는 양의 정수만을 허용하도록 변경한다.
  • Loading branch information
xlffm3 committed Feb 20, 2021
1 parent 004df6b commit ce4b8e1
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/main/java/lotto/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/lotto/domain/LottoTickets.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.stream.Stream;

public class LottoTickets {
private static final int LOTTO_TICKET_PRICE = 1000;

private final List<LottoTicket> lottoTickets;

Expand All @@ -22,6 +23,13 @@ public static LottoTickets generateAutomatic(int lottoTicketCounts, LottoNumberG
return new LottoTickets(lottoTickets);
}

public static LottoTickets generateAutomatic2(PurchasingPrice purchasingPrice, LottoNumberGenerator lottoNumberGenerator) {
List<LottoTicket> 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<LottoRank, Long> statistics = lottoTickets.stream()
.map(winningLottoTicket::compareNumbers)
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/lotto/domain/PurchasingPrice.java
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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() {
Expand Down
8 changes: 4 additions & 4 deletions src/test/java/lotto/domain/PurchasingPriceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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원 이상이면 객체가 정상 생성된다")
Expand All @@ -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);
}
Expand Down

0 comments on commit ce4b8e1

Please sign in to comment.