Skip to content
Choi Da-in edited this page Jan 14, 2024 · 32 revisions

Welcome to the tdd-challenge wiki!

Test-Driven Development : By Example

2023-09-07 (μ„œλ¬Έ, 1μž₯ ~51p)

  • 이세λͺ…
    • λΉ¨κ°•, 초둝, 그리고 λ¦¬νŒ©ν† λ§. 무엇이든 λ¨Όμ € μ‹œμž‘ν•˜κ³ , μ‹œν–‰μ°©μ˜€λ₯Ό 거치며 κ°œμ„ ν•΄λ‚˜κ°€λŠ” 과정이 μ‚΄λ©΄μ„œ 마주칠 수 μžˆλŠ” λ§Žμ€ 문제의 ν•΄κ²°κ³Όμ •κ³Ό λΉ„μŠ·ν•˜μ§€ μ•Šμ„κΉŒ ν•˜λŠ” 생각이 λ“ λ‹€.
  • μ •λ‹€ν˜„
    • TDDλ₯Ό λ‚΄κ°€ μ΅ν˜”λŠ”κ°€? 라고 ν•˜λ©΄ μ•„λ‹Œ 것 κ°™μ•˜λŠ”λ°, μ±…μ—μ„œ TDD μˆ˜λ ¨λ²•μ„ μ†Œκ°œν•΄μ€˜μ„œ 따라해보고 μ‹Άλ‹€λŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ΄μ œκΉŒμ§€ 1) κ°„λ‹¨ν•˜κ³  μ‰¬μš΄ 문제둜 μ‹œλ„ ν•˜λŠ” μ—°μŠ΅μ„ ν–ˆλ‹€λ©΄ 2) μž‘μ€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ ν•˜λ‚˜λ₯Ό TDD둜 μ™„μ„±ν•΄λ³΄λŠ” 것 도 μž¬λ°Œμ„ 것 κ°™μ•„μš”! 2) 과정을 거쳐야 TDDκ°€ μ™œ 쒋은 μ§€ 와닿을 것 κ°™λ‹€λŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.
  • μ΅œλ‹€μΈ
    • ν•œκ΅­μ–΄νŒ μΈν„°λ·°μ—μ„œ μ•„λž˜μ™€ 같은 말이 λ‚˜μ™”λŠ”λ° μΆ©κ²©μ΄μ—ˆλ‹€.
      λ‚΄κ°€ 아직 기술이 λΆ€μ‘±ν•΄μ„œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜μ§€ λͺ»ν•˜λŠ” 것일 뿐 λͺ¨λ“  것을 ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€λŠ” 것에 곡뢀할 것이 λ§ŽμŒμ„ λŠκΌˆλ‹€.

    μ΅œκ·Όμ— 만델브둜트(Mandelbrot) λΈŒλΌμš°μ €λ₯Ό ν”„λ‘œκ·Έλž˜λ°ν–ˆλŠ”λ°, ν”½μ…€ ν•˜λ‚˜μ— λŒ€ν•΄μ„œλŠ” ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  수 μ—†λ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. μ΄μ œλŠ” 그런 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€λŠ” 것을 κΉ¨λ‹¬μ•˜μœΌλ©° (μƒλž΅)

  • ν•œμ§€μ›
    • ν…ŒμŠ€νŠΈμ½”λ“œ 없이 κ°œλ°œμ„ ν•˜λ©° 느꼈던 문제 듀이 TDDλ₯Ό 톡해 μ–΄λŠμ •λ„ ν•΄κ²° 될 수 μžˆμ„ 것 κ°™λ‹€λŠ” 확신을 μ‹¬μ–΄μ£ΌλŠ” λ“œλŠ” νŒŒνŠΈμ˜€μŠ΅λ‹ˆλ‹€. 처음 μ±Œλ¦°μ§€λ₯Ό ν•  λ•Œ ν…ŒμŠ€νŠΈμ½”λ“œμ™€ μΉœν•΄μ§€κΈ° μœ„ν•΄ ν–ˆλ˜ κ³Όμ œλ“€μ΄ 이 μ±…μ˜ 과정에 더 λͺ°μž…ν•˜κ²Œ λ§Œλ“€μ–΄ μ£Όκ³ μžˆλ‹€λŠ” 생각도 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.

