-
Notifications
You must be signed in to change notification settings - Fork 2
Chapter 09. Unit Tests Part.1
2021.10.30 (SAT) 10:20-12:00 (100mins)
π Lead by. 'Jeongyeol'
μ€μ ν μ€νΈ λΌμ΄λΈλ¬λ¦¬λ κ·Έ κΈ°λ₯μ μΌλΆ μΈκΈνμ§λ§ ꡬν κΈ°μ μ΄ μ€μ¬μ΄ μλλ κ±±μ νμ§ λ§μ :)
μ¬μ μμ testλ 'μ§λ¬Έμ΄λ μ€ννλμΌλ‘ μκ³ μκ±°λ κ°λ₯νκ±°λ μΆμΈ‘ν κ²μ νμΈνλ νμ λλ μλ¨'μΌλ‘ μ μνλ€.
λꡬλ νλ²μ―€μ "μμ±λ μ½λλ₯Ό ν
μ€νΈ ν΄ λ΄μΌν΄"λΌλ λ§μ λ€μ΄ λ³Έ μ μμ κ²μ΄λ€.
μ΄ λ§μ κ°λ°λ μ½λλ‘ μνλλ νλ‘κ·Έλ¨μ λμμ΄ μλμ κ°μμ§ νμΈνλΌλ κ²κ³Ό κ°λ€.
(λΉμ₯ κΈ°λ₯ κ°λ°ν μκ°λ μλλ°, μ λ§ νμν κ±ΈκΉ?)
1997λ λ§ ν΄λ TDD(Test Driven Development)λΌλ κ°λ μ μ무λ λͺ°λλ€.
μ°λ¦¬λ€ λλ€μμκ² λ¨μ ν μ€νΈλ, μκΈ° νλ‘κ·Έλ¨μ΄ λμκ°λ€λ μ¬μ€λ§ νμΈνλ μΌνμ± μ½λμ λΆκ³Όνλ€.
ν΄λμ€μ λ©μλλ₯Ό 곡λ€μ¬ ꡬνν ν μμ μ½λλ₯Ό κΈμ‘°ν΄ ν μ€νΈλ₯Ό μννλλ°,
λκ°λ κ°λ¨ν λλΌμ΄λ² νλ‘κ·Έλ¨μ ꡬνν΄ μμ μ΄ μ§ νλ‘κ·Έλ¨μ μλμΌλ‘ μ€ννλ€.(μ€λ΅.. μ€νλ ν μ€νΈ μ½λκ° μ’ λ£λκΈ°κΉμ§μ κ³Όμ μ€λͺ )
κ·Έκ²μ΄ λ΄κ° ν ν μ€νΈμλ€!
λμκ°λ€λ μ¬μ€μ νμΈνκ³ λλ£λ€μκ²λ 보μ¬μ€¬λ€.
κ·Έλ¬κ³ λμλ ν μ€νΈ μ½λλ₯Ό λ²λ Έλ€.
CleanCode <Robert C. Marti> 9μ₯. λ¨μ ν μ€νΈ (λμ λΆ)
λ²λ Έλ€λ μ¬μ€μ μ°λ¦¬κ° μκ°νλ κ²λ³΄λ€ μν₯μ μ£Όλ λ²μκ° ν¬λ€.
μ΄λ° κ²½μ°(νννμλ μμμ)λ₯Ό μμλ‘ λ€ μ μμ§ μμκΉ?
-
UI ν μ€νΈ μκ°μ΄ μ΄λ°ν λλ¨Έμ§, λ°μ΄ν°λ§ μμλ‘ μ μ₯ν΄λκ³ μ§μ μ λ ₯ν΄μ νμΈνλ€.
κ·Έλ¦¬κ³ μ¬μ©ν ν μ€νΈ νμΌμ΄ μ§κΈμ μ΄λμ μλμ§ λͺ¨λ₯΄κ² λ€.???:
λ°°ν¬ν΄μ λ¬Έμ μμκ³ μ§κΈλ μ λμκ°μμ. λκ° λ¬Έμ λ°? -
ꡬννλ λμ μ건(Spec)μ΄ κ³μ λ³κ²½λμ΄μ νμνλ©΄μ λ§λ€λ©΄μ μ¬λ¬λ² κ³ μΉκ³ λ‘μ§μ νμΈνλ€.
κ·Έλμ ν μ€νΈ μ½λ μ€νμ 컀λ μ μλ μμ΄ κ°λ°μ΄ μλ£λμλ€.???:
λ²κ·Έλ λμ€λ©΄ κ³ μΉλ©΄ λλλ° λ γ γ γ μλ²½ν μ½λ μ§λ €νμ§λ§ μκ° μκΉμ~ -
ν μ€νΈκ° νμν λΆλΆμ κ°λ°μ΄ λλ¬κ³ , μκΎΈ λ³κ²½μ΄ μΌμ΄λκ³ μμ΄μ
λμ΄μ κ·Έ ν μ€νΈ μ½λλ₯Ό κ³ λ―Όνμ§ μκ² λμλ€.???:
κ²½λ‘, μ΄λ¦ μκΎΈ λ°κΎΈκ² κΈ°ν λ€μ§μ΄μλ μ XX μ§μ§ ν..
(μμλ νμλ ) λꡬλ ν μ€νΈ μ½λλ₯Ό λ²λ¦° κ²½νμ λꡬλ μμ κ²μ΄λ€. κΈ°μ΅μ λ μ¬λ¦¬λ©°, μ€μ€λ‘μκ² μλ μ§λ¬Έμ λμ Έλ³΄μ.
β μ½λ 리뷰λ₯Ό ν¬ν¨ν΄ μ΄μ¬ν λ§λ λΉμ§λμ€ λ‘μ§μ μλΉμ€ μ΄μ©μμ λ§μ‘±λλ₯Ό 보μ₯νλκ°?
UXλ₯Ό κ³ λ €ν νλ‘κ·Έλ¨μ΄ μ½λ λ¦¬λ·°κ° λ°λμ ν¬ν¨λμ΄μΌνλ νμ쑰건μ μλλ€.
Code Reviewλ?
λ³Έλλ μμ±λ μ½λμ μνλ₯Ό νμΈμ΄ μΆκ°λ‘ 보λ cross-checkλ₯Ό μν μμλμλ€.
νμ¬λ μ£Όλ‘ μ£Όλμ΄ κ°λ°μ(Jr.Dev) λΉμ€μ΄ λμ νμμ μλμ΄ κ°λ°μ(Sr.Dev)λ€μ΄ μ€μ¬μ΄ λμ΄ μννλ€.
κ°λ° μ½λλ₯Ό νμΈνκ³ νμ μ λ΅κ³Ό μ§μΉ¨μ 곡μ ν΄μ νμ§μ λμ΄κΈ° μν μμ¬ μν΅ μλ¨ μ€ νλμ΄κ³ ,
μ¬λ°λ₯΄μ§ λͺ»ν μ½λλ₯Ό ν¬ν¨ν 컀λ°μ ν©μ³μ Έμ λ ν° λ¬Έμ λ₯Ό μΌκΈ°νμ§ μλλ‘ PRμμ νΉν λ§μ΄ νμ©λλ€.
λ°λΌμ λΉμ§λμ€ λ‘μ§μ μ½λ νμ§μ νλ‘κ·Έλ¨μ΄ UXμ μμ μ±μ λ§μ‘±νλλ‘ μ μ°¨ μμκ°λ©΄μ μμ±νλ κ²μ΄λ―λ‘
μ½λ λ¦¬λ·°κ° UXμ κ°μ μλΉμ€μ νμ§μ 보μ₯νμ§ λͺ»νλ€.
(μ°Έκ³ ) νλ‘κ·Έλ¨ κ΅¬ν μΈμ£Ό κ³μ½κ³Ό κ°μ κ°μκ΄κ³μμμ μ½λ κ²μμλ λ§₯λ½μ΄ λ€λ₯΄λ€.
μμ¬μμ μμ±ν μ½λλ₯Ό κ°μ¬κ° μ μΆλ°κ³ μ§μ κ²μ(review)νκ±°λ μ 3μκ° μννλ κ²½μ°λ₯Ό μλ―Ένλ κ²μ μλλ€.
β ν μ€νΈ μ½λ μμ±κ³Ό μ€ν νμΈμ μκ°μ μλΉνμ§ μμμΌλ―λ‘, κ°λ° μκ°μ μλ μ μμλ?
κ°λ°νμ μ½μλ λ§κ°μΌμ μ§μΌ°κ³ , μ 무λ₯Ό λ§μΉκ³ 볡κ·νμΌλ μκ°μ μκΌλ€.
λ§μ½ λ°©κΈ **κ·Έλ μ§ μλ? λΌλ μκ°μ΄ λ€μλ€λ©΄,νμ λ κΈ°κ°μ λν μ± μλ§μ μκ°νκΈ° λλ¬Έμ΄λ¦¬λΌ.
λͺ¨λ νλ‘κ·Έλ¨μ λ°λ³΅λλ λμμ μ₯μ λ λ²κ·Έ μμ΄ κ³μλ μ¬μ©μ΄ κ°λ₯ν λ μλͺ
μ κ°μ§λ€.
μ¦, νλ‘μ νΈ κΈ°κ°μ΄ λλμ κ°λ°νμ μ² μνλλΌλ, νλ‘κ·Έλ¨μ λΉμ§λμ€λ₯Ό μ§ν±ν΄μΌνλ€.
μλ²½ν νλ‘κ·Έλ¨μ΄λ μ‘΄μ¬ν μ μλ€. λͺ¨λ μ½λλ μ μ¬μ μΌλ‘ λ²κ·Έκ° λ μ μλ€.
μ€νμ μ κ΅νκ³ λ€μνκ² ν μλ‘ λ μ’μ μ νμ΄ λμ¨λ€λ κ²μ μλͺ
ν μ¬μ€μ΄λ€.
(νκ°ν μκ°μ λλ©΄μ λ§λλ μ°½μνλμ΄ μλ) κΈ°μ
μ μ΄μ€ μΆκ΅¬λ₯Ό μ€νν μλΉμ€λ₯Ό κ°λ°νλ νλμ
μκ°, μμ, λ
Έλ ₯ λ± λΉμ©κ³Ό μ νμ νμ§ μ¬μ΄μμ λΉμ§λμ€μ κ³ κ° μ λ’°λ₯Ό μ±μ¬μμΌμΌ νλ€.
μλλ μμλ₯Ό μ΄ν보μ.
λ§μ λΉμ©μ΄ ν¬μλ μλΉμ€κ° λ κ±°μ μ½λ(legacy)μμ μ
λͺ½(nightmare)λ‘ κ°λ κ³Όμ μ μΆμ½νλ€.
[κ΅¬μΆ λ¨κ³] π€
κ°λ°μ¬κ° μ°©μνκ³ μλΉμ€ κ°μ(launching)μ μ€λΉνκ³ μλ€.[μ€ν μ§μ ] π€
μ΄μμ¬κ° ν¨κ» κ·Έκ° κ°λ°λ λ΄μ©μ μΈκ³ λ°κ³ , Play book & Run book λ±μ λ³΄κ³ μ΄μ μ λ΅μ μ€λΉνλ€.[μ€ν μ§ν] π©
μ€ν μ΄μ°½κΈ° κ°λ°μ¬κ° κ΄μ¬νλ©° μ‘°μν λ²κ·Έλ₯Ό μμ νκ³ λ°°ν¬ν΄ μμ νλ₯Ό κ±°μΉλ€.[μ΄μ λ¨κ³] π€
μμ νλ μλΉμ€μ μ½λλ₯Ό 보λ μΌμ μ μ΄μ§λ©° λ―Όμμ΄ μμΌλ©΄ μλ² λ‘κ·Έλ§ λ³΄κ³ λ¬Έμλ₯Ό μμ±νλ€.[보μ λ¨κ³] π±
μ΄λ μμ μ μλΉμ€μ λ³κ²½μ΄λ λμμ΄ νμν μμ μ μΆμ μ΄ μ΄λ ΅κ³ , μμ λ³κ²½μΌλ‘ λκ·λͺ¨ μ₯μ κ° λ°μνλ€.
β ν μ€νΈ μ½λλ₯Ό λ²λ¦° κ²°κ³Όλ? (Give & Take)
π© μ΄λ μ°©κ° λμΉ
- κ°λ° μκ° μ μ½ νΉμ λ¨μΆ (νλ€κ³ μ°©κ°) : 보μκ° μ΄λ ΅κ±°λ μ₯μ μμΈμ νμ νκΈ° μ΄λ ΅λ€λ©΄?
- μ½λ νμ§μ λμ΄κΈ° μν΄ λ λ§μ μκ°μΌλ‘ νμ§ ν보 (λμλ€κ³ μ°©κ°) : μ΄λ»κ² νμ§μ 보μ¦?
π€ νΉμ?
'λ΄κ° λ 빨리 κ°λ° νλ €λ©΄ ν
μ€νΈ μ½λλ₯Ό λ²λ¦¬λ μ νμ΄ ν©λ¦¬μ μ΄λ€' λΌκ³ μκ°νλ μ¬λμ΄λΌλ©΄,
μλ°±, μμ²κ°μ QA Check listλ₯Ό λ§λ κ²½νλ μμ κ²μ΄λ€. κ·Έλ κΈ°μ ν
μ€νΈ μ½λ μμ°μ μ¬μ ν λλΉλΌκ³ μκ°νλ€.
μ΄μ©λ©΄, νμΈνμ§ λͺ»ν 리μ€ν¬λ κ·Έλ₯ μκ³ κ°λ λλ°μ¬..? (λλ΄)
μ μμΌμ΄λ TDD, CI/CDμ λͺ©νλ μ°λ¦¬ IT λΆμΌμ λλΆμ μ±μ₯μ μν λ°©ν₯μ μ°Ύμ λ°©λ²λ€μ΄λ€.
μ΄ λ°©λ²λ€μ μ μ©ν΄μ λ λμ μμ€μ κ°λ° λ₯λ ₯(developer's performance)μ κ°μΆλ κ²μ
μλνν μ μλ ν
μ€νΈ μ½λλ₯Ό λ§λ€κ³ λμ μν¬ μ μλκ°λΌλ μ§μ μμ μμλ μ μλ€.
(μνκΉμ§λ§) ν
μ€νΈ ν΅κ³Όλ 'ν
μ€νΈ λΉμ 컀λ°(commit)'μμ ν΅κ³Όλμλ€λ μ¬μ€μ λΆκ³ΌνκΈ° λλ¬Έμ,
(λΉμ°νκ²λ) λ³κ²½λ λ€μ 컀λ°(commit)μμλ μ΄λ₯Ό 보μ₯ν μ μλ€.
κ·Έλμ μ°λ¦¬λ ν
μ€νΈ μ½λλ₯Ό μμ±νκ³ κ²μν΄μ μλμΌλ‘ νμΈν΄μ£ΌκΈΈ λ°λΌλ μλνλ₯Ό κΏκΎΌλ€.
???:
"νμΈλ μν΄λ³΄κ³ λ°°ν¬νμ΄? λλ체 λ κ°λ°νκ³ μλκ±°λ?"(μΈμ±..)
λꡬλ μ΄λ° λ§μ λ£κΈ° μ«λ€.
(λ€ννλ) μ΄λ² 9μ₯ λ¨μν
μ€νΈ μ±ν°λ₯Ό ν΅ν΄ TDDμ μ€μ΅μ κ²½ννλ€λ©΄,
μ λ° μ¬ν μ§μ λ€μ 'νμ΄ λ¬΄λ₯ν νμ
μμ€ν
μ κ°μ‘λ€'λ λ°μ¦ μ΄λΌλ μ¬μ€μ μ΄ν΄νκ³
μλμ κ°μ΄ ν
μ€νΈ μ½λκ° νμ κ΄λ¦¬μ ν¬ν¨λμ΄μΌ νλ€λ μ κΉμ§ μ΄ν΄νκ² λ κ²μ΄λ€.
ν μ€νΈ μΌμ΄μ€λ₯Ό λͺ¨λ ꡬννκ³ ν΅κ³Όν ν λ΄ μ½λλ₯Ό μ¬μ©ν μ¬λλ€μκ²λ 곡κ°ν λ,
νμ€νΈ μ½λμ λ΄ μ½λλ₯Ό κ°μ μμ€ ν¨ν€μ§λ‘ νμ€ν λ¬Άμ΄μ 체ν¬μΈ(checkin)ν΄μΌνλ€.
μ΄μ΄μ§λ μΉμ Bμμ μ΄λ»κ² ν μ€νΈ κΈ°λ° κ°λ°(TDD)λ‘ κ΅¬μ±νλμ§ μ¬κ³ μ리λ₯Ό μ΄ν΄λ³΄μ.
μ¬μ€ TDDκ° μ€μ μ½λλ₯Ό μμ±νκΈ° μ μ λ¨μ ν
μ€νΈ μ½κ·Έλ₯Ό μ§λΌκ³ μꡬνλ€.
κ·Έκ²μ μλμ λ²μΉμ λ°λΌ κ°λ°μ μ§ννλλ‘ μ λλ κ·μΉμ΄λ€.
-
첫째 λ²μΉ
μ€ν¨νλ λ¨μ ν μ€νΈλ₯Ό μμ±ν λ κΉμ§, μ€μ μ½λλ₯Ό μμ±νμ§ μλλ€. -
λμ§Έ λ²μΉ
μ»΄νμΌμ ν΅κ³Όνλ©΄μ, ν μ€νΈ μ€ν κ²°κ³Όκ° μ€ν¨νλ μμ€μ λ¨μ ν μ€νΈλ₯Ό μμ±νλ€. -
μ μ§Έ λ²μΉ
νμ¬ μ€ν¨νλ ν μ€νΈλ₯Ό ν΅κ³Όν μ λλ‘λ§ μ€μ μ½λλ₯Ό μμ±νλ€.
(μ΄μ―€ λλ©΄ μ΄λ° μλ¬Έμ κ°μ§λ μ¬λλ μμΌλ¦¬λΌ.)
ν
μ€νΈ μ½λκΉμ§ μ½λ μμ
μ λ λ§μ΄ ν΄μΌνλ λ°, μ΄λ»κ² μμ°μ±μ΄ ν₯μλλκ°?
μ μΈ κ°μ§ κ·μΉμ μ€μν λ, κ°λ°κ³Ό ν
μ€νΈλ λλ΅ 30μ΄ μ£ΌκΈ°λ‘ λ¬ΆμΈλ€.
ν
μ€νΈ μ½λκ° μ€μ μ½λλ³΄λ€ λΆκ³Ό λͺμ΄ μ μ λμμ, μ£ΌκΈ°μ λμ ν
μ€νΈ μ½λμ μ€μ μ½λκ° ν¨κ» λμ¨λ€.
Q. μ²μ νκ²½μ μ€λΉκ±Έλ‘ λ² μ°¨μ 30μ΄λ λλλ°..?
λ¬Όλ‘ νλ‘μ νΈλ₯Ό ꡬμΆν μ΄μ°½κΈ°λ λ¨μ ν
μ€νΈλ₯Ό μ²μ λμ
νλ μμ μλ
ν
μ€νΈμ νμν λ€μν λΌμ΄λΈλ¬λ¦¬λ₯Ό ꡬμΆνκ³ μμ λ₯Ό μμ±νλ μΌμ λ 걸릴 μ μλ€.
κ·Έλ¬λ κ° μΈμ΄μ νλ μμν¬ μ§μμ νμ€ ν
μ€νΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νκ³ κ³΅μ λνλ¨ΌνΈλ₯Ό νμ©νμ!
Q. ν μ€νΈ μ½λκ° ν¨κ» λμ¨λ€λ κ²μ΄ μ μ₯μ μ΄ λ κΉ?
λ°λλ‘ κ°λ°μ΄ λλ λ€μ ν
μ€νΈ μ½λλ₯Ό μμ±νλ κ²½μ°λ₯Ό μκ°ν΄λ³΄μ.
μ°λ¦¬λ μλ‘μ΄ νλ‘κ·Έλ¨μ μλΉμ€λ‘μ μΆμν λ, μ΄μμ΄ μλμ§ νμΈμ νλ€.
-
μ°λ¦¬κ° κ°λ°ν νλ‘κ·Έλ¨μ κ²μ¬ν λ, νΉμ λ³λμ ν μ€νΈ μμμ΄ μλ κ²½μ°κΉμ§ ν¬ν¨νλλΌλ
ν μ€νΈ λμμ μΈμ§νκ³ μλ κΈ°λ₯μ λμμΌλ‘ νλ€. (know known things)know known: μ΄ν΄ κ°λ₯ν λ²μμμ ν΄κ²°ν΄μΌ νλ€λ μ¬μ€μ μΈμ§ν μμ -
μνκΉκ²λ, μκ°μ΄λ μμ, λΉμ© λ±μ μ΄μ λ‘ μ§νλμ§ λͺ»νλ νμ€μ μΈ κ²½μ°λ μλ€.
μΈμ§νμ§λ§ νμΈλμ§ λͺ»νλ€λ μ¬μ€μ μ΄ν΄νκ³ , μ₯μ μν κ°μνλ κ²μ΄λ€.know unknown: νμΈνμ§ λͺ»νκ³ μΆν ν΄κ²°ν΄μΌ νλ€λ μ¬μ€μ μΈμ§ν μμ -
ννΈ, κ°λ° κΈ°κ°λμ κΈ°νμ΄λ μ€κ³, νμ, μ‘°μ§ λ± λ³κ²½λ λ§μκ³ ,
μλ‘μ΄ λΉμ§λμ€μΈ κ²½μ° λμ μꡬμ¬νλ λ€μν΄μ§ λΏλλ¬ μ μ λ 볡μ‘ν΄μ Έκ°λ€λ©΄,
μ°λ¦¬ νμ΄ κ°λ°ν κΈ°λ₯μ΄ μ΄λ€ λμμ μνν΄μΌνλμ§ μ νν νμ νμ§ λͺ»νλ μνμ μ΄λ₯Έλ€.
μ¬μ§μ΄ μΈλΆ νλ ₯μ 체μ μ°κ³λ API νΉμ λͺ¨λ, λΌμ΄λΈλ¬λ¦¬κΉμ§, μ΄ λͺ¨λλ _λΈλλ°μ€(Black-box)_κ° λλ€.보ν΅μ κ²½μ° κ°λ° λ΄λΉμκ° κΈ°λ₯ ꡬνμ λν μ± μμ λ€νμ κ²μ΄λΌ μμνλ―λ‘,
μ΄ μμλ€μ μΈμ§ μμ λ°μ μμΉνκ³ , λ¬Έμ κ° λ°μνλ©΄ μ μ μλ μμμ΄ λλ€.unknown known: μ΄ν΄νλ€κ³ νλ¨νκΈ°μ, λ¬Έμ λ°μ μνμ λͺ¨λ₯΄λ λ―Έμ§μ μμ -
μκ°μ΄ μ§λ μ λ²μ μΌλ‘ κ°μ (upgrade)νκ±°λ μ립νκΈ° μ΄λ €μ΄ μ κ΅¬μ‘°λ‘ λ³κ²½(migration)νλ©΄
μ ν μλ‘μ΄ μ νμ λ¬Έμ λ€μ΄ λ°μνκ±°λ, μμΈμ΄λ μ΄λ ₯μ μ μ μλ λ³κ²½ μ§μ λ€λ λ°μνλ€.
λμ°νκ²λ μ΄ν΄νλ λ²μλ₯Ό λμ΄μμ μ‘΄μ¬νλμ§λ λͺ°λλ μ μ¬μ μΈ λ²κ·Έλ€μ΄λ€.:unknown unknown(λͺ¨λ₯Έλ€λ μ¬μ€λ λͺ¨λ₯΄λ μμ)know unknown: μ°λ¦¬κ° λͺ¨λ₯Έλ€λ μ¬μ€ μ‘°μ°¨λ λͺ¨λ₯΄λ λ―Έμ§μ μμ
λ¬Όλ‘ , μ μμλ€μ λͺ¨λ μ ν리μΌμ΄μ
κ°λ°(application development)λ§ κ³ λ €λ κ²μ μλλ€.
ꡬμΆνλ ν¨ν€μ§ λ΄λΆμ λ¬Έμ μΌμλ, λͺ¨λμ΄λ ν΅μ μ λ¬Έμ μΌμκ³ μκ³ , μΈνλΌμ€νΈλμ²(Infrastructure)μΌ μλ μλ€.
λΉμ§λμ€ λ‘μ§μ μννλ μλΉμ€λ₯Ό ꡬμ±νλ μμ μ λ°μ κ±Έμ³μ μ μ¬μ λ²κ·Έμ λν κ³ μ°°μ΄λΌλ μ μ μ΄ν΄νκΈΈ λ°λλ€.
μ.. κ°λ°μ μ§μ κ΄μ¬ν λΉμ¬μ μΈμ λ€λ₯Έ μ¬λμ΄ κ°λ°ν λ΄μ©κΉμ§ μ±κΈ°κ³
μμ ν νλ‘κ·Έλ¨μ κ°λ°νκ³ μ΄μνλ 건 μ½μ§ μκ² λλ°..?
μ΄μ ν
μ€νΈ μ½λκ° κ°μ΄ λμ¨λ€λ κ²μ΄ μ λ§ μ μ₯μ μ΄ λλμ§ μ΄ν΄νκΈ° μν΄ B-3μΌλ‘ λμ΄κ°μ.
CleanCode 1μ₯μ μ½λλ μꡬμ¬νμ νννλ μΈμ΄λΌλ μ¬μ€μ μ΄ν΄νλΌ
λ₯Ό κΈ°μ΅νλκ°?
κΉ¨λν μ½λμ μ½λλ₯΄ μ체λ₯Ό μ€λͺ
νλ μ μΌ μ²μμ λμ
λΆμμ μΈκΈλλ μ΄ μ±
μ κ°μ₯ μ€μν λ΄μ© μ€ νλμ΄λ€.
ν
μ€νΈ μ½λλ 'μ½λ(code)': 'ν
μ€νΈ μ½λκ° μ μν μꡬμ¬ν'μ 'μ€μ μ½λκ° κΈ°λ₯μΌλ‘μ 보μ₯νλΌ'λ μλ―Έμ₯μ κ° λμ λ€μ μ½λλ₯Ό 볡기νλ μ¬ν μ²λ¦¬λ₯Ό μ μΈνλ©΄
μ½λλ₯Ό μμ±νλ κ·Έ μκ° λ§νΌ ν΄λΉ κΈ°λ₯μ λν΄ μ΄ν΄λκ° λμ μκ°μ μλ€.
κ²°κ΅, μ΄ν΄λκ° κ°μ₯ λμ μκ°μ μμ±λ κ°λ° μ½λμ ν
μ€νΈ μ½λλ ν¨κ» λμ¨λ€λ κ²μ
κΈ°λ₯κ³Ό ν
μ€νΈμ λͺ
μΈκ° ν¨κ» μμ±λλ―λ‘ κ°λ°κ³Ό κ²μ¦μ μ κΈ°μ μΌλ‘ μνν μ μκ² λλ€.
κ°λ°λ μ€μ μ½λλ₯Ό μ λΆ μ½μ§ μκ³ , ν
μ€νΈ κ²°κ³Όμ ν
μ€νΈ μ½λλ§ μ½λλΌλ
νμμκ² ν΄λΉ APIλ₯Ό μ¬μ©νλ κ°μ₯ μ¬λ°λ₯Έ λ°©λ²μ μκ°νλ λ°©λ²μ΄ λκΈ°λ νλ€.
μ΄λ μ¬λ¬ κ°λ°μκ° λμμ νμ
ν λ μμ¬μν΅μ ν¨μ¨μ±μ λμ¬μ£Όλ λ°©λ² μ€ νλκ° λκ³ ,
κ³Όκ±°μ λκ΅°κ°μ μ¬μ©λ°©λ²μ νμ¬μ λ
μκ° λ³΄κ³ μ΄ν΄νλ μν΅μ΄λ€.
μΌνμ© ν μ€νΈ μ½λλ₯Ό μ§μ€λ€κ° μμΌμ€λ μλνλ λ¨μ ν μ€νΈ μνΈλ₯Ό μ§ λ€λ κ²μ μ½μ§ μλ€.
λ μ¬μ΄λ κ°κ·Ήμ΄ μμ£Ό ν¬λ€.
CleanCode <Robert C. Marti> 9μ₯. λ¨μ ν μ€νΈ (κΉ¨λν ν μ€νΈ μ½λ μ μ§νκΈ°)
μμ λ§ν ν
μ€νΈ μ½λ μνΈ μμ±μ λν λμ΄λλ₯Ό κ°μ₯ λΉ λ₯΄κ² ν΄κ²°(λμλ€κ³ μ°©κ°)νλ λ°©λ²μ
ν
μ€νΈ μ½λμ μ€μ μ½λμ νμ§ κΈ°μ€μ λ€λ₯΄κ² μ μ©νλ κ²μ΄λ€.
μ΄λ₯Έλ° 'μ§μ λΆν΄λ 빨리' λμμ νμΈλ§ νλ ν
μ€νΈ μ½λλ₯Ό λ§λλ κ²μ΄λ€.
λ³μ μ΄λ¦μ μ κ²½ μΈ νμ μμ΄μ§ν
κ³ , ν
μ€νΈλ₯Ό κ°κ²°νκ² μμ μ μΌλ‘ μμ±ν νμλ μμΌλ©°,
ν
μ€νΈ μ½λλ₯Ό μ€κ³νκ³ λΆλ¦¬ν νμμ‘°μ°¨ μμ΄ μμ λ‘κ³ λμ¨ν ν
μ€νΈ μ½λμ ν¨κ» κΈ°λ₯μ΄ μΆμλλ€.
β μ λ§ μ΄λ κ² μ μ©ν΄λ λλ κ±ΈκΉ? λ¬Έμ κ° μμκΉ?
π€ λ¬Έμ κ° λ³΄μ΄κΈ° μμνλ€
'ν
μ€νΈλ₯Ό μνλλ μ§μ λΆν μ½λλΌλ μλ νΈμ΄ μ’μμ' λ§λ€μλ ν
μ€νΈ μ½λκ°
κ³Όμ° μ€μ μ½λμ λ³κ²½μ λ°λΌκ°λ©΄μ μ μ§λ³΄μλ₯Ό ν¨κ» ν μ μμκΉ?
(ν
μ€νΈ μ½λλ μ€μ μ½λμ λ§μ°¬κ°μ§λ‘) 볡μ‘ν΄μ§μλ‘ λ³κ²½μ΄ μ΄λ €μ΄ κ²μ λΉμ°νλ€.
ν
μ€νΈ μ½λκ° μ§μ λΆνλ©΄ μ€μ μ½λλ₯Ό μ§λ μκ°λ³΄λ€ κΈ°μ‘΄ ν
μ€νΈ μ½λλ₯Ό νμ
νκ³ κ³ μΉκ³
μλ‘μ΄ μΌμ΄μ€λ₯Ό μΆκ°νλ μκ°μ ν¨μ¬ λ κ±Έλ¦¬κ² λλ€.
κ²°κ΅, μ§μ λΆν ν
μ€νΈ μ½λλ‘ μΈν΄μ ν
μ€νΈ μΌμ΄μ€λ₯Ό ν΅κ³Όμν€λ κ²μ μ μ λ μ΄λ ΅κ² λλ€.
π€ λ¬Έμ κ° μ»€μ§κΈ° μμνλ€
μ μ°¨ ν
μ€νΈ μΌμ΄μ€λ κ°λ°μλ€ μ¬μ΄μμλ κ°μ₯ ν° λΆλ§μ΄ λλ€.
κ΄λ¦¬μλ ν΅κ³Όλ ν
μ€νΈ μΌμ΄μ€μ μ€μ κ°λ€μ΄ μ μ΄λ κ² ν¬κ³ μλ―Έ μλμ§ μ§μ νλ©΄,
κ°λ°μλ ν
μ€νΈ μΌμ΄μ€λ₯Ό λΉλνκ² λλ€. λͺ¨λκ° ν
μ€νΈ μΌμ΄μ€λ₯Ό λ±μ§κ³ ν¬κΈ°νκ² λλ€.
ν
μ€νΈ μνΈκ° μμ΄μ Έμ μΌμ΄ μ€μ΄λ κ²μ²λΌ λκ»΄μ§λ€. (λκ΅°κ°λ μ λ§λ μ λ°μ λ²μ λλμ΄λΌκ³ λ..)
μ΄μ κ°λ°μλ μμ μ΄ μμ ν μ½λκ° μ λλ‘ λλμ§ νμΈν λ°©λ²μ΄ μμΌλ μμ μ΄ λμ΄μ μμ νλ€λ μ¬μ€μ κ²μ¦νμ§ λͺ»νλ€.
κ²°ν¨μ¨μ΄ λμμ§κΈ° μμνλ€.
π± λ¬Έμ κ° λ³μ κ²λ€
μλνμ§ μμ κ²°ν¨μκ° λμ΄μμ κ°λ°μλ λ³κ²½μ μ£Όμ νλ€.
λ³κ²½νλ©΄ κ°μ μΌλ‘ μ»λ κ²λ³΄λ€ μ₯μ μ λ²κ·Έλ‘ μλ κ²μ΄ λ λ§λ€κ³ μκ°νκ² λλ€.
λμ΄μ μ½λλ₯Ό κ³ μΉμ§ μλλ€.
κ²°κ΅ λΉμ§λμ€μλ ν μ€νΈ μνΈλ μκ³ μΌκΈ°μ€κΈ° λ€μμΈ μ½λμ μ’μ ν κ³ κ°λ§ λ¨λλ€._ ν μ€νΈμ μμ λΆμ λ Έλ ₯μ΄ νμ¬μλ€λ μ€λ§κ°μ΄ κ°λ°μμκ² λ¨λλ€._
- λ³κ²½μ λ°μνλ λ¬Έμ λ₯Ό 미리 νμ ν μ μλ€.
- μν€ν μ²κ° λΆμ€νκ±°λ μ€κ³κ° λͺ¨νΈνκ³ μλ§μ΄λλΌλ λ³λ€λ₯Έ μ°λ € μμ΄ λ²κ·Έμ μμΈμ μ°Ύμ μ μλ€.
- ν μ€νΈ 컀λ²λ¦¬μ§(Test coverage)κ° λμ μλ‘ κ³΅ν¬λ μ μ μ€μ΄λ λ€. μ€νλ € μμ¬νκ³ μν€ν μ²μ μ€κ³λ₯Ό κ°μ ν μ μλ€.
π© λ¬Έμ μ μμΈμ..?
ν
μ€νΈ μ½λλ₯Ό κΉ¨λνκ² μ μ§νμ§ μμμ ν¬κΈ°νκ² λμλ€.
ν
μ€νΈ μΌμ΄μ€κ° μμ΄μ μ€μ μ½λλ₯Ό μ μ°νκ² λ§λλ λ²νλͺ©μ μμλ€.
ν μ€νΈ μΌμ΄μ€ μμ΄ μ΄λ£¨μ΄μ§λ λͺ¨λ λ³κ²½μ μ μ μ μΈ λ²κ·Έμ΄λ€.
μ§μ λΆν μ½λλ₯Ό κ²½νν΄λ³Έ μ¬λμ μ κ²μ΄λ€. 보ν΅μ ν κ³³λ§ μ§μ λΆνμ§ μλ€. μ¬μ¬μ©μ±κ³Ό μν , κ²½κ³, μμ, ν¨μ¨μ± λͺ¨λ λ©΄μ΄ λΆμ‘±νλ€.
(λΉμ°νκ²λ) ν
μ€νΈ μ½λκ° μ§μ λΆνλ©΄ μ€μ μ½λλ μ§μ λΆν΄μ§λ€.
κ²°κ΅ ν
μ€νΈμ½λλ μμ΄λ²λ¦¬κ³ μ€μ μ½λλ λ§κ°μ§λ€.
π κ²°λ‘ μ μΌλ‘
μ°λ¦¬λ μ΄ λ¬Έμ λ₯Ό ν΅μμ μΌλ‘ λ³Ό μΌμ΄ μμμμ§ λͺ¨λ₯Έλ€. κ·Έλ¬λ μ°λ¦¬λ μ μ μλ€.
CleanCode 1μ₯ κΉ¨λν μ½λ - 'λμ μ½λλ‘ μΉλ₯΄λ λκ°'κ° λΆλ¬ μΌμΌν¨ κ²μ΄λ€.
λμλ²λ¦° ν μ€νΈ μ½λμ 'μλν μ¬μ€κ³μ κΏ'μ λλ€μ κΏν κ°?
μ½λμ μ μ°μ±, μ μ§λ³΄μμ±, μ¬μ¬μ©μ±μ μ 곡νλ λ²νλͺ©μΈ ν μ€νΈ μΌμ΄μ€λ₯Ό κΉ¨λνκ² μ μ§ν΄μΌνλ€.
βοΈ κΉ¨λν ν μ€νΈ μ½λλ₯Ό λ§λλ €λ©΄ λ€μ 3κ°μ§κ° νμνλ€
- κ°λ μ±
- κ°λ μ±
- κ°λ μ±
μ€νκ° μλλ€. μ΄μ©λ©΄ κ°λ
μ±μ μ€μ μ½λλ ν
μ€νΈ μ½λλ³΄λ€ ν¨μ¬ λ μ€μνλ€.
μ΄λ κ² μ€μν κ°λ
μ±μ μ΄λ»κ² ν΄μΌ λμΌ μ μμκΉ?
μ¬λ μ½λ(code)μ κ°λ€. λͺ λ£μ±, λ¨μμ±, νλΆν ννλ ₯μ΄ νμνλ€.
158 νμ΄μ§μ λͺ©λ‘ 9-1μμ 160 νμ΄μ§μ λͺ©λ‘ 9-2λ‘ κ³Όμ μ μλμ κ°μ΄ μμ½ν μ μλ€.
- κ° μ½λ λΌμΈμ λ©μλλ‘ λ¬Άμ΄μ ν μ€νΈ μ½λλ₯Ό λ¨μνκ² λ§λ€μλ€.
- λ©μλμ μ΄λ¦μ μ΄ν΄νκΈ° μ¬μ΄ μ΄λ¦μ λΆμ¬ λͺ λ£νκ² λ§λ€μλ€.
- λ©μλκ° λ€μν μΈμλ₯Ό λ°μμ μ¬μ¬μ©μ±μ λμκ³ ,
μ΄λ€ μ 보λ₯Ό λ°μμ μνλλμ§λ₯Ό νννλλ‘ κ°μ νλ€.
κΈ°μ‘΄μ μλ κΈ°λ₯μ μ μ§ν μ± μ½λλ₯Ό κ°μ νλ κ²μ **리ν©ν°λ§(Refactoring)**μ΄λΌκ³ νλ€.
μ΄λ κ² κΈ°μ‘΄μ μ½λλ₯Ό 리ν©ν°λ§νλ κ³Όμ μ μκ°μ ν¬μν΄μ κ°λ
μ±μ λμλ€.
β κ·Έλ λ€λ©΄ κΉ¨λν ν μ€νΈ μ½λλ‘ λ¬΄μμ μ»μμκΉ?
ν μ€νΈ μ½λμ μ‘λ€νκ³ μΈμΈν μ½λλ₯Ό κ±°μ μμ΄λ€λ μ¬μ€μ μ£Όλͺ©νλΌ.
-
ν μ€νΈμ λ³Έμ§μ λ°λ‘ νννλλ‘, μ§μ§ νμν μλ£ μ νκ³Ό ν¨μλ§ μ¬μ©νλ€.
-
μ½λλ₯Ό μ½λ μ¬λμ΄ λ°λ‘ μ½μ μ μλλ‘ μ½κ² κΈ°μ νκ³ , μ½λκ° μννλ κΈ°λ₯μ μ¬λΉ¨λ¦¬ μ΄ν΄νλ€.
-
μΈμΈν μ½λκ° μκΈ° λλ¬Έμ ν μ€νΈ μ½λλ₯Ό 보λλ° μ£Όλ λ€μ§ μκΈ° λλ¬Έμ,
ν μ€νΈ μΌμ΄μ€λ₯Ό 보λ λͺ¨λκ° μ κ·Ήμ μΌλ‘ κ°μ ν μ μλλ‘ λ°°λ €νλ€.
C-3) λλ©μΈ νΉνλ ν μ€νΈ μΈμ΄ μ¬μ©νκΈ°
μμ λ΄€λ λͺ©λ‘ 9-2μ κ°μ΄, λꡬλ μ½μ μ μλ€λ κ²μ 'λλ©μΈ(domain)μ λν μ΄ν΄'λ₯Ό μ μ λ‘ νλ€.
μ¬κΈ°μ λ§νλ λλ©μΈμ 'ν
μ€νΈμ κ΄λ ¨λ κΈ°λ₯μ μννλλ° νμν μ§μ μμ'μ λν λΆλΆμ μλ―Ένλ€.
λλ©μΈ(domain)μ΄λ, μμμ΄λ λΆμΌ μ λ°μ μ§μΉνλ λ¨μ΄λ‘, ITμμλ DNS μμ€ν μ μΈν°λ· μ£Όμλ₯Ό μλ―ΈνκΈ°λ νλ€.
νΉν, MSAμ κ°μ μμμμλ λΉμ§λμ€λ₯Ό μ§ν±νλ μ€μκ°λ μ 'λΉμ§λμ€ λλ©μΈ(business domain)'μ΄λΌ μ§μΉνλ€.
λ³΄ν΅ μμ€ν
μ λ΄λΆμ μ‘°μνλ μΈλΆ APIλ₯Ό μ‘°ν©νμ¬ μμ APIλ₯Ό ꡬμ±νκ³ ν¨μμ μ νΈλ¦¬ν°λ₯Ό ν΅ν΄ λμνλλ‘ μ€κ³νλ€.
μ΄λ° μ€κ³λ‘ ꡬνλ μμ APIμ ν¨μλ μ νΈλ¦¬ν°λ₯Ό ν
μ€νΈ μ½λμμ λμμ΄ λλ νΉμν APIκ° λλ€.
μ¦, ν
μ€νΈλ₯Ό ꡬννλ λΉμ¬μμ ν
μ€νΈ μ½λλ₯Ό 보λ λ
μλ₯Ό λμμ£Όλ κ²μ΄ λλ©μΈμ μ§μ€νλ ν
μ€νΈ μΈμ΄μ΄λ€.
μ²μλΆν° νΉμ APIλ₯Ό μ€κ³ν΄μ μμνμ§ μλλ€. (νκΈ°λ νλ€λ€.)
κ³μλλ 리ν©ν°λ§μ ν΅ν΄ κ°μ νκ³ νλΆνκ² νννλλ‘ λ°μ μν€λ κ²μ΄λ€.
μΈν 리μ μ΄(IntelliJ)μ μ½νλ¦°(Kotlin)μΌλ‘ μ λͺ ν JetBrain μ¬μ MPSλ μ΄ DSLμ μν κ³ μλ IDEμ΄λ€.
(μμ©ν΄μ΄λ μλ μκ°λ₯Ό ν΅ν΄ μ‘΄μ¬μ¬λΆ μ λλ μμλμ.)
μμ ν
μ€νΈλ₯Ό ν¬κΈ°νκ²λ νμ μ΄λ€λ©΄μμλ μ¬λ°λ₯Έ νλ¨μ λ΄λ¦° μ λ μ‘΄μ¬νλ€.
ν
μ€νΈ APIμ μ μ©νλ νμ€μ μ€μ μ½λμ μ μ©νλ νμ€κ³Ό νμ€ν λ€λ₯΄λ€.
λ¨μνκ³ , κ°κ²°νκ³ , ννλ ₯μ΄ νλΆν΄μΌ νμ§λ§, μ€μ μ½λλ§νΌ ν¨μ¨μ μΌ νμλ μλ€.
λ¬Όλ‘ ν μ€νΈ μ’ λ₯κ° λ§κ³ λ€μν΄μ§λ©΄, ν μ€νΈ μ±λ₯λ ν¨μ¨μ±μ μ°ΎμμΌ νλ€. κ·Έλ¬λ μ΄ λ¬Έμ₯μ μλλ
κ·Έλλ μ€μ μ½λ보λ€λ ν¨μ¨μ±μ μΆκ΅¬νμ§ μλλ€λΌλ λμμ€μ΄λ€.
162 νμ΄μ§μ λͺ©λ‘ 9-3μμ λͺ©λ‘ 9-4, λͺ©λ‘ 9-5λ‘ λ¦¬νν°λ§λ λ³νλ₯Ό 보μ.
-
κΈ°μ‘΄ ν μ€νΈ μ½λλ ν¨μ¨μ±μ μμν λλ¨Έμ§ νλμ ν μ€νΈ μΌμ΄μ€μ λͺ¨λ λ΄μ©μ΄ λ΄κ²¨μ Έ μλ€.
μνκΉμ§λ§ ν μ€νΈκ° νλ μΌμ΄ ν λμ λ€μ΄μ€μ§ μλλ€. -
리ν©ν°λ§λ ν μ€νΈ μΌμ΄μ€λ₯Ό λΆλ¦¬ν΄μ μ€νν νμ ν¨μ¨μ±μ λ¨μ΄μ‘μμ§λΌλ, λλΆμ ν μ€νΈ λ΄μ©μ΄ λͺ λ£ν΄μ‘λ€.
(μ€νλ € ν μ€νΈ μ½λλ₯Ό μ½λ κ³Όμ μ΄ μ¬λ μ¬λ°κΈ°λ νλ€.)
ν μ€νΈ μΌμ΄μ€κ° μ΄ν΄νκΈ° λ무λ μ½λ€λ μ¬μ€μ΄ λΆλͺ ν λλ¬λκΈ° λλ¬Έμ΄λ€. -
ꡬλλλ νλ‘κ·Έλ¨μ μΌλ°μ μΌλ‘ νμ λ μμμ κ³΅κΈ λ°μμ λμνλ€.
κ·Έλ¬λ ν μ€νΈ νκ²½μ κ²μ¦μ μν΄μλΌλ μμμ λν μ μ½μ΄ μκ±°λ μλμ μΌλ‘ μ½ν κ°λ₯μ±μ΄ λλ€. -
CPU ν¨μ¨μ±κ³Ό λ©λͺ¨λ¦¬ κ΄λ¦¬ λ±μ μ€μ νκ²½μμλ μ λλ‘ λ°μν΄μ μλμ§λ§,
ν μ€νΈ νκ²½μμλ§νΌμ μ ν λ¬Έμ μλ λ°©μμ΄λ€.
(μ€νλ € ν μ€νΈ μμμ λ ν¬μ¬ν΄μ λΉ λ₯Έ κ²°κ³Όλ‘ κ²°μ μ νλ κ²½μ°λ μ‘΄μ¬νλ€.)
μ¦, μ½λμ κΉ¨λν¨κ³Ό μ΄μ€ νμ€μ μλ‘ μ² μ ν 무κ΄νλ€
μ€μ μ½λμ ν
μ€νΈ μ½λμ νμ§μ΄ λ€λ₯΄λλΌλ, μ½λμ κΉ¨λν νμ§μ΄ μ ν΄νλ μ΄μ κ° λ μ μλ€.
ν
μ€νΈ μ½λ μμ±μ ν
μ€νΈ μΌμ΄μ€μ assert λ¬Έμ λ¨ νλλ§ μ¬μ©ν΄μΌ νλ€κ³ μ£Όμ₯νλ ννκ° μλ€.
κ°νΉν κ·μΉμ΄μ§λ§, νμ€ν μ₯μ μ΄ μλ€.
νλμ ν¨μμ νλμ assert λ¬Έμ΄ νλμ κ²°λ‘ μΌλ‘ μ μν λλΆμ μ½λλ₯Ό μ΄ν΄νκΈ° μ½κ³ λΉ λ₯΄κ² λμνλ€.
κ·Έλ¬λ λΆννκ²λ, ν
μ€νΈλ₯Ό λΆλ¦¬νλ©΄ μ€λ³΅λλ μ½λκ° λ§μμ Έμ ν
μ€νΈ μνΈκ° λΉλν΄μ§λ€.
λ¬Όλ‘ , Template Method Patternμ μ¬μ©νλ©΄ μ€λ³΅μ μ κ±°ν μ μκ³ ,
@Beforeμ κ°μ΄ λͺ¨λ @Test μ μ λμνλλ‘ μ€λ³΅μ μ μΈν μλ μμ§λ§ μ¬μ ν μνΈλ λΉλνλ€
λ°λΌμ, ν
μ€νΈ μΌμ΄μ€λ νλμ assert λ¬ΈμΌλ‘ μ μλ νλμ κ²°λ‘ μ μ§μ€νκΈ° 보λ€
νλμ κ°λ
μ μ§μ€ν΄μ μ΅λν assert λ¬Έμ μ€μ΄κ³ κ°κ²°νκ² μ μνλ κ²μ΄ λ°λμ§νλ€.
κΉ¨λν ν μ€νΈλ λ€μ λ€μ― κ°μ§ κ·μΉμ λ°λ₯΄κ² λλλ°, μ΄λμ μ λͺ¨μΌλ©΄ FIRSTκ° λλ€.
-
F(fast)
λΉ¨λΌμΌνλ€. λΉ¨λΌμΌ μμ£Ό νμΈνλ€.
λ리면 λ§μκ» μ 리νμ§ λͺ»νλ―λ‘ μ½λ νμ§μ΄ λ¨μ΄μ§κΈ° μμνλ€. -
I(independent)
ν μ€νΈλ μλ‘ μμ‘΄ν΄μ μλλ€. νλμ ν μ€νΈκ° λ€μ ν μ€νΈ μ€ν νκ²½μ μ€λΉν΄μλ κ΄μ¬ν΄μλ μλλ€.
ν μ€νΈκ° μμ‘΄νλ©΄ νλμ μ€ν¨κ° μ°μλλ―λ‘ μμΈ μ§λ¨μ΄ μ΄λ €μ μ§κ³ κ²°ν¨μ΄ μ¨μ΄λ λ€. -
R(repeatable)
μ΄λ€ νκ²½μμλ λ°λ³΅μ μΌλ‘ λμν μ μλλ‘ κ΅¬μ±ν΄μΌ νλ€.
ν μ€νΈκ° λμκ°μ§ μλ νκ²½μ΄λΌμ ν μ€νΈλ₯Ό μ€ν¨νλ€λ λ³λͺ μ΄ μκΈ΄λ€.
νκ²½μ΄ μ§μλμ§ μλ κ²½μ° ν μ€νΈλ₯Ό μνν μ μκ³ κ²μ¦ κ²°κ³Όλ₯Ό νμΈν μ μλ€. -
S(self-validating)
ν μ€νΈ κ²°κ³Όλ λ°λμ Boolean κ°μΌλ‘ λ°νν΄μΌλ§ νλ€.
ν΅κ³Ό μ¬λΆλ₯Ό μλ¦¬λ €κ³ λ‘κ·Έ νμΌμ μ½κ² λ§λ€μ΄μλ μλλ€. νμΌμ μ½μ΄ κ²°κ³Όλ₯Ό λΉκ΅νλλ‘ ν΄μλ μλλ€.
ν΅κ³Ό/μ€ν¨ 2κ°μ§λ‘λ§ κ°λ νμ§ μκ³ μ£Όκ΄μ΄ κ°μ λλ©΄ μμμ νκ°λ‘ μ΄μ΄μ§λ€.(λ²μ¨λΆν° μ§λ£¨νλ€) -
T(timeply)
ν μ€νΈλ μ μμ μμ±νκ³ λμν΄μΌ νλ€.
λ¨μ ν μ€νΈλ ν μ€νΈ νλ €λ μ€μ μ½λλ₯Ό ꡬννκΈ° μ§μ μ ꡬνν΄μΌ νκ³ ,
μ€ν¨νλ μ½λλ₯Ό μ±κ³΅μΌλ‘ λ§λ€κΈ° μν κ°λ°μ μν λ°λ³΅λλλ‘ μ μ ν μμ μ λ°λ³΅ν΄μΌ νλ€.
μ¬μ€ λ³Έμ§μ μΈ TDDλ λ€λ£¨μ§ μμλ€. ν
μ€νΈ μ½λκ° νμν μ΄μ λ₯Ό μ΄ν΄νκ³ ν
μ€νΈλ₯Ό κ²ν₯κΈ°λ‘ νμλ€.
μ€μ λ‘ κΉ¨λν ν
μ€νΈλ λ³λμ μ±
μΌλ‘ λ€λ€λ λ λ§νΌ μ¬λμλ μ£Όμ μ΄λ€.
μ€μ μ½λλ§νΌ ν
μ€νΈ μ½λλ μ€μνκ³ , λ°λ³΅μ μΌλ‘ νλ‘μ νΈ κ±΄κ°μλ μν₯μ λ―ΈμΉλ€.
λΆλͺ μ²μ ν μ€νΈ μ½λλ₯Ό μ§κ³ , DSLμ νΉνλ ν μ€νΈ APIλ₯Ό κ³ λ―Όνκ³ κ΅¬μΆνλ κ²μ λλ¨ν νλ€λ€.
κ·Έλ¬λ κ°κ²°νκ² μ 리νκ³ λ°λ³΅λ λ λ§λ€ κ·Έλ§νΌ ν μ€νΈ μ½λλ₯Ό μμ±νκΈ° μ¬μμ§λ€.λ°λ©΄, TDDλ₯Ό λμ νλ μ₯μ μμ μ΄λ¬ν μκ°κ³Ό λ Έλ ₯μ κ°μνμ§ λͺ»νλ©΄
μ΄μ€ν ν μ€νΈ μ½λμ ν¨κ» λ°©μΉνκ² λκ³ κ²°κ΅ νλ‘μ νΈμ μ€μ μ½λλ λ§κ°μ§κ² λλ€.
ν μ€νΈ μ½λλ κΉ¨λνκ² μ μ§νμ.
-
λ¬λ μ»€λΈ (Learning curve)
κ° μΈμ΄μ νλ μμν¬μμλ ν¨μ¨μ μΈ ν μ€νΈλ₯Ό μν΄ TDDλ₯Ό μν νμ€ ν μ€νΈ λꡬλ₯Ό κΆμ₯νλ€.
κ°λ°μ κ°μλ ν μ€νΈ λꡬ νΉμ μΈμ΄μ μΈ μ¬κ±΄μ λ°λΌμ, μ€μ κ³Ό μ¬μ©λ²μ μ΅νκΈ° μν νμ΅ κ³Όμ μ΄ μλ°λλ€. -
λ¨νμ (Ramp-up)
μΈλ» 보기μλ λ¬λ 컀λΈμ μ μ¬ν΄λ³΄μ΄μ§λ§, TDDλ₯Ό μν λ¨νμ μ ν μ°¨μμμ μλ 2κ°μ§λ₯Ό λͺ¨λ ν¬ν¨νλ€.- λΉμ§λμ€ λλ©μΈ λ° μλΉμ€ λ‘μ§ μ΄ν΄ ν, ν μ€νΈ μ½λ μμ±ν μ μλ μμ€μΌλ‘μ λ¨νμ
- νμ μ μν΄
-
μ λ°μ μΈ κ°λ°μ μλ ¨λ (Developer's Performance)
ν μ€νΈλ₯Ό ν΅ν΄μ μ½λ νμ§μ΄ μ¬λΌκ°λ λ§νΌ, κ°λ°μμ μλ ¨λκ° μ¬λΌκ°μΌ νλ€λ μλ―Έμ΄λ€.- (ν¬μμ μ μ₯μμ μꡬμ¬ν κ°λ°μ μ§μ²μ΄ μμ΄λ³΄μ΄λ) κ°μ±λΉλ₯Ό κ³ λ €ν ν μ€νΈ λꡬμ μ νκ³Ό κ·Έ λ²μ, κΉμ΄ μ ν
- ν
μ€νΈμ μ체μ μ§μ€νκΈ° μν΄
setting-lessλ₯Ό μν 리λ κ°λ°μλ€μ λ Έλ ₯, λ΄λΆ 곡μ , κ·Έλ¦¬κ³ κ΄λ¦¬
-
ν μ€νΈ μλνκ° λΆκ°λ₯ν μμλ μλ€.
λλ©μΈ νΉμ μΈμ΄, νκ²½μ΄λ μ¬κ±΄μ λ°λΌμ λͺ¨λ μν©μ μμ νκ³ ν μ€νΈν μ μκΈ°λ νλ€.κ°λ Ή, λ©ν° μ€λ λ νκ²½μμ λμμ±μ μ°κ΄λμ΄ κ°νμ μΌλ‘ λ°μνλ λ©λͺ¨λ¦¬ λμλ μΉλͺ μ μΈ λ²κ·Έμ κ΄λ ¨λ ν μ€νΈλ
μ λ§ν λ Έλ ₯κ³Ό μκ°, κ·Έλ¦¬κ³ κ²½νμΉλ₯Ό κ°μ§ μ¬λμ΄ λͺ¨μ¬μ μ§μ€ν μ μλ ν¬μλ ₯μ κ°μ§ νμ΄ μλλΌλ©΄
νμ€μ μΌλ‘ μ¬ν μμ²΄κ° μ΄λ ΅κ±°λ μλνλ 루ν΄μ λ§λ€λλ‘ μ ννκΈ° μ΄λ €μ΄ λΆλΆλ μλ€.
π Prerequisites
π How to use
π Clean Code
π Meaningful Names + Extra
π Functions
π Comments
π Formatting
π Objects and Data Structures
ongoing! π
π Error Handling
π Boundaries
π Unit Tests
π Classes
π Systems
π Emergence
up-to-here! π
π§· Concurrency
π§· JUnit Internals
(