본문으둜 κ±΄λ„ˆλ›°κΈ°

🌈 Chapter 20: ν…ŒμŠ€νŠΈμ— κ·€ 기울이기

  • TDDλŠ” μ½”λ“œλ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ”, 즉 κΈ°λŠ₯κ³Ό μ„±λŠ₯처럼 κ²‰μœΌλ‘œ λ“œλŸ¬λ‚˜λŠ” ν’ˆμ§ˆ 속성을 κ²€μ¦ν•˜λŠ” ν™œλ™μ— κ΄€ν•œ 것이닀.
  • TDDλŠ” μ½”λ“œμ˜ λ‚΄λΆ€ ν’ˆμ§ˆ 속성에 κ΄€ν•œ ν”Όλ“œλ°±, 즉 클래슀의 결합도와 응집λ ₯, λͺ…μ‹œμ μ΄κ±°λ‚˜ 감좰진 μ˜μ‘΄μ„±, 효과적인 정보 은닉 λ“± μ½”λ“œλ₯Ό μœ μ§€ 보수 κ°€λŠ₯ν•œ μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” ν’ˆμ§ˆ 속성에 κ΄€ν•œ μž‘μ—…μ΄κΈ°λ„ ν•˜λ‹€.
  • ν…ŒμŠ€νŠΈ μ•…μ·¨μ—λŠ” 두 μ’…λ₯˜κ°€ μžˆλ‹€.
    • ν…ŒμŠ€νŠΈ μžμ²΄κ°€ μ œλŒ€λ‘œ μž‘μ„±λΌ μžˆμ§€ μ•Šμ€, 즉 ν…ŒμŠ€νŠΈκ°€ λΆˆλΆ„λͺ…ν•˜κ±°λ‚˜ λΆˆμ•ˆμ •ν•˜κ²Œ μž‘μ„±λœ 경우
    • ν…ŒμŠ€νŠΈμ—μ„œ λŒ€μƒ μ½”λ“œκ°€ 문제라고 κ°•μ‘°λ˜λŠ” 경우 (ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš΄ μ½”λ“œ)

πŸ“š λŒ€μ²΄ν•  수 μ—†λŠ” 객체에 λŒ€ν•΄ λͺ© 객체λ₯Ό μ μš©ν•΄μ•Ό ν•œλ‹€(λ§ˆλ²•μ„ 쓰지 μ•Šκ³ )​

  • μ „μ—­ 값을 μ‚¬μš©ν•΄ μΊ‘μŠν™”λ₯Ό μš°νšŒν•¨μœΌλ‘œμ¨ μ»΄ν¬λ„ŒνŠΈ ν˜ΈμΆœμžλ‘œλΆ€ν„° μ˜μ‘΄μ„±μ„ 감좜 수 μžˆμ§€λ§Œ κ·Έλ ‡κ²Œ ν•œλ‹€κ³  ν•΄μ„œ μ˜μ‘΄μ„±μ΄ 사라지지 μ•ŠμœΌλ©°, 단지 μ˜μ‘΄μ„±μ— μ ‘κ·Όν•  수 μ—†κ²Œ 될 뿐이닀.
  • μ½”λ“œ ꡬ쑰화 기법 μΈ‘λ©΄μ—μ„œ 객체 지ν–₯의 λͺ©ν‘œ 쀑 ν•˜λ‚˜λŠ” 객체의 경계λ₯Ό λͺ…ν™•ν•˜κ²Œ λ³΄μ•„κ°œ ν•˜λŠ” 것이닀.
  • κ°μ²΄λŠ” 였직 μ§€μ—­μ μ΄κ±°λ‚˜(ν•΄λ‹Ή 객체의 λ²”μœ„ λ‚΄μ—μ„œ μƒμ„±λ˜κ³  κ΄€λ¦¬λ˜λŠ”) λͺ…μ‹œμ μœΌλ‘œ μ „λ‹¬λ˜λŠ” κ°’κ³Ό μΈμŠ€ν„΄μŠ€λ₯Ό 닀뀄야 ν•œλ‹€.

πŸ“š λ‘œκΉ…μ€ κΈ°λŠ₯이닀​