2023-09-14 (52p ~ 112p)

  • 이세λͺ…
    • TDDλž€ μ‘°μ’…ν•΄λ‚˜κ°€λŠ” 과정이닀!
  • μ •λ‹€ν˜„
    • OOPλ₯Ό κ³΅λΆ€ν•˜λŠ” λŠλ‚Œμ΄μ—ˆλ„€μš”.. λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œ 달라진 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ°˜μ˜ν•΄μ„œ μ–΄λ–»κ²Œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μˆ˜μ •ν•΄λ‚˜κ°€λŠ”μ§€ μ•Œμ•„λ³Ό 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€!
    • μ˜ˆμ‹œ μ½”λ“œκ°€ μžλ°”λΌμ„œ 이해가 μ–΄λ ΅λ„€μš” γ… γ…  μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μ˜ˆμ‹œ μ½”λ“œλ₯Ό 같이 κ΅¬ν˜„ν•΄λ³΄λ©΄μ„œ κ³΅λΆ€ν•΄λ³΄λŠ” 건 μ–΄λ–¨κΉŒμš”!
  • μ΅œλ‹€μΈ
    • μ‚Όκ°μΈ‘λŸ‰ μ „λž΅μ΄λΌλŠ” μ΅μˆ™ν•˜μ§€λ§Œ μΆ”μƒμ μ΄μ—ˆλ˜ 방식을 λͺ…μ‹œν•΄μ£Όμ–΄μ„œ, μ•žμœΌλ‘œ μ˜μ‹μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμ„ 것 κ°™λ‹€.
    • 11μž₯ κΉŒμ§€μ˜ μ˜ˆμ œμ—μ„œ 상속 κ΄€κ³„μ˜ 클래슀λ₯Ό λ§Œλ“€μ—ˆλ‹€κ°€ μ œκ±°λ˜λŠ” κ³Όμ •μ—μ„œ, μ•„ν‚€ν…μ²˜ 주도 개발(architecture-driven develop)κ³Ό μ • λ°˜λŒ€λΌλŠ” 말을 μ‹€κ°ν–ˆλ‹€. ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³  ν†΅κ³Όμ‹œν‚€λŠ” κ³Όμ •μ—μ„œ μ•„ν‚€ν…μ²˜λŠ” μžμ—°μŠ€λŸ½κ²Œ λ”°λΌμ˜€λŠ” 것이 인상적이닀.
    • μΌ„νŠΈ 백의 κΈ‰λ°œμ§„ ν¬μΈνŠΈλ“€μ΄ λ„ˆλ¬΄ μž¬λ―Έμžˆλ‹€.🀣

      νŒ€μœΌλ‘œ λŒμ•„κ°€μ„œ, "μΌ„νŠΈκ°€ 섀계 μ–΄μ©Œκ΅¬ ν•˜λŠ” 것은 λͺ¨μ‘°λ¦¬ μ€‘μš”ν•˜μ§€ μ•Šλ‹€κ³  ν–ˆλ‹€."κ³  μ „ν• μ§€ λͺ¨λ₯΄κ² λ‹€. 멈좰라.

  • ν•œμ§€μ›
    • μ˜ˆμ‹œκ°€ μžλ°”λΌ 쑰금 μ–΄μƒ‰ν–ˆμ§€λ§Œ μ €μžμ˜ μ½”λ“œλ₯Ό 순차적으둜 λ”°λΌν•˜λ©΄μ„œ TDD에 λŒ€ν•œ 감이 μž‘ν˜€κ°”μŠ΅λ‹ˆλ‹€.

