[π μ¬μ΄ν΄2 - λ―Έμ (λΈλμ λ² ν )] νλ λ―Έμ μ μΆν©λλ€.#1099
[π μ¬μ΄ν΄2 - λ―Έμ
(λΈλμ λ² ν
)] νλ λ―Έμ
μ μΆν©λλ€.#1099choubung wants to merge 29 commits intowoowacourse:choubungfrom
Conversation
money κ²μ¦ λ‘μ§ ν¬ν¨
BlackjackServiceμ BettingTable λ³κ²½
κΈ°μ‘΄μ Nameμ λ€μ΄ μλ name stringμ κΊΌλ΄μ λ°νν΄μμΌλ, Nameμ΄λΌλ voκ° μ‘΄μ¬νλ μ΄μ μ λ°νλ€κ³ μκ°νμ¬ κ°μ΄ μ€κ° λ Nameμ κ°μΈμ Έ μμ μ μλλ‘ μμ ν¨
moneyμ μμ±μ μΆκ° λΈλμ μ¬λΆ νλ³μ μν΄ HandCardsμ μ¬μ΄μ¦ λ°ν λ©μλ μΆκ°
| public Money calculateProfit(Player player) { | ||
| if (player.getWinStatus() == WinStatus.WIN && player.isBlackjack()) { | ||
| return new Money(bettingTable.get(player).getValueOf() * BLACKJACK_BONUS); | ||
| } | ||
|
|
||
| if (player.getWinStatus() == WinStatus.LOSS) { | ||
| return new Money(0); | ||
| } | ||
|
|
||
| return bettingTable.get(player); | ||
| } | ||
|
|
||
| public Money getDealerProfit() { | ||
| return new Money(bettingTable.values() | ||
| .stream() | ||
| .mapToInt(money -> money.getValueOf()) | ||
| .sum()); | ||
| } |
There was a problem hiding this comment.
ν μ€νΈλ₯Ό μμ±νλ €κ³ νλ, 미리 μΈν ν΄μΌ νλ κ°λ€μ΄ λ§μλ°(μΉλ¦¬ νλ³),
- ν΄λμ€ λΆλ¦¬κ° μ λλ‘ λμ§ μμ ν μ€νΈκ° λ νλ μνμΈκ±΄μ§, μλλ©΄ λ² ν μ΄ μ΄κΈ°μ λ§μ§λ§μ κ±Έμ³ μλ κΈ°λ₯μ΄κΈ°μ μ΄κ² μ κ² μΈν ν κ²μ΄ λ§μ κ±΄μ§ κΆκΈν©λλ€.
- λ, κΉμ΄κ° λ무 κΉμ΄μ§ λλ νΉμ λ©μλλ₯Ό νΈμΆνμ λ μ ν΄μ§ κ°μ λ°ννλλ‘ νλ κ°μ§ κ°μ²΄λ₯Ό λ§λ€μ΄ ν μ€νΈ ν΄λ λλμ§, κ·Έ λ°©μμ΄ μ§κΈ μ¬κΈ° μ μ©νκΈ°μ μ¬λ°λ₯Έμ§λ κΆκΈν©λλ€.
There was a problem hiding this comment.
ν
μ€νΈ ν κ² λ§λ€λ 건 if λΆκΈ°κ° λ§λ€λ λ»μ΄μ΄μ. λΆκΈ° νλ νλκ° κ°μΉμλμ§ κ²ν νμΈμ.
κ°μΉκ° μλ€λ©΄, 보νΈν΄μΌ λ λΉμ¦λμ€ λ‘μ§μ΄ λ§μΌλκΉ μ΄μ¬ν ν
μ€νΈνμλ©΄ λ©λλ€.
κ°μ²΄ λΆλ¦¬κ° μ λμ΄μμΌλ©΄ λ¨μν
μ€νΈλ₯Ό ν΅ν΄ κ·Έλ° λΆκΈ°λ€μ μ€μ¬λ³Ό μ μμ΄μ.
μμ»¨λ° Moneyμμ 1000μ λ¨μ validationμ μ ν΄μ£Όκ³ λκ³μ° ν λ κ°μ΄ νλ€κ³ νλ©΄,
10000μ + μΉλ¦¬μ‘°κ±΄ / 9999μ + μΉλ¦¬μ‘°κ±΄ / 10000μ + ν¨λ°°μ‘°κ±΄ / 9999μ + ν¨λ°°μ‘°κ±΄
μ΄λ κ² λΆκΈ°μ κ°μκ° μ§μμ μΌλ‘ μ¦κ°νκ² λ©λλ€.
μ΄κ² λ¨μμ μΌλ‘ μ λΆλ¦¬λμ΄ μμΌλ©΄ λΆκΈ°μκ° κ°μνκ² μ£ .
κΉμ΄κ° λ무 κΉμ΄μ§ λλ νΉμ λ©μλλ₯Ό νΈμΆνμ λ μ ν΄μ§ κ°μ λ°ννλλ‘ νλ κ°μ§ κ°μ²΄
μ΄κ² λλ©μΈ λ¨μ ν μ€νΈκ° μ λμ΄μμΌλ©΄ μμ°μ€λ½κ² μ€μ΄λ€μ΄μ. (νμ λ¨μ ν μ€νΈλ₯Ό λ―Ώκ³ μμμμ μ μ ν κ°μ μ§λ κ°μ²΄λ§ μ£Όμ )
μ΄μ¨λ "νΉμ λ©μλλ₯Ό νΈμΆνμ λ μ ν΄μ§ κ°μ λ°ννλλ‘ νλ κ°μ§ κ°μ²΄λ₯Ό λ§λ€μ΄ ν μ€νΈ" νμνλ€κ³ μκ°νμλ©΄ ꡬν ν 리뷰주μ μ. 보면μ λ λ§μλ릴κ²μ
There was a problem hiding this comment.
λ΅!! μ§κΈ λλ©μΈμ΄ νμν μν λ§ λ€κ³ μλμ§, ν μ€νΈκ° 보νΈν΄μΌν λ‘μ§μ μ κ²μ¦νλμ§μ μ§μ€ν΄μ ν λ² ν μ€νΈλ₯Ό μμ±ν΄λ³Όκ²μ!!
| } | ||
|
|
||
| public boolean isBlackjack() { | ||
| return handCards.getHandCardsSize() == 2 && getScore() == BLACKJACK_CONDITION; |
There was a problem hiding this comment.
λ§€μ§ λλ²λ₯Ό μ°κ³ μΆμ§ μμλλ°μ,,,,
'λΈλμμΈμ§ μλμ§ νλ μ΄μ΄κ° νλ¨νλ κ² λ§λ? κ²λ€κ° ν΄λΉ μμκ° BlackjackServiceμ μ΄λ―Έ μ μλμ΄ μλλ°, μ¬κΈ°μ ν΄μΌ ν μΌμ νλ μ΄μ΄κ° νκ³ μλ κ² μλκ°? κ·Έλ°λ° μ¬κΈ°μ μ΄ λ‘μ§μΌλ‘ λ°μΌλ‘ λΉΌλ©΄ λ€λ₯Έ κ³³μμ λ무 볡μ‘ν΄μ§λλ° μ½λ κ΅¬μ‘°κ° μ λ°μ μΌλ‘ μλͺ»λ κ±ΈκΉ?' λΌλ μκ°μ΄ λ€μ΄ 리뷰λ₯Ό λ°κ³ λμ λ°©ν₯μ±μ λ§κ² μμ νκ³ μΆμ΄μ μΌλ¨ λμμ΅λλ€...
There was a problem hiding this comment.
λ§€μ§λλ²λ₯Ό μ μ°λ©΄ μ λλμ§ νμ΅ν΄λ³΄μΈμ. νλκ° μλ λ€λ₯Έ κ°λ°μκ° μ΄ μ½λλ₯Ό λ΄€μ λ, "2κ° λμ§?" κ³ λ―Όνκ² λ§λ€ μ¬μ§κ° μμΌλ©΄ λ§€μ§λλ²μ λλ€.
ν΄λμ€ μμ κ°μ μμ‘΄μ λλ²μ§Έ λ¬Έμ μμ. μ¬λ¬ λλ©μΈμ μ€λ³΅ μ μ λλλΌλ κ°λ μ±μ λΆνΈμ μ£Όλ©΄ λ§€μ§λλ²λ₯Ό μ κ±°νλ κ² λ§μ΅λλ€.
μ λ μ€μ λ‘ λ³Έ λ©μλμ²λΌ λκ°λ΄λ λͺ
νν κ²½μ° (μ κ°μ 2κ°μ¬μΌλλꡬλ) μμν νμ§ μμμ.
λμ μλ―Έλ₯Ό λΆλͺ
νκ² νκΈ° μν΄ handCards.getHandCardsSize() == 2 μ체λ₯Ό λ©μλν ν κ±° κ°μμ (blackjackHandSizeCheck.. λμΆ© μ§μ λ©μλλͺ
μΈλ° μ΄λ° λλμΌλ‘μ.)
There was a problem hiding this comment.
μ¨μ§ μ½λ©νΈλ₯Ό λ³΄κ³ μ‘°κΈ μ°Ύμλ΄€λλ°μ, μ΄λ° μμΌλ‘ λ©μλλ₯Ό μ¨μ μ½λλ₯Ό μ’ λ κ°λ μ±μκ² λ§λ€ μ μλ¨ κ±Έ μ²μ μμμ΅λλ€. κ°μ¬ν©λλ€!
sihyung92
left a comment
There was a problem hiding this comment.
μλ νμΈμ νλ! λ¦¬λ·°μ΄ μ¨μ§μ λλ€
Q1. ν
μ€νΈ μ½λμ μ μ μ
A1. μ¬μ΄ν΄ 1 λ λ€λ₯Έ 리뷰μ΄μ μ½λ©νΈμμ ν
μ€νΈμ μ€μμ±μ λν΄ μκΈ°ν κ² μλλ°, λ§ν¬ 첨λΆν΄μ. 3λ²λ§ 보μ
μ
μ€μμ±μ κ·Έλ λ€ μΉλλΌλ, κ±°κΈ°μ λ€μ΄λ 곡μκ° κ³ λ―Όμ΄μ κ² κ°μλ°μ. ν μ€νΈλ aiνν μ΄μ 맑겨보μΈμ. (무쑰건 acceptνμ§ λ§μκ³ , κ²°κ³Όμ λν΄ κ°μ΄ 보면μ νμ΅ ν¨κ³Όλ₯Ό μΌμΌμΌλ³΄μΈμ)
Q2. λλ©μΈμ λλλ κΈ°μ€
A2. μ μμ§λλ₯Ό κΈ°μ€μΌλ‘ λ΄
λλ€. "μ΄ λ°μ΄ν°μ μ΄ λ‘μ§μ΄ νμ κ°μ΄ λ³κ²½λλκ°?"λ₯Ό 보μΈμ. κ°μ΄ λ³κ²½λλ€λ©΄ ν λλ©μΈ, λ°λ‘ λ³κ²½λλ€λ©΄ λΆλ¦¬ λμμ
λλ€. μμ§λλ κ²°ν©λ κ°μ κ°λ
μ λν΄μ κ³ λ―Όνκ³ κ³μ κ±Έλ‘ λ΄€μ΄μ. μ½μ΄λ΄λ μ λͺ¨λ₯΄κ² λ κ°λ
λ€μ λ무 νλ€κ² μ κ·Όνμ§ λ§μκ³ , λ³ΈμΈμ΄ μ΄ν΄κ° κ°λ₯ν λ²μ μΌλ‘ μ²μ²ν λ§λ€μ΄λ³΄μ
μ. (aiνν
μ΄ν΄κ° κ° λκΉμ§ κ³μ λλ¬Όμ΄λ³΄μΈμ.) μ½λλ κ²°κ΅ λ΄κ° λ©λν κ°λ
λ€λ§ λ
Ήμλ€μ΄κ°κ³ , μ΄ν΄ λͺ» νκ³ μ μ©ν ν¨ν΄μ λμ€μ 리ν©ν λ§ λμμΌλ‘ λμμ€κ±°λ μ.
ν μ€νΈ μ§λ³΄μκ³ λ€μ μμ²μ£ΌμΈμ~
src/main/java/domain/vo/Money.java
Outdated
|
|
||
| public class Money { | ||
| private static final int MIN_INCREMENT = 10_000; | ||
| private final int money; |
There was a problem hiding this comment.
λμ Intλ‘ λ€λ£¨κ³ κ³μ λ°μ, λμ λ€λ£¨λ λ° μ μ ν μλ£κ΅¬μ‘°λ₯Ό νμ΅νκ³ λ°κΏλ³΄μ μ.
There was a problem hiding this comment.
BigDecimalμ νμ©νλλ‘ μμ νκ² μ΅λλ€!
src/main/java/domain/vo/Money.java
Outdated
|
|
||
| private void validateMinIncrement(int value) { | ||
| if (value < MIN_INCREMENT || value % MIN_INCREMENT != 0){ | ||
| throw new IllegalArgumentException("[ERROR] " + MIN_INCREMENT+ "μ λ¨μμ¬μΌ νλ©°, μ΅μ κΈμ‘μ " + MIN_INCREMENT + "μ λλ€."); |
There was a problem hiding this comment.
μ€λ₯ νλΆν ν΄μ£ΌμΈμ (inputλ ν¨κ» λ‘κΉ )
λ³΄ν΅ μλ²λ¨μ μ€λ₯λ₯Ό νλ©΄λ¨κΉμ§ μΆλ ₯μν€λ κ²½μ°λ μ μκΈ΄ ν΄μμ. λμ€μ κ°λ©΄ κΆκ·Ήμ μΌλ‘λ μλ²κ°λ°μλ₯Ό μν λ‘κ·Έλ§ λ¨κΈ°κ² λ ν
λ°μ
(λͺ¨λ μ€λ₯ μ’
λ₯λ₯Ό νλ‘ νΈκ° μ μνλ 건 μ΄λ ΅κΈ° λλ¬Έμ λ·° λ¨μ μν μΆλ ₯μ© λ©μμ§λ₯Ό λ°λ‘ λ§λ€μ΄μ μ λ¬ν©λλ€.)
λ³Έ λ―Έμ μμ μ¬μ©μ μ μ₯μμ 보λλΌλ, ν₯ν μλ²κ°λ°μ λ‘κ·Έ μ μ₯μμ 보λλΌλ λ΄μ©μ΄ νλΆν μ€λ₯λ₯Ό μ μνλ 건 νμ λμλλ μΌμ λλ€
There was a problem hiding this comment.
λ‘κ·Έ μμΈνκ° λ²λ¦μ΄ μ λμ΄μ μκΎΈ λμΉλ€μ.. μ£Όμνκ² μ΅λλ€!!
| public Money calculateProfit(Player player) { | ||
| if (player.getWinStatus() == WinStatus.WIN && player.isBlackjack()) { | ||
| return new Money(bettingTable.get(player).getValueOf() * BLACKJACK_BONUS); | ||
| } | ||
|
|
||
| if (player.getWinStatus() == WinStatus.LOSS) { | ||
| return new Money(0); | ||
| } | ||
|
|
||
| return bettingTable.get(player); | ||
| } | ||
|
|
||
| public Money getDealerProfit() { | ||
| return new Money(bettingTable.values() | ||
| .stream() | ||
| .mapToInt(money -> money.getValueOf()) | ||
| .sum()); | ||
| } |
There was a problem hiding this comment.
ν
μ€νΈ ν κ² λ§λ€λ 건 if λΆκΈ°κ° λ§λ€λ λ»μ΄μ΄μ. λΆκΈ° νλ νλκ° κ°μΉμλμ§ κ²ν νμΈμ.
κ°μΉκ° μλ€λ©΄, 보νΈν΄μΌ λ λΉμ¦λμ€ λ‘μ§μ΄ λ§μΌλκΉ μ΄μ¬ν ν
μ€νΈνμλ©΄ λ©λλ€.
κ°μ²΄ λΆλ¦¬κ° μ λμ΄μμΌλ©΄ λ¨μν
μ€νΈλ₯Ό ν΅ν΄ κ·Έλ° λΆκΈ°λ€μ μ€μ¬λ³Ό μ μμ΄μ.
μμ»¨λ° Moneyμμ 1000μ λ¨μ validationμ μ ν΄μ£Όκ³ λκ³μ° ν λ κ°μ΄ νλ€κ³ νλ©΄,
10000μ + μΉλ¦¬μ‘°κ±΄ / 9999μ + μΉλ¦¬μ‘°κ±΄ / 10000μ + ν¨λ°°μ‘°κ±΄ / 9999μ + ν¨λ°°μ‘°κ±΄
μ΄λ κ² λΆκΈ°μ κ°μκ° μ§μμ μΌλ‘ μ¦κ°νκ² λ©λλ€.
μ΄κ² λ¨μμ μΌλ‘ μ λΆλ¦¬λμ΄ μμΌλ©΄ λΆκΈ°μκ° κ°μνκ² μ£ .
κΉμ΄κ° λ무 κΉμ΄μ§ λλ νΉμ λ©μλλ₯Ό νΈμΆνμ λ μ ν΄μ§ κ°μ λ°ννλλ‘ νλ κ°μ§ κ°μ²΄
μ΄κ² λλ©μΈ λ¨μ ν μ€νΈκ° μ λμ΄μμΌλ©΄ μμ°μ€λ½κ² μ€μ΄λ€μ΄μ. (νμ λ¨μ ν μ€νΈλ₯Ό λ―Ώκ³ μμμμ μ μ ν κ°μ μ§λ κ°μ²΄λ§ μ£Όμ )
μ΄μ¨λ "νΉμ λ©μλλ₯Ό νΈμΆνμ λ μ ν΄μ§ κ°μ λ°ννλλ‘ νλ κ°μ§ κ°μ²΄λ₯Ό λ§λ€μ΄ ν μ€νΈ" νμνλ€κ³ μκ°νμλ©΄ ꡬν ν 리뷰주μ μ. 보면μ λ λ§μλ릴κ²μ
| } | ||
|
|
||
| @ParameterizedTest | ||
| @ValueSource(strings = {"9999", "10001", "0", "-10000", "11000"}) |
There was a problem hiding this comment.
κ²½κ³κ° ν μ€νΈλ₯Ό μ μ§ν€κ³ κ³μλ€μ. μ΄λ° μ΅κ΄μ΄ 컀리μ΄μμ μ₯μ λ₯Ό νλ² λ§μμ£Όλ κ°λ¦Όλͺ©μ λλ€.
There was a problem hiding this comment.
κ°μ¬ν©λλ€π
νμ€ν κ²½κ³κ°μ΄λ λΆκΈ° κ°μ μ ν
μ€νΈ ν΄μΌνλ€λ κ±Έ μ΄λ² λ―Έμ
μ νλ©° λ§μ΄ λκΌμ΄μ
| } | ||
|
|
||
| public boolean isBlackjack() { | ||
| return handCards.getHandCardsSize() == 2 && getScore() == BLACKJACK_CONDITION; |
There was a problem hiding this comment.
λ§€μ§λλ²λ₯Ό μ μ°λ©΄ μ λλμ§ νμ΅ν΄λ³΄μΈμ. νλκ° μλ λ€λ₯Έ κ°λ°μκ° μ΄ μ½λλ₯Ό λ΄€μ λ, "2κ° λμ§?" κ³ λ―Όνκ² λ§λ€ μ¬μ§κ° μμΌλ©΄ λ§€μ§λλ²μ λλ€.
ν΄λμ€ μμ κ°μ μμ‘΄μ λλ²μ§Έ λ¬Έμ μμ. μ¬λ¬ λλ©μΈμ μ€λ³΅ μ μ λλλΌλ κ°λ μ±μ λΆνΈμ μ£Όλ©΄ λ§€μ§λλ²λ₯Ό μ κ±°νλ κ² λ§μ΅λλ€.
μ λ μ€μ λ‘ λ³Έ λ©μλμ²λΌ λκ°λ΄λ λͺ
νν κ²½μ° (μ κ°μ 2κ°μ¬μΌλλꡬλ) μμν νμ§ μμμ.
λμ μλ―Έλ₯Ό λΆλͺ
νκ² νκΈ° μν΄ handCards.getHandCardsSize() == 2 μ체λ₯Ό λ©μλν ν κ±° κ°μμ (blackjackHandSizeCheck.. λμΆ© μ§μ λ©μλλͺ
μΈλ° μ΄λ° λλμΌλ‘μ.)
There was a problem hiding this comment.
ꡬνμ²΄λ‘ μ¬μ©ν μΌμ΄ μλ κ°μ²΄μ¬μμ, abstractλ‘ μ²λ¦¬νμλ©΄ μ’κ² λ€μ. μ’μ μ½λλ μ©λλ‘λ§ μ¬μ©λκ² μ΅λν μ μ½νλ κ±°μ¬μμ
dto μ¬μ©μΌλ‘ μΈν μ λ ₯κ° λ³κ²½ mockito μμ κΈ°ν λ³κ²½
NameμΌλ‘ Playerλ₯Ό μ°Ύλ λ©μλ μΆκ°
| private final Name playerName = new Name("ν μ€νΈ"); | ||
| private BettingTable bettingTable; |
There was a problem hiding this comment.
μλ mockitoλ₯Ό μ¬μ©νμμΌλ, λ² ν κ³μ° λ©μλμμ dtoλ₯Ό λ°κ² λλ©΄μ (κΈ°μ‘΄μλ Name, WinStatus, boolean(isblackjackμ λ°μμμ) μ¬μ©ν νμκ° μμ΄μ Έ μμ νμμ΅λλ€!
|
μλ νμΈμ μ¨μ§! μ λ°μ μΈ λ¦¬ν©ν λ§λ ν¨κ» νκ³ , ν μ€νΈλ₯Ό μ§λ©° μ λ°μ μΌλ‘ μ½λλ₯Ό μ κ²νλ€λ³΄λ μμ ν λ‘μ§λ λͺ μμ΄μ λ¦μ΄μ§κ² λμμ΅λλ€.... μ²μμλ mockitoλ₯Ό μ¬μ©ν΄μ ν μ€νΈλ₯Ό μμ±νμλλ°μ, ν μ€νΈ μμ± μ체λ λΆνΈνμ§λ§, λ‘μ§ μ체λ μ΄κ² μ κ² μ°κ²°λ κ² λ§μ 리ν©ν λ§ λμμ΄λΌκ³ μκ°ν΄μ ꡬ쑰λ₯Ό μμ νμ΄μ. κΈ°μ‘΄μ Name, Winstatus, isBlackjackμ λ§€κ°λ³μλ‘ λ°μ λ² ν κ²°κ³Όλ₯Ό κ³μ°νλλ°, μ¬λ¬λͺ¨λ‘ λΆνμνκ² μ½ν μλ€κ³ μκ°ν΄μ(winstatusλ isBlackjack λ€ λ¬΄μΈκ°λ‘λΆν° ꡬν΄μΌ νλ κ°) dtoλ₯Ό μ¬μ©ν΄ μμ κ°μ serviceμμ ν λ²μ λ΄μ μ λ¬νλ κ²μΌλ‘ λ°κΏ¨μ΄μ. μ΄λ² 리ν©ν λ§μ νλ©΄μ μμ§λμ λν΄μ μ’ κ³ λ―Όμ νκ³ , κ°μ²΄κ° μλ‘λ₯Ό λͺ¨λ₯Έλ€λ κ² μ΄λ€ μλ―ΈμΈμ§ μ‘°κΈμ μκ² λ κ² κ°μ΅λλ€. μμ μ μ¨μ§κ° μ‘°μΈν΄μ€¬λ κ²μ²λΌ PlayerManagerλ₯Ό μμ νκ³ Playerλ₯Ό μμ BlackjackGame μλλ‘ μ¨κ²Όμ΄μ. λ λ μΉ΄λ‘κ³ λ°λ»νκ² λ¦¬λ·°ν΄μ£Όμ μ κ°μ¬ν©λλ€! μ§§μ μκ°μΈλ°λ λ§μ΄ λ°°μκ°κ³ μμ΄μ. |
sihyung92
left a comment
There was a problem hiding this comment.
μλ νμΈμ νλ, λ¦¬λ·°μ΄ μ¨μ§μμ.
μ¬λ¬κ°μ§ κ³ λ―Όνκ³ λ°μν΄μ£Όμ νμ μ΄ λ³΄μ΄λ€μ. 리ν©ν λ§μ μꡬνλ 리뷰λ₯Ό λλ Έλλ°, νλ² λ°μν΄λ³΄μκ³ μ΄λ €μμ΄ μμΌλ©΄ νΈν μ§λ¬Έμ£Όμ μ.
|
|
||
| public Money getDealerProfit() { | ||
| return bettingTable.getDealerProfit(); | ||
| public DealerResultDto getDealerResult() { |
There was a problem hiding this comment.
getDealerResultλ getPlayerResultInfosλ νμκ° μλλ°μ,
getterκ° κ°μ§λ κ°λ ₯ν κ³ μ κ΄λ
λλΆμ νμκ° μμ λ get μΈμ λ€λ₯Έ λμ¬ μ¬μ©μ κ²ν ν΄λ³΄μΈμ.
getPlayerInfos, getPlayerInfoμ λΉκ΅ν΄λ³΄λ©΄ λ§μ λΉμ¦λμ€ λ‘μ§μ΄ ν¬ν¨λμ΄ μμΌλκΉμ.
| import domain.vo.Name; | ||
|
|
||
| public class ResultForBettingDto { | ||
| private final Name name; |
There was a problem hiding this comment.
μ΄λμλ String nameμΌλ‘, μ΄λμλ Name nameμΌλ‘ dtoκ° κ·μΉμ΄ λ€λ₯Έλ°μ
νλμ λ°©ν₯μΌλ‘ ν΅μΌν΄μ£Όμ
μ (λ€λ₯Έ 리뷰λ₯Ό λ°μνλ©΄ μ¬λΌμ§ κ°μ²΄μ
λλ€λ§)
| bettingTable.put(name, money); | ||
| } | ||
|
|
||
| public Money calculateProfit(ResultForBettingDto dto) { |
There was a problem hiding this comment.
μλ‘ λ€λ₯Έ λ μ΄μ΄λ₯Ό 건λκ° λ DataTransferObject, DTOλ₯Ό μ°λλ°μ
μλ₯Όλ€μ΄ λλ©μΈ <-> λ·°, λλ©μΈ <-> DB λ± μλ‘ λ€λ₯Έ λ μ΄μ΄λ μμ£Ό λ¨Ό μ¬μ΄μ λλ©μΈλΌλ¦¬ μ°λ κ·μΉμ΄μμ
service λ μ΄μ΄ μμͺ½ μ λλ λλ©μΈ λΌλ¦¬μ 곡κ°μΌλ‘ λ΄μ κ΅³μ΄ dtoλ‘ λ³νν΄ λ°μ νμλ μμ κ² κ°λ€μ. μν κ·Έλλ‘μ Player, Dealerλ₯Ό λ°μ μ²λ¦¬νλλ‘ ν΄λ³΄μ μ.
|
|
||
| public class BettingTable { | ||
| private static final double BLACKJACK_BONUS = 1.5; | ||
| private final Map<Name, Money> bettingTable = new HashMap<>(); |
There was a problem hiding this comment.
Player κ°μ²΄μμ eqauls&hashcodeλ₯Ό ꡬννκ³ , "Name"μ κΈ°μ€μΌλ‘ νκ² νλ©΄ Playerλ₯Ό ν€λ‘ λ°μ΄ν°λ₯Ό λ½μ μ μκ² μ£
| for (Player player : playerManager.getPlayers()) { | ||
| blackjackService.dealPlayerCardsOut(player); | ||
| private void askBettingMoney() { | ||
| for (Name name : names) { |
There was a problem hiding this comment.
PlayerλΌλ κ°μ²΄ λμ NameμΈ voκ° λ€μν κ°μ²΄μ κ΄κ³ λ§Ίλ 건 μ΄μν΄μμ,
Playerλ‘ λ€μ λ‘μ§μ μ κ°νκ² λ¦¬ν©ν λ§ ν΄λ³΄μμ£ .
Playerμ μμ 보μ¬μ€μλ‘ Playerμ νμλ₯Ό μμ ν λ λ°λ‘ κ³ μ³μΌ νλ λΆλΆμ΄ λ§μμ§λλ€. μΊ‘μνκ° μ£Όλ κ°μΉμ£
νμν κ³³μμλ§ getNameμ ν΄μ μ νμ μΌλ‘ Nameμ μ μ μκ² ν΄μ£Όμ
μ.
κ·Έλ¦¬κ³ κΈ°μ‘΄ λ‘μ§κ³Ό νμ¬ λ‘μ§μ μλ, 컨νΈλ‘€λ¬κ° playerManager νΉμ namesλ₯Ό νλλ‘ λ€κ³ μλ λμ μ μ΄λ―Έ ν΄λΉ λ°μ΄ν°λ₯Ό κ°μ§κ³ μλ BlackjackServiceλ‘λΆν° μ μ λͺ©λ‘μ λ°μμ€μμ£ . (μ ννλ BlackjackGameμ΄μ£ )
| import java.util.stream.Collectors; | ||
|
|
||
| public class GameController { | ||
| private final BlackjackService blackjackService; |
There was a problem hiding this comment.
μ λ BlackjackServiceκ° ν΄μΌνλ μν μ controllerκ° νκ³ μκΈ° λλ¬Έμ, (μ΄λκ° "μ μ°¨" κ° νμν λ μμλ₯Ό μ§μ νλ μν ) μμ Serviceλ μ κ±°νκ³ BlackjackGameκ³Ό BettingTableμ μ§μ μμ‘΄νμ¬ κ°μ²΄κ°μ νλ ₯λ§ νμΌλ©΄ μ΄λ¨κΉ ν©λλ€.
view νμμ κ°νκ² μμ‘΄λ°λ (inputμ λ°μΌλ €λ©΄ wait ν΄μΌλ¨) νμ¬ λ―Έμ
μμ μλΉμ€ μ½λκ° μλ―Έλ₯Ό κ°μ§κΈ° νλ€μ΄μμ
| testImplementation('org.mockito:mockito-core:5.5.0') | ||
| testImplementation('org.mockito:mockito-junit-jupiter:5.5.0') |
There was a problem hiding this comment.
λ―Έμ¬μ©νκ² λ μμ‘΄μ±μ μ κ±°ν΄μ£ΌμΈμ!
|
|
||
| import static org.assertj.core.api.Assertions.assertThat; | ||
|
|
||
| class BettingTableTest { |
There was a problem hiding this comment.
μν, BettingTableTestμμ card, player, dealerμ stubμ λͺ¨λ λ§λ€μ΄μΌ ν μ€νΈ ν μ μμ΄μ μ΄λ €μμ λλΌμ ¨κ΅°μ. stub λ§λλ κ² νμ κ³ μμ΄κ³ νμ΅ λ¨μμ λ―Έμ λ³΄λ€ ν¨μ¬ λ§μ νλλ₯Ό λ€λ£¨λ νμ μ νΉν λ κ·Έλ μ΅λλ€.
리뷰 λ°μνλ©΄μ μ°μ΅νλ€ μΉκ³ νλ² ν΄λ³΄μ μ. ν μ€νΈ μ½λλ₯Ό λ§λλ κ²λ νλ‘λμ κ³Ό λΉμ·ν©λλ€. λ°λ³΅λλ μμλ λ©μλλ‘ μΆμΆνκ³ , κ°λ μ± μ’κ² μμ±νλ€ λ³΄λ©΄ μκ°λ³΄λ€ μμ£Ό νλ€μ§λ μμ΅λλ€
μλ² λ¦¬λ·°μμ² μ£Όμ€ λ μμ§λλ κ·Έλλ‘λ©΄μ, κ²°ν©λλ λμμ‘μ΄μ.
BettingTableμ΄ νλ μν μ체λ λ¬λΌμ§ κ² μμΌλ, Playerμ Dealerμ Name, WinStatusλΌλ μμΈ κ΅¬νμ μ§μ νλΌλ―Έν°λ‘ λ°μ μ²λ¦¬ν΄μΌλ§ νμΌλκΉμ
"ν μ€νΈνκΈ° νΈν μ½λ", "ν μ€νΈκ° μ©μ΄ν μ½λ"λ₯Ό λ§λ€λΌκ³ νλ 건 "νμ΄ λ λλ", "μ§κΈ° μ¬μ΄", "κΈλ°© μ§€ μ μλ" ν μ€νΈλ₯Ό λ§λ€λΌλ λ§μ΄ μλμμ.
λ¨μ μμ€μ ν μ€νΈλ₯Ό ꡬνν μ μκ³ , λ‘μ§μ΄ κ°μ§κ³ μλ κ° λΆκΈ°μ λν ν μ€νΈλ₯Ό λμΉμ§ μκ³ ν μ μλ ν μ€νΈλ₯Ό λ§λ€λΌλ λ»μ΄μ΄μ.
μλ₯Όλ€μ΄ "GameControllerμ λ©μλ νλμμ λͺ¨λ μ½λλ₯Ό ꡬννμμ€"λΌλ μꡬμ¬νμ΄μμΌλ©΄, ν΄λΉ λ©μλκ° μ 곡νλ λͺ¨λ κΈ°λ₯μ ν μ€νΈνλ κ² λΆκ°λ₯νλ€ μΆμ μ λ μμκ±°μμ.
ν μ€νΈ μ½λλ κ°λ°μ ꡬλ ν μ€νΈμ μλνμμ. μ΄ ν μ€νΈ μ½λκ° μμΌλ©΄ λ§€λ² μλ²λ₯Ό λΉλνκ³ , inputμΌλ‘ μ¬λ¬κ°μ§λ₯Ό μ λ ₯ν΄λ΄μΌ ν΄μ. λ―Έμ λ¨μμμ μ λλ κΈ°λ₯ νλκ° μ€ν¨ν΄λ μ무 μΌ μμ§λ§, νμ μμλ κ³ κ°μκ² κΈμ μΌλ‘ 보μν΄μΌνλ ν° μΌ μΌμλ μμ΄μ. κ·Έλ¦¬κ³ νμ μ₯μ λ "μλ‘ κ΅¬νν λΆλΆ"μμ λμ§ μκ³ "μμμΉ λͺ»ν μ¬μ΄λμ΄ννΈλ‘ μΈν κΈ°μ‘΄ κΈ°λ₯μ μ€ν¨"λ‘ λλλΌκ΅¬μ. λ§€λ² κΈ°μ‘΄μ λλ κ²½μ°λ₯Ό νμΈν΄μ£Όλ κ² ν μ€νΈμ΄λ, λΉμ₯ ꡬνλ¨κ³μμ ν μ€νΈ μ§λ κ² μ΄λ €μλ ν₯ν 1λ 300λ²μ μλ² λΉλμ ꡬλ ν μκ°μ μλλ€λ κ°λ μΌλ‘ λ³΄κ³ κ³΅μ λ€μ¬λ³΄μ μ.
service λ μ΄μ΄ μμ λ΄λΆ λΉμ¦λμ€ λ‘μ§μμ dto λμ Playerλ Dealerλ₯Ό μ§μ μ°Έμ‘°νλλ‘ λ³κ²½
μ²΄ν¬ λ¦¬μ€νΈ
testλ₯Ό μ€ννμ λ, λͺ¨λ ν μ€νΈκ° μ μμ μΌλ‘ ν΅κ³Όνλμ?μ΄λ€ λΆλΆμ μ§μ€νμ¬ λ¦¬λ·°ν΄μΌ ν κΉμ?