🐢 보쑰 λ‘œκΉ…β€‹

  • 보쑰 λ‘œκΉ…(였λ₯˜μ™€ 정보)은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ˜ 일뢀닀. 이 λ©”μ‹œμ§€λŠ” μ‹€νŒ¨λ₯Ό μ§„λ‹¨ν•˜κ±°λ‚˜ μ‹€ν–‰ 쀑인 μ‹œμŠ€ν…œμ˜ 진행 μƒνƒœλ₯Ό κ°μ‹œν•  λͺ©μ μœΌλ‘œ μ‹œμŠ€ν…œ κ΄€λ¦¬μžμ™€ 운영자λ₯Ό λΉ„λ‘―ν•΄ 지원 λ‹΄λ‹Ήμžλ₯Ό 좔적할 μ˜λ„λ‘œ μž‘μ„±λœ 것이닀.
  • 보쑰 λ‘œκΉ…μ€ κ°μ‹œλ‚˜ μ‹€νŒ¨ 볡ꡬ 같은 μš”κ΅¬ μ‚¬ν•­μœΌλ‘œλΆ€ν„° ν…ŒμŠ€νŠΈ 주도적이어야 ν•œλ‹€.

🐢 진단 λ‘œκΉ…β€‹

  • 진단 λ‘œκΉ…(디버그와 좔적)은 ν”„λ‘œκ·Έλž˜λ¨Έλ₯Ό μœ„ν•œ 기반 ꡬ쑰에 ν•΄λ‹Ήν•œλ‹€. 이 λ©”μ‹œμ§€λŠ” μ œν’ˆ μ½”λ“œλ‘œ μ „ν™˜ν•΄μ„œλŠ” μ•ˆ λ˜λŠ”λ°, ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν˜„μž¬ 개발 쀑인 μ‹œμŠ€ν…œ λ‚΄λΆ€μ˜ 진행 상항을 μ΄ν•΄λ‚˜λŠ” 도움을 쀄 λͺ©μ μœΌλ‘œ λ§Œλ“€μ–΄μ§€λŠ” 것이기 λ•Œλ¬Έμ΄λ‹€.
  • 진단 λ‘œκΉ…μ€ μ‹œμŠ€ν…œμ—μ„œ μΌμ–΄λ‚˜λŠ” 일을 μ„ΈλΆ€μ μœΌλ‘œ μΆ”μ ν•˜κ³ μž ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„μš”μ— 따라 μ£Όλ„λœλ‹€. κ·Έλž˜μ„œ 진단 λ‘œκΉ…μ€ ν…ŒμŠ€νŠΈ 주도적일 ν•„μš”κ°€ μ—†κ³  진단 λ‘œκΉ… λ©”μ‹œμ§€λŠ” 보쑰 둜그처럼 일관성을 μœ μ§€ν•  ν•„μš”κ°€ 없을지도 λͺ¨λ₯Έλ‹€.

πŸ“š ꡬ상 ν΄λž«μ— λŒ€ν•œ λͺ© 객체 μ μš©β€‹

  • μƒν˜Έ μž‘μš© ν…ŒμŠ€νŠΈμ— λŒ€ν•œ ν•œ 가지 접근법은 μΈν„°νŽ˜μ΄μŠ€κ°€ μ•„λ‹ˆλΌ ꡬ상 클래슀λ₯Ό λŒ€μƒμœΌλ‘œ λͺ© 객체λ₯Ό μ μš©ν•˜λŠ” 것이닀. 이 기법을 μ‚¬μš©ν•˜λ €λ©΄ λͺ© 객체λ₯Ό μ μš©ν•˜λ €λŠ” 클래슀λ₯Ό 상속받아 ν…ŒμŠ€νŠΈ λ‚΄μ—μ„œ 호좜될 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ ν•΄μ•Ό ν•œλ‹€. μš°λ¦¬κ°€ μƒκ°ν•˜κΈ°μ— 이 기법은 λ‹€λ₯Έ μ„ νƒμ˜ 여지가 없을 λ•Œλ§Œ 써야 ν•œλ‹€.
  • 클래슀의 λ‚΄λΆ€ κΈ°λŠ₯을 μž¬μ •μ˜ν•΄μ„œλŠ” μ•ˆ λœλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ ν˜„μž¬ κ΅¬ν˜„μ˜ μœ λ³„λ‚œ 뢀뢄에 ν…ŒμŠ€νŠΈκ°€ 묢여버린닀. κ°€μ‹œμ μΈ λ©”μ„œλ“œλ§Œ μž¬μ •μ˜ν•΄μ•Ό ν•œλ‹€.

