TDD, ν΄λ¦° μ½λ with Java (λ―Έμ 2. λ‘λ - TDD)
μ§λλ² λ―Έμ 1. μλμ°¨ κ²½μ£Ό - λ¨μ ν μ€νΈλ₯Ό μ§ννκ³ , μ΄μ΄μ λ―Έμ 2. λ‘λλ₯Ό μ§ννμ΅λλ€.
λ―Έμ 1보λ€λ λΉ λ₯΄κ² μ§ννμ§λ§, λͺ¨λ λ―Έμ μ λλ΄κΈ° μν΄μλ μ‘°κΈ λ μλλ₯Ό λ΄μΌκ² λ€μ... π
1λ¨κ³ - λ¬Έμμ΄ μ€μ΅
1λ¨κ³λ κ°λ¨ν λ¬Έμμ΄ μ¬μΉ μ°μ° κ³μ°κΈ°λ₯Ό ꡬννλ λ―Έμ μ λλ€.
- μλ₯Ό λ€μ΄ 2 + 3 * 4 / 2μ κ°μ λ¬Έμμ΄μ μ λ ₯ν κ²½μ° 2 + 3 * 4 / 2 μ€ν κ²°κ³ΌμΈ 10μ μΆλ ₯ν΄μΌ ν©λλ€.
νμΌ λμλ κ°νμ μΆκ°νμ
μλ λ§ν¬λ₯Ό μ°Έκ³ ν΄ λ³΄λ©΄ κ°νμ νλμ νμ μ μνλ νμ€μΌλ‘ κ°νμ΄ μλ€λ©΄ λλμ§ μμ νμΌλ‘ κ°μ£ΌνκΈ° λλ¬Έμ νμΌμ λμλ κ°νμ μΆκ°νλ κ²μ΄ μ’λ€κ³ ν©λλ€.
κ·Έλμ νμΌ λμ κ°νμ μΆκ°νλ κ²μ 무μ¬μ½ νμλλ°, μ΄λ² κΈ°νμ μ νν μμΈμ μ μ μμμ΅λλ€.
μ 체 λ¬Έμμ΄μ μ λ ₯λ°μμ κ³μ°
ν μ€νΈνλ €λ μμμ΄ κΈΈμ΄μ§λ©΄ ν΄λΉ ν μ€νΈ ν΄λμ€μ λΌμΈλ μ μ κΈΈμ΄μ§ κ² κ°μλ°μ, 2 + 3 * 4 / 2λ₯Ό μ λ¬νμ λ 10μ΄ μ λμ€λμ§ ν λμ λ³Ό μ μλλ‘ κ°μ ν΄λ³΄λ©΄ μ΄λ¨κΉμ?
μ΅μ΄ μ£Όμ΄μ§ λ¬Έμμ΄μΈ 2 + 3 * 4 / 2 μ κ²μ¦νκΈ° μν΄ ν μ€νΈ μ½λμμ νλμ© κ³μ°νμ¬ κ²μ¦νλ μ½λλ₯Ό μμ±μ νμμ΅λλ€.
νμ§λ§, μ 리뷰μ²λΌ μμμ΄ κΈΈμ΄μ§λ€λ©΄ ν μ€νΈ μ½λ λν κΈΈμ΄μ§ μ μκΈ°μ μ λ ₯λ°μ λ¬Έμμ΄ μ체λ₯Ό κ³μ°ν μ μλ λ°©μμΌλ‘ κ°μ ν΄λ μ’μ κ² κ°μ΅λλ€.
2λ¨κ³ - λ‘λ(μλ)
2λ¨κ³μ μꡬμ¬νμ 본격μ μΌλ‘ λ‘λλ₯Ό ꡬννλ κ³Όμ μΌλ‘ λ‘λ ꡬμ κΈμ‘μ μ λ ₯λ°κ³ , μλμΌλ‘ ꡬ맀νλ©°, λ‘λ λΉμ²¨ λ²νΈλ₯Ό μ λ ₯λ°μ ν λΉμ²¨ ν΅κ³λ₯Ό μΆλ ₯νκΈ°μ λλ€.
λ‘λ λΉμ²¨μ μνλ₯Ό κ°μ ΈμΌ ν κΉ? μνλ₯Ό λ³κ²½ν μ μλ κ² λ§μκΉ?
λ―Έμ μ μ§ννλ©΄μ μ΅μ΄μ κ³ λ €νλ λ°©μμ μ μ΄λ―Έμ§μ²λΌ LottoTicketμ΄ Lotto, LottoPrizeλ₯Ό νλλ‘ κ°μ§λ λ°©μμ΄μμ΅λλ€.
LottoPrizeλ₯Ό μνλ‘ μ μ§ν΄μΌ ν νμκ° μμμ§ κ³ λ―Όν΄λ³΄μλ©΄ μ’μ κ² κ°μμ. ꡬ맀ν λ‘λμ λΉμ²¨ λ²νΈλ₯Ό κ°λ λ‘λλ₯Ό λΉκ΅ν΄μ μ»μ΄μ§λ κ²°κ³Όλ¬Όλ‘ μμ±λμ΄λ μΆ©λΆνμ§ μμκΉμ? λν changeLottoPrizeStatus()μ κ°μ setter λ©μλκ° publicμΌλ‘ μ΄λ € μλ μνλΌλ©΄ μΈλΆμμ μ½κ² λΉμ²¨ μνλ₯Ό λ³κ²½ν μ μλ λ¬Έμ μ λ μμ κ² κ°λ€μ.
νμ§λ§ μ μ½λμ²λΌ LottoTicketμλ μνλ₯Ό λ³κ²½νλ(setter) λ©μλκ° μ‘΄μ¬νκ³ , κ²°κ΅ μ΄λ¬ν λ©μλκ° public μ΄λ©΄ (리뷰μ²λΌ) μΈλΆμμ λΉμ²¨ μνλ₯Ό μ‘°μν μ μλ λ¬Έμ μ μ΄ μ‘΄μ¬ν©λλ€.
λ‘λλ₯Ό ꡬ맀ν ν λΉμ²¨ λ²νΈλ₯Ό μ λ ₯λ°κΈ° λλ¬Έμ λ‘λλ₯Ό λ°κΈλ°μμ λ λΉμ²¨ μνλ₯Ό λ°λ‘ λΉκ΅νλ 건 λΆκ°λ₯ν©λλ€.
λΉμ²¨ μνλ₯Ό λΉκ΅νλ λ©μλμμ κΈ°μ‘΄μλ setterλ₯Ό ν΅ν΄ κ°μ λ³κ²½νλ€λ©΄, κ°μ λ μ½λμμλ λΉμ²¨ μνλ₯Ό λνλ΄λ List<LottoPrize>λ₯Ό λ§λ€μ΄μ λ°ννλλ‘ μμ νμ΅λλ€.
μ μ½λλ 무λΆλ³ν getter μ¬μ©, κ°μ²΄μκ² λ©μμ§ μ λ¬, μΌκΈ 컬λ μ μ¬μ© λ± κ°μ μ¬μ§κ° λ§μ§λ§ 1μ°¨μ μΌλ‘λ μμ κ°μ΄ κ°μ μ νμ΅λλ€.
κ°μ²΄μκ² λ©μμ§ μ λ¬
(μλ§λ..?) μ΄λ² 리뷰μμ κ°μ₯ λ§μ΄ λ°μ νΌλλ°±μΈ λ― ν©λλ€.. π
κ°μ²΄μκ² λ©μμ§λ₯Ό μ λ¬νλλ‘ μ½λλ₯Ό ꡬννλ μ°μ΅μ΄ μ μλμ΄ μμ΄μ κ΄λ ¨ νΌλλ°±μ λ§μ΄ λ°μκ³ , μ½λλ₯Ό ꡬννλ©΄μ λ‘μ§μ μ± μμ΄ μ΄λ κ°μ²΄μ μλμ§λ₯Ό νλ¨νλ κ²λ μ΄λ €μμ λμΉ κ² κ°μ΅λλ€.
getterλ‘ κ°μ κΊΌλ΄λ λμ μ, κ°μ²΄μκ² λ©μμ§λ₯Ό 보λ΄λ λ°©μμΌλ‘ ꡬνν΄λ³΄λ©΄ μ΄λ¨κΉμ? μ νΈλ¦¬ν° ν΄λμ€ μ¬μ©λ μ’μ§λ§, getterλ₯Ό μμ£Ό νΈμΆνλ μ μ°¨μ§ν₯μ μΈ μ½λκ° λλ κ²½μ°κ° μ’ μ’ μμ΅λλ€. Controllerλ₯Ό λ΄λΉνλ Applicationμμ κ°μ²΄ κ°μ λ©μμ§λ₯Ό μ£Όκ³ λ°λ ꡬ쑰λ κ³ λ―Όν΄λ³΄μλ©΄ μ’μ κ² κ°μμ.
μ getterμ²λΌ κ°μ κΊΌλ΄λ λ°©μμ΄ μλ ν΄λΉ κ°μ²΄μκ² λ©μμ§λ₯Ό μ λ¬νλ λ°©μμΌλ‘ κ°μ νλ €κ³ λ³΄λ λ‘λ λ²νΈμ λΉμ²¨ λ²νΈλ₯Ό λΉκ΅νλ μν μ Lottoκ° μ€μ€λ‘ νλ κ²μ΄ λ§μκΉ? λΌλ μκ°μ΄ λ§μ΄ λ€μμ΅λλ€.
κ΄λ ¨ν΄μλ μλ ν¬μ€ν μ 보며 λ§μ΄ λμμ΄ λμ΄ μ²¨λΆν©λλ€. (λ λ²μ§Έλ μ μ λμΌν μκ°μ κ°μ§μ λΆμ μ§λ¬Έ λ° ν λ‘ μ λλ€.)
- https://tecoble.techcourse.co.kr/post/2020-04-28-ask-instead-of-getter/
- https://github.com/orgs/woowacourse-precourse/discussions/1177
κ΅μ‘ κ³Όμ μ΄ μ’ λ£λλ©΄ κ°μ²΄ μ§ν₯μ μ¬μ€κ³Ό μ€ν΄ λ° μ€λΈμ νΈλ₯Ό μ½μ΄λ³΄λ©΄μ λ€μ μ 리νλ μκ°μ κ°μ ΈμΌκ² λ€μ.
μΆλ ₯μ λν νλ μ½λ© μ κ±°
νλ μ½λ©νλ λμ LottoPrize λ₯Ό νμ©ν΄λ³΄λ 건 μ΄λ¨κΉμ?
λΉμ²¨ ν΅κ³λ₯Ό μΆλ ₯νκΈ° μν΄ λͺ¨λ λΉμ²¨ κ°μλ₯Ό νλμ© μΆλ ₯νλ λΆλΆμ΄ μ‘΄μ¬νμλλ° enum ν΄λμ€μ μΆλ ₯κ³Ό κ΄λ ¨λ λ¬Έμ₯μ μΆκ°νμ¬ λ°λ³΅ νλ μ½λ© λΆλΆμ μ κ±°ν μ μμμ΅λλ€.
ν μ€νΈ μ½λ μ€λ³΅ μ κ±°
@ParameterizedTest λ₯Ό νμ©νμ¬ μ½λ μ€λ³΅μ μ€μ¬λ³΄λ©΄ μ΄λ¨κΉμ?
λ‘λ λ²νΈκ° νλ κ°μ© λ¬λΌμ§κ³ , μ΄μ λ°λΌ λΉμ²¨ μνκ° λ¬λΌμ§λ ν μ€νΈλ₯Ό μ λΆ μμ±νλ€ λ³΄λ μ€λ³΅ λΆλΆμ΄ λ§μ΄ μ‘΄μ¬νμ¬ @ParameterizedTest, @MethodSource μ΄λ Έν μ΄μ μ νμ©νμ¬ μ€λ³΅ μ½λλ₯Ό μ κ±°νμ΅λλ€.
μμ€ν μ λ 립μ μΈ κ°ν λ¬Έμ μ¬μ©
https://www.baeldung.com/java-string-newline#3-using-platform-independent-newline-characters
3λ¨κ³ - λ‘λ(2λ±)
3λ¨κ³μ μꡬ μ¬νμ 2λ±μ μν 보λμ€ λ²νΈκ° μΆκ°λκ³ , λΉμ²¨ ν΅κ³μλ 2λ±μ΄ μΆκ°λμ΄μΌ ν©λλ€.
보λμ€ λ²νΈ νλ μΆκ°νλ μꡬμ¬νμ΄ λκ° μ΄λ ΅κ² μ΄?λΌκ³ μκ°νμ§λ§, κΈ°μ‘΄ μ½λλ₯Ό 리ν©ν°λ§ νλ©΄μ λ¨μν κΈ°λ₯ μΆκ°νλ μμ λ μ¬μ΄ μΌμ΄ μλλΌλ κ²μ κΉ¨λ«κ² λμμ΅λλ€.. π
λλ©μΈ κ°μ²΄λ₯Ό μΆκ°νμ
As-Is) λΉμ²¨ λ²νΈμ 보λμ€ λ²νΈλ₯Ό κ°λ λλ©μΈ κ°μ²΄λ₯Ό μΆκ°ν΄λ³΄λ 건 μ΄λ¨κΉμ?
κΈ°μ‘΄ λ‘μ§μμ λΉμ²¨ λ²νΈλ₯Ό μλ―Ένλ WinnerLotto κ°μ²΄λ₯Ό μΆκ°νμ¬ λ€μκ³Ό κ°μ μ΄μ μ κ°μ§ μ μμμ΅λλ€.
- λ©μλ μΈμμ κ°―μ κ°μ
- κ°μ²΄μ μ± μ λ° μν λΆλ¦¬
β» μ°Έκ³ λ‘ κ΅μ‘μλ£μ κ°μ΄λλ λ€μκ³Ό κ°μ΅λλ€.
- ν¨μμμ μ΄μμ μΈ μΈμ κ°μλ 0κ°(무ν)μ΄λ€. λ€μμ 1κ°μ΄κ³ , λ€μμ 2κ°μ΄λ€.
- 3κ°λ κ°λ₯ν νΌνλ νΈμ΄ μ’λ€.
- 4κ° μ΄μμ νΉλ³ν μ΄μ κ° μμ΄λ μ¬μ©νλ©΄ μλλ€
- μΈμκ° 2 ~ 3κ° νμν κ²½μ°κ° μκΈ΄λ€λ©΄ μΈμλ₯Ό λ μμ μΈ ν΄λμ€λ₯Ό μμ±ν μ μλμ§ κ²ν ν΄ λ³Έλ€.
4λ¨κ³ - λ‘λ(μλ)
κ°μ²΄μκ² λ©μμ§ μ λ¬
κ°μ²΄μκ² λ©μμ§λ₯Ό μ λ¬νλ κ²μ κ²°κ΅ κ°μ²΄λ₯Ό κ°μ²΄μ€λ½κ² μ¬μ©νλ€λ λ»μ΄κΈ°λ νκ³ , μ΄λ κ°μ²΄μ μ± μκ³Ό μν μ΄ μ λΆλ¦¬λμ΄ μ½λμ κ°λ μ± ν₯μμ΄λ ν μ€νΈ μ½λ μμ±μ μ©μ΄ν¨, μ μ§ λ³΄μ νΈμ λ± λ€λ°©λ©΄μΌλ‘ μ΄μ μ΄ μμ λ― ν©λλ€.