2024-01-09 (113p ~ 157p)

  • 이세λͺ…
    • μ €μžκ°€ μž‘μ„±ν•œ 메타포가 μ΄ν•΄ν•˜κΈ° μ–΄λ €μ› λ‹€. TDDλ₯Ό μœ„ν•œ κΈ°λŠ₯은 μ•„λ‹Œ 것 κ°™μ•˜μ§€λ§Œ μƒˆλ‘œμš΄ νŒ¨λŸ¬λ‹€μž„μ„ 읡힌 λŠλ‚Œμ΄μ—ˆλ‹€.
    • μ›λ¬Έμ˜ 언어와 μš°λ¦¬κ°€ κ΅¬ν˜„ν•˜λŠ” μ–Έμ–΄μ˜ 차이둜 μΈν•œ 좔가적인 곡뢀가 더 ν•„μš”ν•  것 κ°™λ‹€.
    • ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό 망치고 그게 λŒμ•„κ°€λ©΄ TDDλŠ” μ„±κ³΅ν•œκ±ΈκΉŒ? 🀭
  • ν•œμ§€μ›
    • 14μž₯: λ¦¬νŒ©ν† λ§ 과정에 ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό 톡해 μ‹€μˆ˜λ₯Ό λ°œκ²¬ν•˜κ³ , 그것을 λ°”λ‘œ κ³ μΉ˜λŠ” 것이 μ•„λ‹ˆλΌ κ΄€λ ¨λœ 또 λ‹€λ₯Έ ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό μΆ”κ°€ν•˜μ—¬ 그것을 to do list처럼 ν™œμš©ν•œ 과정이 μΈμƒκΉŠμ—ˆλ‹€.
    • 15μž₯: μž‘μ—…μ„ ν•˜λ‚˜μ”© ν•΄κ²°ν•˜λŠ” κ³Όμ •μ—μ„œ μš°μ„  μΌλ°˜ν™”λ₯Ό μ‹œν‚€κ³  컴파일러의 μ—λŸ¬λ©”μ‹œμ§€μ— 따라 μ μ§„μ μœΌλ‘œ 전체 μ˜μ—­μ„ μˆ˜μ •ν•΄ λ‚˜κ°€λŠ” 방식이 λ‚˜μ™”λŠ”λ°, 이전 μž₯의 λ‚΄μš©κ³  λ”λΆˆμ–΄ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방식이 μ—¬λŸ¬κ°€μ§€λΌλŠ” 것을 μ²΄κ°ν–ˆλ‹€.
    • 16μž₯: κ·Έλ™μ•ˆμ€ μ €μžκ°€ TDDλ₯Ό μ§„ν–‰ν•˜λŠ” 과정에 μ§‘μ€‘ν•΄μ„œ λ”°λΌν–ˆμ—ˆλŠ”λ°, 이 μž₯μ—μ„œλŠ” 경제적으둜 TDDλ₯Ό μ§„ν–‰ν•˜κ³  μžˆλŠ”μ§€μ™€ μ œλŒ€λ‘œ μ§„ν–‰λ˜κ³  μžˆλŠ”μ§€μ— λŒ€ν•΄ 생각해볼 수 μžˆλŠ” λ‚΄μš©μ„ λ‹€λ£¨μ—ˆλ‹€.
    • 17μž₯: κ·Έλ™μ•ˆ ν•΄μ™”λ˜ 과정듀이 μš”μ•½λ˜μ–΄μžˆμ—ˆλŠ”λ° μ €μžκ°€ 각 μž₯μ—μ„œ μ–΄λ–€ 의미λ₯Ό μ „λ‹¬ν•˜κ³ μžν–ˆλŠ”μ§€, 뭘 배우고 뭘 λ†“μ³€λŠ”μ§€ 생각할 수 μžˆμ—ˆλ‹€. 또 TDD의 λΆ€μ‚°λ¬Όλ‘œ λ‚˜μ˜¨ ν…ŒμŠ€νŠΈμ½”λ“œκ°€ μ„±λŠ₯κ³Ό μ‚¬μš©μ„±ν…ŒμŠ€νŠΈ λ“± μœ μ§€λ³΄μˆ˜ κ·Έ μ΄μƒμ˜ κΈ°λŠ₯κΉŒμ§€ 해쀄것이라고 μ˜ˆμƒν•˜μ§€λ§λΌλŠ” 말이 κ°€μž₯ μ™€λ‹Ώμ•˜λ‹€.
  • μ΅œλ‹€μΈ
    • 12μž₯: 닀쀑 톡화 연산을 κ΅¬ν˜„ν•  λ•Œ λ‚˜λŠ” 머리에 μ €μžκ°€ 처음 λ§ν•œ μ°Έμ‘° 톡화 방법을 λ– μ˜¬λ ΈλŠ”λ°, 이게 μ–΄λ €μš΄ 방식이라며 μƒˆλ‘œμš΄ 방법을 μ œμ•ˆν•œ 것이 μΈμƒκΉŠμ€ μ±•ν„°μ˜€λ‹€.
    • 13μž₯: μœ μ΅ν•˜λ‹€. μ—¬λŸ¬ 클래슀 객체듀에 λŒ€ν•΄ λ™μΌν•œ 연산을 κ΅¬ν˜„ν•  λ•Œ, 각 ν΄λž˜μŠ€λ³„λ‘œ λŒ€μ‘ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” λŒ€μ‹ , λ‹€ν˜•μ„±μ„ μ‚¬μš©ν•˜μ—¬ 각 클래슀 λ‚΄λΆ€μ μœΌλ‘œ κ΅¬ν˜„μ„ λ§žμΆ°μ£Όμ–΄ μ½”λ“œλ₯Ό 쀄인 뢀뢄이 μœ μ΅ν–ˆλ‹€. μ‹€λ¬΄μ—μ„œ μΆ©λΆ„νžˆ μ μš©ν•΄λ³Ό 수 μžˆμ„ 것 κ°™λ‹€. 그리고 μš”μ¦˜ IDEμ—μ„œλŠ” ν•¨μˆ˜λ“€ νŠΈλž˜ν‚Ήμ΄ 잘 λ˜μ–΄μ„œ μ „ν˜€ λŠλΌμ§€ λͺ»ν–ˆλŠ”λ°, ν‚€μ›Œλ“œ 맀개 λ³€μˆ˜λ₯Ό μ§€μ›ν•˜λŠ” μ–Έμ–΄(python λ“±)κ°€ μ•„λ‹Œ μœ„μΉ˜ 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μ–Έμ–΄λŠ” κ·Έ μ˜λ„λ₯Ό μ „λ‹¬ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆλ‹€λŠ” 것을 μƒˆμ‚Ό λŠκΌˆλ‹€.
    • 14μž₯: 톡화에 λŒ€ν•œ ν™˜μœ¨μ„ μ €μž₯ν•˜λŠ” 객체λ₯Ό νƒœμŠ€νŠΈ ν•  λ•Œ, JUnit ν…ŒμŠ€νŠΈ μ½”λ“œμ—μ„œ 객체의 ν”„λ‘œνΌν‹° κ°’ 동일성을 확인해주지 μ•Šμ•„ equalsλ₯Ό λ³„λ„λ‘œ κ΅¬ν˜„ν–ˆλŠ”λ°, Viteλ‚˜ Jestμ—μ„œλŠ” toMatchObject등을 μ œκ³΅ν•˜μ—¬ μ‰½κ²Œ μž‘μ„±κ°€λŠ₯ν•  것 κ°™λ‹€. ν™˜μœ¨μ— κ΄€ν•œ ν•΄μ‹œν…Œμ΄λΈ”μ„ κ΅¬ν˜„ν•˜λŠ” 뢀뢄이 μ‹ κΈ°ν–ˆλ‹€.
    • 15μž₯: Composite Pattern μ΄λΌλŠ” 말이 λ‚˜μ™”λ‹€. κ°œλ°œμ—μ„œλ„ 자주 λ“£λŠ” 말인데 Composite, Factory λ“± 자주 μ‚¬μš©λ˜λŠ” λ””μžμΈ νŒ¨ν„΄μ„ μ•Œμ•„λ³΄μ•„μ•Ό ν•  λ“― ν•˜λ‹€.
    • 16μž₯: λ¬Έμ„œλ‘œμ„œ ν…ŒμŠ€νŠΈμ½”λ“œμ˜ μ€‘μš”μ„±μ— κ΄€ν•œ λ‚΄μš©μ΄ λ‚˜μ™”λ‹€. ν…ŒμŠ€νŠΈμ½”λ“œλŠ” κΈ°λŠ₯을 빠짐없이 ν…ŒμŠ€νŠΈν•˜κ³  κ²€μ¦ν•΄μ•Όν•˜μ§€λ§Œ, λ”λΆˆμ–΄ ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό 톡해 λ‹€λ₯Έ κ°œλ°œμžλ“€μ΄ μ½”λ“œμ— λŒ€ν•΄ 잘 이해할 수 μžˆλ„λ‘ μž‘μ„±λ˜μ–΄μ•Όν•œλ‹€. μ˜ˆμ œμ— ν΄λž˜μŠ€κ°€ λ§Žμ•„μ§€κ³  각 ν΄λž˜μŠ€μ— λ™μΌν•œ λ©”μ„œλ“œκ°€ κ΅¬ν˜„λ˜κ³  μžˆλŠ”λ° μ±…μ˜ μ½”λ“œλ§Œλ΄μ„œλŠ” κ·Έ 흐름을 μ΄ν•΄ν•˜κΈ° μ–΄λ €μš΄ 것 κ°™λ‹€. μŠ€ν„°λ””μ—μ„œ 직접 μž‘μ„±ν•΄λ³΄μ•„μ•Όκ² λ‹€.
    • 17μž₯: μ§€κΈˆκΉŒμ§€ μ§„ν–‰ν•œ Money 예제의 νšŒκ³ μ΄λ‹€. Moneyμ˜ˆμ œμ—μ„œ 아직 μ™„μ„±λ˜μ§€ μ•Šμ€ 뢀뢄도 μ •λ¦¬ν•˜λŠ”λ°, μΆ”κ°€λ‘œ μ§„ν–‰ν•΄λ³΄λŠ” 것도 쒋을 것 κ°™λ‹€. JUnit의 μ‹€ν–‰ 둜그λ₯Ό 톡해 ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ”λ° κ±Έλ¦° μ‹œκ°„μ„ λΆ„μ„ν•œ 뢀뢄도 μž¬λ―Έμžˆμ—ˆλ‹€. ν…ŒμŠ€νŠΈμ½”λ“œμ™€ μ‹€μ œ μ½”λ“œμ˜ λΉ„μœ¨μ΄ μœ μ‚¬ν•œ 점도 μž¬λ―ΈμžˆλŠ” 결과인 것 κ°™λ‹€. μš°λ¦¬κ°€ Typescript둜 λ²ˆμ—­ν•œ μ΅œμ’… μ½”λ“œμ—μ„œλ„ 톡계λ₯Ό 내보면 쒋을 것 κ°™λ‹€.

Clone this wiki locally