πŸ“š 값에 λͺ© 객체λ₯Ό μ μš©ν•˜μ§€ λ§ˆλΌβ€‹

  • κ°’(μ–΄μ°Œ 됐든 λΆˆλ³€μ μ΄μ–΄μ•Ό ν• )에 λͺ© 객체λ₯Ό μ μš©ν•  μ΄μœ λŠ” μ „ν˜€ μ—†λ‹€. μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ„œ μ“°κΈ°λ§Œ ν•˜λΌ.
  • ν΄λž˜μŠ€κ°€ 값이 될 κ°€λŠ₯성이 μžˆμ–΄μ„œ λͺ© 객체λ₯Ό μ μš©ν•  ν•„μš”κ°€ μ—†λŠ” κ²½μš°μ— λŒ€ν•œ νœ΄λ¦¬μŠ€ν‹±μ΄ λͺ‡ 가지 μžˆλ‹€.
    1. ν•΄λ‹Ή 클래슀의 값은 λΆˆλ³€μ μ΄λ‹€.
    2. ν•΄λ‹Ή νƒ€μž…μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 클래슀λ₯Ό λŒ€μƒμœΌλ‘œ 의미 μžˆλŠ” 이름을 생각해낼 수 μ—†λ‹€.
  • κ°’μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κΈ°κ°€ λ„ˆλ¬΄ λ³΅μž‘ν•΄μ„œ 값을 λŒ€μƒμœΌλ‘œ λͺ© 객체λ₯Ό μ μš©ν•˜κ³  싢은 마음이 λ“ λ‹€λ©΄ λΉŒλ”λ₯Ό μž‘μ„±ν•˜λŠ” 방법을 κ³ λ €ν•˜μž(22μž₯ μ°Έκ³ )

πŸ“š λΉ„λŒ€ν•œ μƒμ„±μžβ€‹

  • TDD 과정이 μ§„ν–‰λ˜λŠ” κ³Όμ •μ—μ„œ μƒμ„±μžμ˜ 인자 λͺ©λ‘μ΄ κΈΈκ³  닀루기 μ–΄λ €μšΈ λ•Œκ°€ μžˆλ‹€. (λ³΄ν†΅ν•œ ν•œ λ²ˆμ— ν•˜λ‚˜μ”© 객체의 μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•  λ•Œ)
  • νŠΉμ • κ°œλ…μ„ λ‚˜νƒ€λ‚΄λŠ” 일뢀 인자λ₯Ό λ¬Άμ–΄ μƒˆλ‘œμš΄ 객체둜 λŒ€μ²΄ν•  수 μžˆλ‹€.
  • μ•”μ‹œμ μΈ μ»΄ν¬λ„ŒνŠΈλ₯Ό 뽑아낼 경우 두 가지 쑰건을 μ‚΄νŽ΄λ³΄λŠ” κ²ƒμœΌλ‘œ μ‹œμž‘ν•œλ‹€. ν•΄λ‹Ή ν΄λž˜μŠ€μ—μ„œ 늘 ν•¨κ»˜ μ‚¬μš©λ˜κ³  수λͺ…이 같은 μΈμžκ°€ 여기에 ν•΄λ‹Ήν•œλ‹€. 쑰건이 μΌμΉ˜ν•˜λŠ” 뢀뢄을 μ°Ύκ³  λ‚˜λ©΄ ν•΄λ‹Ή κ°œλ…μ„ μ„€λͺ…ν•˜λŠ” 더 λ‚˜μ€ 이름을 μ•Œμ•„λ‚΄λŠ” μ’€ 더 μ–΄λ €μš΄ 일이 λ‚¨λŠ”λ‹€.

πŸ“š ν˜Όλ™λ˜λŠ” 객체​

  • λΉ„λŒ€ν•œ μƒμ„±μžλ₯Ό μ§„λ‹¨ν•˜λŠ” 또 λ‹€λ₯Έ 방법은 객체에 역할이 λ„ˆλ¬΄ λ§Žμ•„μ„œ 객체 자체의 규λͺ¨κ°€ λ„ˆλ¬΄ ν¬λ‹€λŠ” 것일지도 λͺ¨λ₯Έλ‹€.

πŸ“š λ„ˆλ¬΄ λ§Žμ€ μ˜μ‘΄μ„±β€‹

  • λΉ„λŒ€ν•œ μƒμ„±μžμ— λŒ€ν•œ μ„Έ 번째 진단은 λͺ¨λ“  μΈμžκ°€ 객체 μ΄μ›ƒμ˜ μœ ν˜•(63 νŽ˜μ΄μ§€)μ—μ„œ μ •μ˜ν•œ 이웃 μœ ν˜• κ°€μš΄λ° ν•˜λ‚˜μΈ μ˜μ‘΄μ„±μ΄ μ•„λ‹ˆλΌλŠ” 것이닀.

