[π μ¬μ΄ν΄2 - λ―Έμ (λΈλμ λ² ν )] λ‘μ΄ λ―Έμ μ μΆν©λλ€.#1115
[π μ¬μ΄ν΄2 - λ―Έμ
(λΈλμ λ² ν
)] λ‘μ΄ λ―Έμ
μ μΆν©λλ€.#1115yItWorks wants to merge 15 commits intowoowacourse:yitworksfrom
Conversation
| public static final String DEALER_NICKNAME = "λλ¬"; | ||
|
|
||
| private final Trump trump; | ||
| private final Name nickname; |
There was a problem hiding this comment.
λλ¬ μ΄λ¦μ νμ 'λλ¬'μΈλ° λ°λ‘ νλλ‘ κ°μ§ νμκ° μμκΉμ?
| @@ -0,0 +1,5 @@ | |||
| package blackjack.domain.participant; | |||
|
|
|||
| public interface Name { | |||
There was a problem hiding this comment.
toString() λ©μλλ λͺ¨λ Object ν΄λμ€μ μ΄λ―Έ μ μΈλμ΄ μμ΄μ. μ΄ μΈν°νμ΄μ€λ μλ¬΄λ° κ°μ μ¬νλ μμ΄λ³΄μ¬μ, μ΄λ€ ν΄λμ€λ λ³λμ λ©μλλ₯Ό μμ±νμ§ μκ³ λ μ΄ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μμ΅λλ€
| @@ -0,0 +1,24 @@ | |||
| package blackjack.domain.participant; | |||
|
|
|||
| public class Nickname implements Name{ | |||
There was a problem hiding this comment.
BettingMoneyInfoλ Map<Name, BettingMoney>λ₯Ό μ μ₯νκ³ Name ν€λ₯Ό μ¬μ©νμ¬ κ°μ μ‘°ννμ§λ§ Nicknameμ equals() λλ hashCode()λ₯Ό μ¬μ μνμ§ μμΌλ―λ‘ μ°Έμ‘° λλ±μ±μΌλ‘ λ체λ©λλ€.
e.g) μλ‘μ΄ Nickname("pobi") != κΈ°μ‘΄ Nickname("pobi")
| public void decideHit() { | ||
| int totalScore = hand.calculateScore(); | ||
| int totalScore = getScore(); | ||
| if (totalScore > DEALER_HIT_THRESHOLD) { |
There was a problem hiding this comment.
method name μ΄ νλκ³Ό μΌμΉνμ§ μλκ±°κ°μμ. decideStay() λ₯Ό νμΈνλ κ² μ²λΌ 보μ λλ€!
| public List<String> getOpenCardNames() { | ||
| final int holeIndex = 1; | ||
| return hand.getCardNames(holeIndex); | ||
| return getCardNames(holeIndex); |
There was a problem hiding this comment.
Handλ μΉ΄λλ₯Ό 건λλ°λ €λ μ΄μ μ λν΄μλ μ ν μ νμκ° μλ€κ³ μκ°ν΄μ.
startInclusive λ§€κ°λ³μλ μ€μ§ λλ¬μ νΉμ κ·μΉ, μ¦ νλ μΉ΄λ λλ¬Έμ μ‘΄μ¬ν©λλ€. κ·Έλ λ€λ©΄ Hand μ λ©μλλ₯Ό μ€λ²λ‘λ©νλ κ² λ³΄λ€ μμ λλ¬μ λ‘μ§μ ꡬννλ κ²μ μ΄λ¨κΉμ?
public List<String> getOpenCardNames() {
List<String> all = getCardNames();
return all.subList(1, all.size()); // dealer's own concern
}
| .mapToDouble(money -> -money) | ||
| .sum(); | ||
| } | ||
|
|
There was a problem hiding this comment.
π’ νμΌ ν¬λ§·ν νμΈν΄μ£ΌμΈμ
There was a problem hiding this comment.
μλ νμΈμ λ‘μ΄!
2λ¨κ³ μ ꡬνν΄μ£Όμ
¨λ€μ πΈ
μ½λ©νΈ νμΈν΄μ£ΌμΈμ! (λ€λ₯Έ μ§λ¬Έλ€μ μ½λ 리뷰 μ½λ©νΈλ₯Ό νμΈν΄μ£ΌμΈμ)
λ¨μν μμκ° νλλ₯Ό μν΄ μΈν°νμ΄μ€λ₯Ό λμ νλ κ²μ΄ μ€λ² μμ§λμ΄λ§μ΄ μλμ§, μ€λ¬΄μμλ λΉμ·νκ² νμ©νλμ§ κΆκΈν©λλ€.
νμ¬ 'Name' interface λλ¬Έμ μλ° κ³ λ―Όμ΄ λμ¨κ±° κ°μμ. κ·Έλ°λ° μκ°ν΄λ³΄λ©΄ μΈν°νμ΄μ€λ λ³΄ν΅ 'νμ' λ₯Ό μΆμννλλ° μ¬μ©λμ§λ§ Name μ 'μν(Data/Value)' μ κ°κΉκΈ° λλ¬Έμ νΌλμ΄ μ¨ κ²μ΄λΌκ³ μκ°ν΄μ. μ΄λ° κ°λ€μ VO λ₯Ό μ¬μ©ν΄μ μ ν¨μ± κ²μ¦μ νλ λ°©μμ΄ μΌλ°μ μΈ λ°©λ² κ°λ€κ³ μκ°ν©λλ€.
μμ΅κΈμ λν΄μ ν΄λμ€λ₯Ό μμ±νμ§ μκ³ μμκ°μΈ Doubleλ‘ μ²λ¦¬νλλ‘ νμμ΅λλ€. μμ΅κΈμ κ²μ κ²°κ³Όμ λ°λΌ λ°°ν κΈμ‘μ ν©μ°νλ μν λ§ νλ€κ³ μκ°νμ¬ κ°μ²΄λ₯Ό λ§λ€μ§ μκ³ μ§ννμμ΅λλ€. λͺ¨λ μμκ°μ ν¬μ₯νλ κ²μ΄ κ³Όμ° μ’μ κ²μΈμ§ κΆκΈν©λλ€.
λͺ¨λ μμκ°μ ν¬μ₯ν΄μΌ νλ€λ κ°λ°μ κ°μ§ νμλ μμ΅λλ€. νΉλ³ν μ ν¨μ± κ²μ¦μ΄λ νμκ° μλ€λ©΄μ.
νμ§λ§ λ, λ¨μ, μλ³μ, μ’ν λ±μ VO λ‘ ν¬μ₯νμλ κ°μ§λ μ΄μ μ΄ λ§€μ° ν½λλ€. μλ₯Ό λ€λ©΄ λμ double λ‘ κ΄λ¦¬νλ©΄ λΆλμμμ μ€μ°¨κ° μκΈΈμ μμ΄μ BigDecimal μ μ¬μ©ν΄μ. λ νμ¬ λλ¬μ μμ΅μ κ³μ°νκΈ° μν΄ -money μ²λΌ λ§μ΄λμ€λ₯Ό λΆμ΄κ±°λ κΈμ‘ κ³μ° λ‘μ§ μμ§λλ₯Ό μν΄μ ν¬μ₯νλ κ²μ΄ μμ ν κ±° κ°μμ.
TDD μ λν΄μ
TDD λΌκ³ ν΄μ ν
μ€νΈλΆν° 무μμ μμ±ν μλ μμΌλ λλ΅μ μΈ μ€κ³, λλ©μΈμ λ¨Έλ¦Ώμμ κ·Έλ €λ³΄λ 건 λΉμ°νλ€κ³ μκ°ν΄μ. μ€κ³κ° λ°λμ΄μ ν
μ€νΈλ₯Ό κ³ μΉκ² λλ κ²μ μ΄λ° μ€κ³ κ³ μΉλ λ°©ν₯λλ κ·Έλ΄μ μμ§λ§ κ³μν΄μ λ°μνλ€λ©΄ μ κ³ μΉκ² λλ κ²μΈμ§, λ΄ ν
μ€νΈκ° 'νμ'λ₯Ό μ ν
μ€νΈνκ³ μλ κ²μΈμ§ νμΈν΄λ³Ό νμμ±μ μλ€κ³ λ΄μ. μ§κΈμ 첫 λ―Έμ
μ΄κ³ λ¨κ³λ³λ‘ μꡬμ¬νμ΄ μλ‘ μΆκ°λμ΄μ 리ν©ν°λ§μ νμλ TDD κ° μ£Όλ μμ κ°μ λλΌκΈ°μ λ무 μ΄λ°μΈ κ² κ°μλ° μ λ λ―Έμ
μ§ννλ©΄μ λκ»΄λ³Έ μ μ΄ λ§μμ λ‘μ΄λ νλ² μ°ν
μ½ μ§ννλ©΄μ 체κ°ν΄λ³΄μ
¨μΌλ©΄ νλ λ°λμ
λλ€..π
μ§κΈ μΌνλ©΄μλ κΈ°μ‘΄ μ½λμ μ½λλ₯Ό λ§λΆμ΄λ μΌλ€μ΄ λ§κΈ° λλ¬Έμ μ¬μ€ ν
μ€νΈ μ½λλΆν° λ¨Όμ μ§λ κ²½μ°λ κ·Ήν λλ¬Όμ΄μ. νμ§λ§ μ΄λ»κ² μ§€μ§ μμ κ°μ΄ μμ‘νλ, input, output μκ°νκ³ ν
μ€νΈμ½λλΆν° μ§°λ μ μ΄ λλ¬Όκ² μμκΈ΄ ν©λλ€!
μλ νμΈμ, μ λ! λ‘μ΄μ λλ€.
μ΄λ² 리뷰λ μ λΆνλ립λλ€!
μ²΄ν¬ λ¦¬μ€νΈ
testλ₯Ό μ€ννμ λ, λͺ¨λ ν μ€νΈκ° μ μμ μΌλ‘ ν΅κ³Όνλμ?μ΄λ€ λΆλΆμ μ§μ€νμ¬ λ¦¬λ·°ν΄μΌ ν κΉμ?
1. μΊ‘μν
handλ₯Ό privateλ‘ λ°κΎΈλ κ²μ΄ μΊ‘μνμ λ ν¨κ³Όμ μ΄λΌλ 리뷰λ₯Ό λ°κ³ , handμ μ κ·Όμ νμλ₯Ό protectedμμ privateλ‘ λ°κΎΈλ©° Dealer ν΄λμ€μμ handλ₯Ό μ§μ μ¬μ©νλ λ°©μμ μ½λλ₯Ό λ°κΎΈλ©΄μ λ¬Έμ κ° λ°μνμλ λΆλΆμ λ λΆλΆμ΄μμ΅λλ€.
νμμ κ²½μ° μ‘°μΈμ£Όμ λλ‘ getScore()λ₯Ό ν΅ν΄ ν΄κ²°νμμ§λ§ μ μμ κ²½μ° indexλ₯Ό λλ¬λ§ μκ³ μλ κ²μ΄ λ°λμ§νλ€κ³ μκ°ν΄μ κ³ λ―Όμ νμμ΅λλ€. getCardNames()λ₯Ό μ€λ²λ‘λ©ν΄μ ν΄κ²°νμλλ° μ¬λ°λ₯Έ ν΄κ²° λ°©λ²μΈμ§ κΆκΈν©λλ€.
2. μμκ°μ λνμ¬
2-1.
μ΄λ¦μ μμκ°μΈ StringμΌλ‘ λμ§ μκ³ Nickname ν΄λμ€λ₯Ό λ§λ€μ΄ μ²λ¦¬νλ κ³Όμ μμ λ¬Έμ κ° λ°μνμμ΅λλ€. μ κ° μ ν κ·μΉμ μ΄λ¦ μ λ ₯ μ, 4~10μλ§ μ λ ₯λλλ‘ νλ κ²μ΄μλλ°, λλ¬λ μ΄λ¦μ΄ 2κΈμλΌλ μ μ΄μμ΅λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ Nickname ν΄λμ€μμ βλλ¬β λ§ μμΈλ‘ λκΈ°λ³΄λ€ Name μΈν°νμ΄μ€λ₯Ό λκ³ Nicknameκ³Ό DealerNameμΌλ‘ λΆλ¦¬νμ΅λλ€.
λ¨μν μμκ° νλλ₯Ό μν΄ μΈν°νμ΄μ€λ₯Ό λμ νλ κ²μ΄ μ€λ² μμ§λμ΄λ§μ΄ μλμ§, μ€λ¬΄μμλ λΉμ·νκ² νμ©νλμ§ κΆκΈν©λλ€.
2-2.
μμ΅κΈμ λν΄μ ν΄λμ€λ₯Ό μμ±νμ§ μκ³ μμκ°μΈ Doubleλ‘ μ²λ¦¬νλλ‘ νμμ΅λλ€. μμ΅κΈμ κ²μ κ²°κ³Όμ λ°λΌ λ°°ν κΈμ‘μ ν©μ°νλ μν λ§ νλ€κ³ μκ°νμ¬ κ°μ²΄λ₯Ό λ§λ€μ§ μκ³ μ§ννμμ΅λλ€. λͺ¨λ μμκ°μ ν¬μ₯νλ κ²μ΄ κ³Όμ° μ’μ κ²μΈμ§ κΆκΈν©λλ€.
3. TDDμ λνμ¬
TDDλ‘ κ°λ°νλ €λ©΄ ν μ€νΈλ₯Ό λ¨Όμ ꡬννκ³ κ°λ°μ μμνλ€κ³ μκ°ν©λλ€.
ν μ€νΈ ꡬν μ, μ΄λ€ λ©μλκ° νμνμ§λ λλ©μΈμ΄ μ΄λ»κ² μκ²Όλμ§ λλ΅ μ€κ³λ₯Ό λ¨Όμ νκ³ ν μ€νΈλ₯Ό μμ±νλ κ²½μ°κ° λ§μμ μ¬μ€ μ΄κ² TDDκ° λ§λμ§μ λν κ³ λ―Όμ΄ λ§μμ΅λλ€.
μ κ° λλΌκΈ°μλ μ½λλ§ μμ±νμ§ μμ λΏμ΄μ§ μ€κ³λ₯Ό νκ³ ν μ€νΈλ₯Ό μμ±νλ κ±° κ°μμ μ½λ μμ± μμλ§ νμμ λ°λλ‘ νλ κ² κ°λ€λ μκ°μ΄ λ€μ΄μ κ³Όμ° ν¨κ³Όμ μΈ λ°©λ²μΈμ§ κ³μ μ΄ λ°©λ²μ μ¬μ©ν΄μΌ ν μ§ κ³ λ―Όμ λλ€.
μ¬μ§μ΄ μ½λ μμ± μ€ μ΄κΈ° μ€κ³μμ μμ νκ³ μΆμ λΆλΆμ΄ μκΈ°λ©΄ ν μ€νΈλ₯Ό κ³ μΉκ² λλ μκ°μ΄ μ겨 TDDλ‘ μ νκ³ μλ κ²μΈμ§ νμ λλμ΄κ² λμμ΅λλ€.
리뷰μ΄λμ΄ μκ°νμλ TDDλ 무μμΈμ§, μ κ° νμ¬ νκ³ μλ λ°©λ²μ΄ λ§λ κ²μΈμ§, κ³Όμ° κΌ νμν κ² μΈμ§, μ€λ¬΄μμλ μμ£Ό μ¬μ©νλμ§ κΆκΈν©λλ€.