πŸ“šλ„ˆλ¬΄ λ§Žμ€ μ˜ˆμƒ ꡬ문​

  • ν…ŒμŠ€νŠΈμ— μ˜ˆμƒ ꡬ문이 λ„ˆλ¬΄ 많으면 μ€‘μš”ν•œ 것이 무엇이고 μ‹€μ œλ‘œ 뭘 ν…ŒμŠ€νŠΈν•˜λŠ”μ§€ νŒŒμ•…ν•˜κΈ° μ–΄λ ΅λ‹€.
  • ν…ŒμŠ€νŠΈλ₯Ό 읽기 μ–΄λ ΅κ²Œ ν•˜λŠ” 것은 λͺ¨λ“  것이 μ˜ˆμƒ κ΅¬λ¬Έμ΄λΌλŠ” 점으둜 μ €λˆ• λ˜‘κ°™μ΄ μ€‘μš”ν•΄ 보인닀. 뭐가 μ€‘μš”ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ”μ§€ λΆ„κ°„ν•  수 μ—†λ‹€.
  • μš°λ¦¬λŠ” μŠ€ν…(ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ” 데 도움이 λ˜κ²Œλ” μ‹€μ œ ν–‰μœ„λ₯Ό 흉내 λ‚Έ 것)κ³Ό μ˜ˆμƒ ꡬ문(객체가 자기 이웃 객체와 μƒν˜Έ μž‘μš©ν•˜λŠ” 방법에 κ΄€ν•΄ 보μž₯ν•˜λ €λŠ” 단언)을 ꡬ뢄해 μ˜λ„λ₯Ό μ’€ 더 λΆ„λͺ…ν•˜κ²Œ ν•  수 μžˆλ‹€.
  • μ˜ˆμƒ ꡬ문을 쑰금만 μž‘μ„±ν•˜κ³  λ„ˆλ¬΄ λ§Žμ€ μ˜ˆμƒ ꡬ문을 μžμ œν•΄μ•Ό ν•œλ‹€.

πŸ“š ν…ŒμŠ€νŠΈκ°€ μš°λ¦¬μ—κ²Œ λ§ν•΄μ£ΌλŠ” 것(μ—¬λŸ¬λΆ„μ΄ κ·€ κΈ°μšΈμΈλ‹€λ©΄)​

  • ν…ŒμŠ€νŠΈ 악취에 κ·€λ₯Ό κΈ°μšΈμ΄λŠ” 것을 λ°°μš°λŠ” κ³Όμ •μ—μ„œ λ‹€μŒκ³Ό 같은 이점이 μžˆλ‹€.

🎈 μ§€μ‹μ˜ 초점이 νŠΉμ • 객체에 λ§žμΆ°μ§„λ‹€β€‹

  • 지식을 νŠΉμ • 객체(객체 λ‚΄λΆ€λ“ , 객체에 μ „λ‹¬ν•˜λ“ )에 κ΅­ν•œν•  수 μžˆλ‹€λ©΄ ν•΄λ‹Ή 객체의 κ΅¬ν˜„μ€ 그것을 λ‘˜λŸ¬μ‹Ό μ½˜ν…μŠ€νŠΈμ— 독립성을 μœ μ§€ν•  수 μžˆλ‹€.

🎈 λ­”κ°€κ°€ λͺ…μ‹œμ μ΄λΌλ©΄ 거기에 이름을 λΆ€μ—¬ν•  수 μžˆλ‹€β€‹

  • 이름을 μ•Œ 수 μžˆλ‹€λ©΄ κ·Έκ²ƒμ˜ λ‹€λ₯Έ μ“°μž„μƒˆλ₯Ό μ°Ύμ•„μ„œ 쀑볡을 쀄일 수 μžˆλŠ” μ’€ 더 λ‚˜μ€ 기회λ₯Ό μ–»λŠ” μ…ˆμ΄λ‹€,

🎈 이름이 더 λ§Žλ‹€λŠ” 것은 도메인 정보가 더 λ§Žλ‹€λŠ” μ˜λ―Έλ‹€β€‹

🎈 데이터 λŒ€μ‹  ν–‰μœ„λ₯Ό μ „λ‹¬ν•˜λΌβ€‹

  • 묻지 말고 λ§ν•˜λΌλ₯Ό κΎΈμ€€νžˆ μ μš©ν•˜λ©΄ ν–‰μœ„λ₯Ό μ „λ‹¬ν•˜λŠ” κ²½ν–₯을 λ³΄μ΄λŠ” μ½”λ”© μŠ€νƒ€μΌμ΄ λ§Œλ“€μ–΄μ§„λ‹€.