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

🍭 ν…ŒμŠ€νŠΈ 주도 개발둜 λ°°μš°λŠ” 객체 지ν–₯ 섀계와 μ‹€μ²œ

ν…ŒμŠ€νŠΈ 주도 개발 간단 정리​

  • TDD의 핡심 μ£ΌκΈ°λŠ” ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³  ν•΄λ‹Ή ν…ŒμŠ€νŠΈκ°€ λ™μž‘ν•˜κ²Œ λ§Œλ“€ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€. μ½”λ“œλ₯Ό 가급적 ν…ŒμŠ€νŠΈν•œ κΈ°λŠ₯의 λ‹¨μˆœν•œ κ΅¬ν˜„μœΌλ‘œ λ¦¬νŒ©ν„°λ§ν•œλ‹€. μ΄λŸ¬ν•œ 과정을 λ°˜λ³΅ν•œλ‹€.
  • λ‹€μŒμ€ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν–ˆμ„ λ•Œμ˜ μž₯점이닀.
    • λ‹€μŒ μž‘μ—…μ— λŒ€ν•œ 인수 쑰건이 λͺ…확해진닀.
    • λŠμŠ¨ν•˜κ²Œ κ²°ν•©λœ ꡬ성 μš”μ†Œλ₯Ό μž‘μ„±ν•  수 있게 λ˜μ–΄ 격리된 μƒνƒœμ—μ„œ, 더 높은 μˆ˜μ€€μœΌλ‘œ, λͺ¨λ‘ κ²°ν•©λœ μƒνƒœλ‘œ ꡬ성 μš”μ†Œλ₯Ό μ†μ‰½κ²Œ ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.
    • μ½”λ“œκ°€ ν•˜λŠ” 일에 λŒ€ν•œ μ‹€ν–‰ κ°€λŠ₯ν•œ μ„€λͺ…이 더해진닀.
    • μ™„μ „ν•œ νšŒκ·€ μŠ€μœ„νŠΈκ°€ λŠ˜μ–΄λ‚œλ‹€.
  • λ‹€μŒμ€ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œμ˜ μž₯점이닀.
    • μ½˜ν…μŠ€νŠΈλ₯Ό μ„ λͺ…ν•˜κ²Œ μΈμ§€ν•˜λŠ” λ™μ•ˆ 였λ₯˜λ₯Ό νƒμ§€ν•œλ‹€.
    • μ–Έμ œ μž‘μ—…μ΄ μΆ©λΆ„νžˆ μ™„λ£ŒλλŠ”μ§€ μ•Œκ²Œ λ˜μ–΄ κ³Όλ„ν•œ μ΅œμ ν™”λ₯Ό ν•˜κ±°λ‚˜ λΆˆν•„μš”ν•œ κΈ°λŠ₯을 λ”ν•˜μ§€ μ•Šκ²Œ λœλ‹€.

μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μ—†μ΄λŠ” μƒˆ κΈ°λŠ₯을 μž‘μ„±ν•˜μ§€ 말라.

μš°μ„  λ™μž‘ν•˜λŠ” 골격을 λŒ€μƒμœΌλ‘œ ν…ŒμŠ€νŠΈν•˜λΌβ€‹

  • 첫 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³  ν†΅κ³Όν•˜λŠ” 일의 어렀움은, 도ꡬλ₯Ό λ§ˆλ ¨ν•˜κ³  λ™μ‹œμ— κ·Έλ ‡κ²Œ λ§ˆλ ¨ν•œ λ„κ΅¬λ‘œ ν…ŒμŠ€νŠΈλ₯Ό ν•˜λ©΄μ„œ κΈ°λŠ₯κΉŒμ§€ κ΅¬ν˜„ν•˜κΈ°κ°€ μ–΄λ ΅λ‹€λŠ” 데 μžˆλ‹€. μ•ˆμ •μ μ΄μ§€ λͺ»ν•œ 개발 ν™˜κ²½μ˜ 증상 ν•œ κ°€μ§€λŠ” λ­”κ°€κ°€ μ‹€νŒ¨ν–ˆμ„ λ•Œ κ°€μž₯ λ¨Όμ € μ–΄λ””λ₯Ό μ‚΄νŽ΄λ΄μ•Ό 할지 λ§ˆλ•…μΉ˜ μ•Šλ‹€.
  • 이 같은 졜초 κΈ°λŠ₯의 역섀은 규λͺ¨κ°€ μž‘μ€ 두 문제둜 μͺΌκ°œλ©΄ ν•΄κ²°ν•  수 μžˆλ‹€. λ¨Όμ € λ™μž‘ν•˜λŠ” 골격을 λŒ€μƒμœΌλ‘œ λΉŒλ“œ, 배포, ν…ŒμŠ€νŠΈν•˜λŠ” 방법을 νŒŒμ•…ν•œ λ‹€μŒ, κ·Έ 기반 ꡬ쑰λ₯Ό μ΄μš©ν•΄ μœ μ˜λ―Έν•œ 첫 κΈ°λŠ₯에 λŒ€ν•œ 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œλ‹€. κ·Έ ν›„μ—λŠ” μ‹œμŠ€ν…œμ˜ λ‚˜λ¨Έμ§€ 뢀뢄을 λŒ€μƒμœΌλ‘œ ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ„ 진행할 수 있게 λͺ¨λ“  것이 μ œμžλ¦¬μ— 놓일 것이닀.
  • λ™μž‘ν•˜λŠ” κ³¨κ²©μ΄λž€ μ „ ꡬ간을 λŒ€μƒλ‘œ μžλ™ λΉŒλ“œ, 배포, ν…ŒμŠ€νŠΈλ₯Ό ν•  수 μžˆλŠ” μ‹€μ œ κΈ°λŠ₯을 κ°€μž₯ μ•κ²Œ κ΅¬ν˜„ν•œ 쑰각을 λ§ν•œλ‹€.
  • ν…ŒμŠ€νŠΈ 과정에 배포 단계λ₯Ό ν¬ν•¨ν•˜λŠ” 것은 두 가지 μ΄μœ μ—μ„œ ꡉμž₯히 μ€‘μš”ν•˜λ‹€.
    1. 배포 λ‹¨κ³„λŠ” μ†μˆ˜ ν•΄μ„œλŠ” μ•ˆ 될, 였λ₯˜κ°€ λ°œμƒν•˜κΈ° μ‰¬μš΄ ν™œλ™μ΄λ―€λ‘œ μ‹€μ œ ν™˜κ²½μ— 배포해야 ν•  λ•ŒκΉŒμ§€λŠ” 슀크립트λ₯Ό μ² μ €ν•˜κ²Œ 검증해야 ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
    2. 배포 λ‹¨κ³„μ—μ„œλŠ” 개발 νŒ€μ΄ 쑰직의 λ‹€λ₯Έ λΆ€λ¬Έκ³Ό μ ‘μ΄‰ν•˜κΈ°λ„ ν•˜λ©°, 운영이 μ‹€μ œλ‘œ μ–΄λ–»κ²Œ λ˜λŠ”μ§€λ„ λ°°μ›Œμ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • μ‹€μ œλ‘œ μ „ ꡬ간을 λŒ€μƒμœΌλ‘œ μˆ˜ν–‰λ˜λŠ” ν…ŒμŠ€νŠΈλŠ” λ‹¬μ„±ν•˜κΈ° μ–΄λ €μšΈ μˆ˜λ„ μžˆμœΌλ―€λ‘œ μ‹€μ œ μ‹œμŠ€ν…œμ—μ„œ μˆ˜ν–‰ν•  κΈ°λŠ₯κ³Ό μ‹œμŠ€ν…œμ΄ μˆ˜ν–‰λ˜λŠ” ν™˜κ²½μ— λŒ€ν•΄ ν˜„μž¬ μ•Œκ³  μžˆλŠ” 사항을 κ΅¬ν˜„ν•œ 기반 κ΅¬μ‘°μ—μ„œ μ‹œμž‘ν•΄μ•Ό ν•œλ‹€. ν•˜μ§€λ§Œ 이 방식은 일을 마치기 μ „κΉŒμ§€λŠ” κ·Έμ € μž„μ‹œλ°©νŽΈμ— λΆˆκ³Όν•˜λ©°, μ‹€μ œλ‘œ μ „ ꡬ간을 λŒ€μƒμœΌλ‘œ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜κΈ° μ „κΉŒμ§€λŠ” 미처 νŒŒμ•…ν•˜μ§€ λͺ»ν•œ μœ„ν—˜μ΄ 도사리고 μžˆλ‹€.
  • λ™μž‘ν•˜λŠ” 골격과 그것을 λ³΄μ’Œν•˜λŠ” 기반 κ΅¬μ‘°λŠ” ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ„ μ‹œμž‘ν•˜λŠ” 방법을 도와주기 μœ„ν•΄ μ‘΄μž¬ν•˜λŠ” 것이닀. λ™μž‘ν•˜λŠ” 골격은 μ „ ꡬ간에 걸친 인수 ν…ŒμŠ€νŠΈ μ†”λ£¨μ…˜μ„ μ™„μ„±ν•˜λŠ” κ²ƒμœΌλ‘œ λ‚˜μ•„κ°€λŠ” 첫 κ±ΈμŒμ— μ§€λ‚˜μ§€ μ•ŠλŠ”λ‹€.

λΆˆν™•μ‹€μ„±μ€ 일찍 λ“œλŸ¬λ‚΄λΌβ€‹

  • 톡합을 λ‚˜μ€‘μ— ν•˜λŠ” λ°©μ‹μ˜ 경우 μ–΄λ–€ 일이 일어날지 μ˜ˆμΈ‘ν•˜κΈ°κ°€ λΆˆκ°€λŠ₯ν•œλ°, νŒ€μ—μ„œ μ—„μ²­λ‚˜κ²Œ λ§Žμ€ 각 뢀뢄을 μ œν•œλœ μ‹œκ°„μ— μ§œλ§žμΆ°μ•Ό ν•˜κ³  μ‹€νŒ¨ν•œ 뢀뢄을 κ³ μΉ˜λŠ” 일도 κ°μ•ˆν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • λ°˜λ©΄μ— 점진적인 κ°œλ°œμ„ 잘 μš΄μ˜ν•˜λ©΄ μ²˜μŒμ—λŠ” λΆˆμ•ˆμ •ν•œ μƒνƒœλ‘œ μ‹œμž‘ν•˜μ§€λ§Œ 일뢀 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ³  ν”„λ‘œμ νŠΈ μžλ™ν™”κ°€ κ΅¬μΆ•λ˜κ³  λ‚˜λ©΄ 반볡적인 κ³Όμ •μœΌλ‘œ μ•ˆμ •ν™”λœλ‹€. ν”„λ‘œμ νŠΈκ°€ 인도 단계에 μ ‘μ–΄λ“€λ©΄ κ²°κ΅­ κΎΈμ€€νžˆ κΈ°λŠ₯이 λ§Œλ“€μ–΄μ§ˆ ν…Œκ³  μ•„λ§ˆ 처음으둜 μΆœμ‹œν•˜κΈ° μ „μ—λŠ” ν™œλ™λŸ‰μ΄ ꡉμž₯히 λ§Žμ„ 것이닀. 배포와 μ—…κ·Έλ ˆμ΄λ“œμ²˜λŸΌ ν‰λ²”ν•˜μ§€λ§Œ 깨지기 μ‰¬μš΄ μž‘μ—…μ€ λͺ¨λ‘ μžλ™ν™”λ˜μ–΄ μ•Œμ•„μ„œ ꡴러갈 것이닀.
  • ν…ŒμŠ€νŠΈ 주도 개발의 이 같은 츑면은 λ‹€λ₯Έ μΈ‘λ©΄κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 직관적이지 μ•Šκ²Œ 보일지도 λͺ¨λ₯΄κ² μ§€λ§Œ μ§€κΈˆκΉŒμ§€ 늘 μΆ©λΆ„ν•œ μ‹œκ°„μ„ λ“€μ—¬ μ‹œμŠ€ν…œ κΈ°λ°˜μ„ λŒ€μƒμœΌλ‘œ ꡬ쑰λ₯Ό 작고 μžλ™ν™”ν•  λ§Œν•œ κ°€μΉ˜κ°€ μžˆλ‹€.

Chapter 5: ν…ŒμŠ€νŠΈ 주도 개발 주기의 μœ μ§€β€‹

각 κΈ°λŠ₯을 인수 ν…ŒμŠ€νŠΈλ‘œ μ‹œμž‘ν•˜λΌβ€‹

  • 인수 ν…ŒμŠ€νŠΈλŠ” μš°λ¦¬κ°€ μž‘μ„±ν•˜λ €λŠ” κΈ°λŠ₯을 아직 μ‹œνŠΈμ— μ—μ„œ 갖좔지 λͺ»ν–ˆλ‹€λŠ” 사싀을 보여주고 κ·Έ κΈ°λŠ₯이 μ™„μ„±λ˜κΈ°κΉŒμ§€ 진생 상황을 λ°˜μ˜ν•œλ‹€.
  • 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  λ•ŒλŠ” 기반 기술의 μš©μ–΄κ°€ μ•„λ‹Œ μ‘μš© λ„λ©”μΈμ—μ„œ λ‚˜μ˜¨ μš©μ–΄λ§Œ μ΄μš©ν•œλ‹€.
  • 인수 ν…ŒμŠ€νŠΈλŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό 거친 객체λ₯Ό λŒ€μƒμœΌλ‘œ 톡합 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  뿐 μ•„λ‹ˆλΌ ν”„λ‘œμ²΅νŠΈλ₯Ό μ•žμœΌλ‘œ λ‚˜μ•„κ°€κ²Œ ν•œλ‹€.

νšŒκ·€λ₯Ό ν¬μ°©ν•˜λŠ” ν…ŒμŠ€νŠΈμ™€ 진행 상황을 μΈ‘μ •ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό λΆ„λ¦¬ν•˜λΌβ€‹

  • 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄μ„œ μ‹ κΈ°λŠ₯을 λ¬˜μ‚¬ν•˜λŠ”λ° κ·Έ κΈ°λŠ₯이 κ΅¬ν˜„λ˜κΈ° 전이라 인수 ν…ŒμŠ€νŠΈλŠ” μ‹€νŒ¨ν•  것이닀. μƒˆ 인수 ν…ŒμŠ€νŠΈλž€ 아직 λ§ˆμΉ˜μ§€ μ•Šμ€ 일을 μ„œμˆ ν•œ 것이기 λ•Œλ¬Έμ΄λ‹€.
  • 인수 ν…ŒμŠ€νŠΈλ₯Ό λΉ¨κ°„μƒ‰μ—μ„œ λ…Ήμƒ‰μœΌλ‘œ λ°”κΎΈλŠ” ν™œλ™μ€ νŒ€μ—μ„œλŠ” 진행 μƒνƒœλ₯Ό μΈ‘μ •ν•  수 μžˆλ‹€.
  • 인수 ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λ©΄ 이제 ν•΄λ‹Ή ν…ŒμŠ€νŠΈλŠ” μ™„λ£Œλœ κΈ°λŠ₯을 λ‚˜νƒ€λ‚΄κ³  λ‹€μ‹œλŠ” μ‹€νŒ¨ν•΄μ„œλŠ” μ•ˆ λœλ‹€.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ 톡합 ν…ŒμŠ€νŠΈλŠ” 개발 νŒ€μ„ λ³΄μ‘°ν•˜κ³  λΉ λ₯΄κ²Œ 싀행돼야 ν•˜λ©°, 항상 톡과해야 ν•œλ‹€.
  • μš”κ΅¬ 사항이 λ°”λ€Œλ©΄ 거기에 영ν–₯을 받은 인수 ν…ŒμŠ€νŠΈλ₯Ό νšŒκ·€ ν…ŒμŠ€νŠΈ κ·Έλ£Ήμ—μ„œ λΉΌλ‚΄μ„œ 진행 쀑인 ν…ŒμŠ€νŠΈ 그룹으둜 읆긴 ν›„ μƒˆ μš”κ΅¬ 사항을 λ°˜μ˜ν† λ‘ μˆ˜μ •ν•œ λ‹€μŒ, ν•΄λ‹Ή ν…ŒμŠ€νŠΈλ₯Ό λ‹€μ‹œ ν†΅κ³Όν•˜κ²Œλ” μ‹œμŠ€ν…œμ„ λ³€κ²½ν•΄μ•Ό ν•œλ‹€.

ν…ŒμŠ€νŠΈλ₯Ό κ°€μž₯ κ°„λ‹¨ν•œ 성곡 μΌ€μ΄μŠ€λ‘œ μ‹œμž‘ν•˜λΌβ€‹

  • μš°λ¦¬λŠ” κ°€μž₯ κ°„λ‹¨ν•œ 성곡 μΌ€μ΄μŠ€λ‘œ ν…ŒμŠ€νŠΈλ₯Ό μ‹œμž‘ν•˜κΈΈ μ’‹μ•„ν•œλ‹€. ν•΄λ‹Ή ν…ŒμŠ€νŠΈκ°€ λ™μž‘ν•˜λ©΄ μ†”λ£¨μ…˜μ˜ μ‹€μ œ ꡬ쑰에 κ΄€ν•΄ 더 쒋은 생각이 λ– μ˜€λ₯Ό ν…Œκ³ , κ·Έ κ³Όμ •μ—μ„œ λ°œκ²¬ν•œ λ°œμƒ κ°€λŠ₯ν•œ μ‹€νŒ¨λ₯Ό μ²˜λ¦¬ν•˜λŠ” 것과 μ΄ν›„μ˜ 성곡 μΌ€μ΄μŠ€ μ‚¬μ΄μ—μ„œ μš°μ„ μˆœμœ„λ₯Ό κ°€λŠ ν•΄λ³Ό 수 μžˆλ‹€.
  • μ²˜λ¦¬ν•΄μ•Ό ν•  μ‹€νŒ¨ μΌ€μ΄μŠ€, λ¦¬νŒ©ν„°λ§, 기타 기술적인 μž‘μ—…μ„ λ©”λͺ¨μž₯μ΄λ‚˜ 색인 μΉ΄λ“œμ— 기둝해 두면 도움이 λœλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ„ΈλΆ€ 사항을 λΉ λœ¨λ¦¬μ§€ μ•Šκ³ λ„ λ‹Ήλ©΄ κ³Όμ œμ— 집쀑할 수 μžˆλ‹€. κΈ°λŠ₯은 기둝해둔 λͺ©λ‘μ˜ ν•­λͺ©μ— λͺ¨λ‘ 선을 κ·Έμ–΄μ•Ό λΉ„λ‘œμ†Œ λ§ˆλ¬΄λ¦¬λœλ‹€.

읽고 μ‹Άμ–΄ ν•  ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λΌβ€‹

  • ν…ŒμŠ€νŠΈκ°€ 잘 읽히면 ν…ŒμŠ€νŠΈλ₯Ό κ·Έ λ‹€μŒμœΌλ‘œ μ§€μ›ν•˜λŠ” 기반 ꡬ쑰λ₯Ό λ§Œλ“ λ‹€.
  • ν…ŒμŠ€νŠΈκ°€ μ–΄λ–»κ²Œ ν•΄μ•Ό 할지 κΈ°μˆ ν•˜λŠ” λͺ…ν™•ν•œ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ³΄μ΄λ©΄μ„œ μ˜ˆμƒλŒ€λ‘œ μ‹€νŒ¨ν•˜λ©΄ 보쑰적인 역할을 ν•˜λŠ” μ½”λ“œλ₯Ό μΆ©λΆ„νžˆ κ΅¬ν˜„ν–ˆλ‹€λŠ” 사싀을 μ•Œκ²Œ λœλ‹€. 그러면 ν•΄λ‹Ή ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όμ‹œν‚€λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° μ‹œμž‘ν•˜λ©΄ λœλ‹€.

ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•˜λŠ” 것을 μ§€μΌœλ³΄λΌβ€‹

  • ν…ŒμŠ€νŠΈκ°€ μ˜ˆμƒκ³Ό λ‹€λ₯Έ μ‹μœΌλ‘œ μ‹€νŒ¨ν•˜λ©΄ λ­”κ°€λ₯Ό 잘λͺ» μ΄ν•΄ν–ˆκ±°λ‚˜ μ½”λ“œκ°€ μ™„μ„±λ˜μ§€ μ•Šμ•˜λ‹€λŠ” 뜻으둜 λΆ€μ‘±ν•œ 뢀뢄을 κ³ μΉœλ‹€. μš°λ¦¬λŠ” μ λ‹Ήν•œ μ‹€νŒ¨λ₯Ό λ§Œλ‚˜λ©΄ 진단 정보가 도움이 λ˜λŠ”μ§€ ν™•μΈν•œλ‹€. μ‹€νŒ¨μ— λŒ€ν•œ μ„€λͺ…이 λͺ…ν™•ν•˜μ§€ μ•ŠμœΌλ©΄ μ½”λ“œκ°€ λͺ‡ μ£Όκ°„ 망가져 μžˆμ„ λ™μ•ˆ λˆ„κ΅°κ°€ 고생해야 ν•  것이닀. 였λ₯˜ λ©”μ‹œμ§€κ°€ μ½”λ“œμ™€ κ΄€λ ¨λœ 문제둜 우리λ₯Ό 이끌 λ•ŒκΉŒμ§€ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ‘°μ •ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό μž¬μ‹€ν–‰ν•œλ‹€.
  • 였λ₯˜ λ©”μ‹œμ§€λ₯Ό 검사해야 ν•˜λŠ” 이유
    1. 였λ₯˜ λ©”μ‹œμ§€λŠ” ν˜„μž¬ μž‘μ—… 쀑인 μ½”λ“œμ— λŒ€ν•œ 가정을 ν™•μΈν•œλ‹€.
    2. μ˜λ„μ— λŒ€ν•œ ν‘œν˜„μ„ κ°•μ‘°ν•˜λŠ” 것은 μ‹ λ’°μ„± 있고 μœ μ§€ν•˜κΈ° μ‰¬μš΄ μ‹œμŠ€ν…œμ„ κ°œλ°œν•˜λŠ” 데 ν•„μˆ˜κ³ , ν…ŒμŠ€νŠΈμ™€ μ‹€νŒ¨ λ©”μ‹œμ§€κ°€ 여기에 ν•΄λ‹Ήν•œλ‹€. μœ μš©ν•œ 진단 정보λ₯Ό μƒμ„±ν•˜λŠ” 고생을 κ°λ‚΄ν•˜λ©΄ ν…ŒμŠ€νŠΈ, μ½”λ“œμ—μ„œ ν•΄μ•Ό ν•  일이 뭔지 λΆ„λͺ…ν•˜κ²Œ ν•˜λŠ” 데 도움이 λœλ‹€.

μž…λ ₯μ—μ„œ 좜λ ₯ μˆœμ„œλ‘œ κ°œλ°œν•˜λΌβ€‹

  • κΈ°λŠ₯에 λŒ€ν•œ μ „ ꡬ간 ν…ŒμŠ€νŠΈλŠ” μƒˆλ‘œμš΄ ν–‰μœ„λ₯Ό μΌμœΌν‚€κ²Œ ν•˜λŠ” μ΄λ²€νŠΈκ°€ λ„μ°©ν•˜λŠ” 것을 흉내 λ‚Ό 것이닀. μ‹œμŠ€ν…œ κ²½κ³„μ—μ„œλŠ” 이 이벀트λ₯Ό λ‹€λ£¨κ³ μž 객체λ₯Ό μ—¬λŸ¬ 개 μž‘μ„±ν•΄μ•Ό ν•  것이닀. 그럴 λ•Œ 이 객체듀이 자기 μ±…μž„μ„ μˆ˜ν–‰ν•˜κ³ μž μ‹œμŠ€ν…œμ˜ λ‚˜λ¨Έμ§€ 뢀뢄에 μ‘΄μž¬ν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό 지원할 ν•„μš”κ°€ μžˆμŒμ„ μ•Œκ²Œ 됐닀. μš°λ¦¬λŠ” 더 λ§Žμ€ 객체λ₯Ό μž‘μ„±ν•΄ μ΄λŸ¬ν•œ μ„œλΉ„μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ³  μƒˆ 객체에 ν•„μš”ν•œ μ„œλΉ„μŠ€κ°€ 뭔지 νŒŒμ•…ν•œλ‹€.
  • 이런 μ‹μœΌλ‘œ μ‹œμŠ€ν…œμ„ μ²˜μŒλΆ€ν„° λκΉŒμ§€ λ§Œλ“€μ–΄ λ‚˜κ°„λ‹€.
    1. μ™ΈλΆ€ 이벀트λ₯Ό λ°›λŠ” κ°μ²΄μ—μ„œ 쀑간 계측을 거쳐 쀑심 도메인 λͺ¨λΈλ‘œ λ‚˜μ•„κ°„λ‹€.
    2. μ™ΈλΆ€μ—μ„œ 확인 κ°€λŠ₯ν•œ 응닡을 μƒμ„±ν•˜λŠ” λ‹€λ₯Έ 경계에 μœ„μΉ˜ν•œ κ°μ²΄μ—κΉŒμ§€ 이λ₯Έλ‹€.

λ©”μ„œλ“œκ°€ μ•„λ‹Œ ν–‰μœ„λ₯Ό λ‹¨μœ„ ν…ŒμŠ€νŠΈν•˜λΌβ€‹

  • TDDλ₯Ό λ„μž…ν•˜λŠ” λ§Žμ€ κ°œλ°œμžκ°€ μ΄ˆκΈ°μ— μž‘μ„±ν•œ ν…ŒμŠ€νŠΈλ₯Ό λ‚˜μ€‘μ— λ˜λŒμ•„λ΄€μ„ λ•Œ μ΄ν•΄ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” 사싀을 λ°œκ²¬ν•˜λŠ”λ°, ν”νžˆ 저지λ₯΄λŠ” μ‹€μˆ˜ ν•œ κ°€μ§€λŠ” λ°”λ‘œ λ©”μ„œλ“œ ν…ŒμŠ€νŠΈλ₯Ό μƒκ°ν•œλ‹€λŠ” 데 μžˆλ‹€.
  • ν…ŒμŠ€νŠΈ λŒ€μƒ κ°μ²΄μ—μ„œ μ œκ³΅ν•΄μ•Ό ν•˜λŠ” κΈ°λŠ₯에 집쀑할 λ•Œ 더 μž˜ν•  수 있으며, 각각은 이웃 κ°μ²΄μ™€μ˜ ν˜‘μ—…μ΄λ‚˜ μ—¬λŸ¬ λ©”μ„œλ“œ 호좜이 ν•„μš”ν• μ§€λ„ λͺ¨λ₯Έλ‹€. ν•΄λ‹Ή 클래슀의 μ½”λ“œλ₯Ό 톡해 λͺ¨λ“  μ‹€ν–‰ 경둜λ₯Ό μ‹œν—˜ν•˜λŠ” 방법이 μ•„λ‹ˆλΌ κ·Έ 클래슀둜 λͺ©μ μ„ λ‹¬μ„±ν•˜λŠ” 방법을 μ•Œμ•„μ•Ό ν•œλ‹€.
  • ν…ŒμŠ€νŠΈ 이름을 지을 λ•ŒλŠ” ν…ŒμŠ€νŠΈ 쀑인 μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ 객체가 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ„€λͺ…ν•˜λŠ” 이름을 μ„ νƒν•˜λŠ” 것이 도움이 λœλ‹€.

ν…ŒμŠ€νŠΈμ— κ·€λ₯Ό κΈ°μšΈμ΄λΌβ€‹

  • ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ ΅λ‹€λ©΄ 주둜 섀계 κ°œμ„ μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. μ§€κΈˆ λ‹Ήμž₯ μ½”λ“œλ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“œλŠ” ꡬ쑰 λ•Œλ¬Έμ— λ‚˜μ€‘μ—λ„ μ½”λ“œλ₯Ό λ³€κ²½ν•˜κΈ° μ–΄λ €μšΈ 것이닀. μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ λ³€κ²½ν•˜κΈ°κ°€ 더 μ–΄λ €μšΈ 텐데 μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 무슨 생각을 ν–ˆλŠ”μ§€ μžŠμ–΄λ²„λ¦¬κΈ° λ•Œλ¬Έμ΄λ‹€.
  • 이 경우 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 과정을 잠재적인 μœ μ§€ 보수 문제λ₯Ό 쑰기에 μ•Œλ €μ£ΌλŠ” κ·€μ€‘ν•œ 경고둜 μ—¬κΈ°κ³  κ·Έ νžŒγ„·νŠΈλ₯Ό μ΄μš©ν•΄ 아직 μ‹¬κ°ν•˜μ§€ μ•Šμ„ λ•Œ 문제λ₯Ό ν•΄κ²°ν•œλ‹€. λ•Œλ¬Έμ— μ‹€νŒ¨ν•œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κΈ° μ–΄λ ΅λ‹€λ©΄ μ œν’ˆμ˜ μ½”λ“œμ˜ 섀계λ₯Ό λ‹€μ‹œ μ‚΄νŽ΄λ³΄κ³  μ•žμœΌλ‘œ λ‚˜μ•„κ°€κΈ° 전에 λ¦¬νŒ©ν„°λ§ν•œλ‹€.

주기의 λ―Έμ„Έ 쑰정​

  • λ„ˆλ¬΄ 큰 λ‹¨μœ„λ‘œ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜λ©΄ μ½”λ“œμ˜ λͺ¨λ“  κ°€λŠ₯ν•œ 경둜λ₯Ό μ‹œλ„ν•˜λŠ” μ‘°ν•© 폭발 ν˜„μƒμœΌλ‘œ 개발이 쀑단될 것이닀.
  • 반면 ν…ŒμŠ€νŠΈ λ‹¨μœ„λ₯Ό λ„ˆλ¬΄ μ„Έλ°€ν•˜κ²Œ 작으면 ν…ŒμŠ€νŠΈν•˜κΈ°λŠ” μ‰½μ§€λ§Œ ν•¨κ»˜ λ™μž‘ν•˜μ§€ μ•ŠλŠ” κ°μ²΄μ—μ„œ μœ λž˜ν•˜λŠ” 문제λ₯Ό λ†“μΉ˜κ³  말 것이닀.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ 톡합 ν…ŒμŠ€νŠΈ 사이에 μ–Όλ§ˆλ‚˜ ν•΄μ•Ό 할지에 λŒ€ν•œ 닡은 νŒ€μ΄ μ²˜ν•œ 상황과 νŒ€μ— λ‘˜λ €μ‹Ό ν™˜κ²½μ— 따라 달라진닀. TDD의 ν…ŒμŠ€νŠΈ λΆ€λΆ„μ—μ„œ 얻을 수 μžˆλŠ” 졜고의 ν˜œνƒμ€ μ½”λ“œλ₯Ό λ§κ°€λœ¨λ¦¬μ§€ μ•Šκ³ λ„ λ³€κ²½ν•  수 μžˆλ‹€λŠ” μžμ‹ κ°μ΄λ‹€. κΉŒλ‹€λ‘œμš΄ 뢀뢄은 κ·ΈλŸ¬ν•œ μžμ‹ κ°μ΄ μ •λ‹Ήν•œμ§€ ν™•μΈν•˜λŠ” 것이닀.
  • κ·Έλž˜μ„œ μš°λ¦¬λŠ” 주기적으둜 TDDκ°€ μ–Όλ§ˆλ‚˜ 도움이 λ˜λŠ”μ§€ λ˜μ§šμ–΄λ³΄κ³  μ·¨μ•½ν•œ 뢀뢄을 찾아보며, ν…ŒμŠ€νŠΈ μ „λž΅μ„ μ‘°μ •ν•œλ‹€. λ‘œμ§μ—μ„œ μ„±κ°€μ‹  λΆ€λΆ„μ—λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ 더 ν•„μš”ν•  μˆ˜λ„ μžˆλ‹€. μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ μ˜ˆμ™Έμ—λŠ” 톡합 μˆ˜μ€€μ˜ ν…ŒμŠ€νŠΈκ°€ 더 ν•„μš”ν• μ§€λ„ λͺ¨λ₯Έλ‹€. 그리고 μ˜ˆμƒμΉ˜ λͺ»ν•œ μ‹œμŠ€ν…œ μ‹€νŒ¨μ—λŠ” 쑰사가 더 ν•„μš”ν•˜κ±°λ‚˜ μ–΄μ©Œλ©΄ ν…ŒμŠ€νŠΈλ₯Ό 더 μ² μ €ν•˜κ²Œ ν•΄μ•Ό ν•  것이닀.

ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜λŠ” 것이 섀계에 μ–΄λ–»κ²Œ 도움이 λ˜λŠ”κ°€β€‹

  • ν…ŒμŠ€νŠΈλ‘œ μ‹œμž‘ν•œλ‹€λŠ” 것은 μ–΄λ–»κ²Œλ₯Ό κ³ λ €ν•˜κΈ° 전에 λ‹¬μ„±ν•˜κ³ μž ν•˜λŠ” λ°”κ°€ 무엇인지λ₯Ό κΈ°μˆ ν•΄μ•Ό 함을 μ˜λ―Έν•œλ‹€. μ΄λŠ” λŒ€μƒ 객체에 λŒ€ν•΄ 좔상화λ₯Ό μ˜¬λ°”λ₯Έ μˆ˜μ€€μœΌλ‘œ μœ μ§€ν•˜λŠ” 데 κΈ°μ—¬ν•œλ‹€.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό 이해 κ°€λŠ₯ν•œ μƒνƒœλ‘œ μœ μ§€ν•˜λ €λ©΄ λ‹¨μœ„ ν…ŒμŠ€νŠΈμ˜ λ²”μœ„λ₯Ό μ œν•œν•΄μ•Ό ν•œλ‹€.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ 객체λ₯Ό λ§Œλ“€λ €λ©΄ ν•΄λ‹Ή 객체의 μ˜μ‘΄μ„±μ„ 전달해야 ν•˜λŠ”λ°, μ΄λŠ” κ·ΈλŸ¬ν•œ μ˜μ‘΄μ„±μ΄ 어디에 μžˆλŠ”μ§€ μ•Œμ•„μ•Ό ν•œλ‹€λŠ” μ˜λ―Έλ‹€. 그러면 μ½˜ν…μŠ€νŠΈ 독립성이 λ†’μ•„μ§€λŠ”λ°, 이것은 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜κΈ°μ— μ•žμ„œ λŒ€μƒ 객체의 ν™˜κ²½μ„ ꡬ성할 수 μžˆμ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

ν…ŒμŠ€νŠΈ 주도 개발 κΈ°μˆ μ—μ„œ μ€‘μš”ν•œ 뢀뢄은 ν…ŒμŠ€νŠΈ λŒ€μƒμ„ μ–΄λ””κΉŒμ§€ 바라봐야 ν•˜κ³ , κ²°κ΅­ μ–΄λ–»κ²Œ λͺ¨λ“  뢀뢄을 ν…ŒμŠ€νŠΈν• μ§€ νŒλ‹¨ν•˜λŠ” 것이닀.

Chapter 20: ν…ŒμŠ€νŠΈμ— κ·€ κΈ°μšΈμ΄κΈ°β€‹

TDDλŠ” μ½”λ“œλ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ”, 즉 κΈ°λŠ₯κ³Ό μ„±λŠ₯처럼 κ²‰μœΌλ‘œ λ“œλŸ¬λ‚˜λŠ” ν’ˆμ§ˆ 속성을 κ²€μ¦ν•˜λŠ” ν™œλ™μ— κ΄€ν•œ 것이닀.

TDDλŠ” μ½”λ“œμ˜ λ‚΄λΆ€ ν’ˆμ§ˆ 속성에 κ΄€ν•œ ν”Όλ“œλ°±, 즉 클래슀의 결합도와 응집λ ₯, λͺ…μ‹œμ μ΄κ±°λ‚˜ 감좰진 μ˜μ‘΄μ„±, 효과적인 정보 은닉 λ“± μ½”λ“œλ₯Ό μœ μ§€ 보수 κ°€λŠ₯ν•œ μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” ν’ˆμ§ˆ 속성에 κ΄€ν•œ μž‘μ—…μ΄κΈ°λ„ ν•˜λ‹€.

ν…ŒμŠ€νŠΈ μ•…μ·¨μ—λŠ” 두 μ’…λ₯˜κ°€ μžˆλ‹€. ν…ŒμŠ€νŠΈ μžμ²΄κ°€ μ œλŒ€λ‘œ μž‘μ„±λΌ μžˆμ§€ μ•Šμ€, 즉 ν…ŒμŠ€νŠΈκ°€ λΆˆλΆ„λͺ…ν•˜κ±°λ‚˜ λΆˆμ•ˆμ •ν•˜κ²Œ μž‘μ„±λœ κ²½μš°μ™€ ν…ŒμŠ€νŠΈμ—μ„œ λŒ€μƒ μ½”λ“œκ°€ 문제라고 κ°•μ‘°λ˜λŠ” 경우 (ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μš΄ μ½”λ“œ)이닀.

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

ν…ŒμŠ€νŠΈμ— μ˜ˆμƒ ꡬ문이 λ„ˆλ¬΄ 많으면 μ€‘μš”ν•œ 것이 무엇이고 μ‹€μ œλ‘œ 뭘 ν…ŒμŠ€νŠΈν•˜λŠ”μ§€ νŒŒμ•…ν•˜κΈ° μ–΄λ ΅λ‹€.

ν…ŒμŠ€νŠΈλ₯Ό 읽기 μ–΄λ ΅κ²Œ ν•˜λŠ” 것은 λͺ¨λ“  것이 μ˜ˆμƒ κ΅¬λ¬Έμ΄λΌλŠ” 점으둜 μ €λˆ• λ˜‘κ°™μ΄ μ€‘μš”ν•΄ 보인닀. 뭐가 μ€‘μš”ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ”μ§€ λΆ„κ°„ν•  수 μ—†λ‹€.

μ˜ˆμƒ ꡬ문을 쑰금만 μž‘μ„±ν•˜κ³  λ„ˆλ¬΄ λ§Žμ€ μ˜ˆμƒ ꡬ문을 μžμ œν•΄μ•Ό ν•œλ‹€.

Chapter 21: ν…ŒμŠ€νŠΈ 가독성​

ν…ŒμŠ€νŠΈλŠ” ν–‰μœ„λ₯Ό λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.
μ½”λ“œ 가독성이 μ€‘μš”ν•œ 것과 같은 이유둜 ν…ŒμŠ€νŠΈ 가독성도 μ€‘μš”ν•˜λ‹€.
ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μ œν’ˆ μ½”λ“œμ—μ„œ ν•˜λŠ” 일이 무엇인지 λ°˜λ“œμ‹œ κΈ°μˆ ν•΄μ•Ό ν•œλ‹€. 이것은 ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ μ˜ˆμƒλ˜λŠ” 결과의 예제둜 μ‚¬μš©ν•˜λŠ” 값에 κ΄€ν•΄μ„œλŠ” κ΅¬μ²΄μ μ΄μ§€λ§Œ ν•΄λ‹Ή μ½”λ“œκ°€ λ™μž‘ν•˜λŠ” 방식에 κ΄€ν•΄μ„œλŠ” 좔상적인 κ²½ν–₯이 있기 λ•Œλ¬Έμ΄λ‹€. μš°λ¦¬λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ μ„ μ–Έμ μœΌλ‘œ κΈ°μˆ ν•œ κ²ƒμ²˜λŸΌ 읽히길 λ°”λž€λ‹€.

ν…ŒμŠ€νŠΈ 이름은 κΈ°λŠ₯을 κΈ°μˆ ν•œλ‹€ ν…ŒμŠ€νŠΈ 이름은 μ˜ˆμƒν•˜λŠ” 결과와 객체의 행동, μ‹œλ‚˜λ¦¬μ˜€μ˜ 동기에 κ΄€ν•΄ 무언가λ₯Ό λ§ν•΄μ€˜μ•Ό ν•œλ‹€.

Chapter 23: ν…ŒμŠ€νŠΈ 진단​

μ‹€νŒ¨ν•˜λŠ” 섀계​

ν…ŒμŠ€νŠΈμ˜ 핡심은 톡과가 μ•„λ‹ˆλΌ μ‹€νŒ¨μ— μžˆλ‹€. ν…ŒμŠ€νŠΈ μ‹€νŒ¨κ°€ μš°λ¦¬κ°€ μ•Œμ•„μ°¨λ¦¬μ§€ λͺ»ν–ˆλ˜ μ½”λ“œμƒμ˜ μ•”μ‹œμ μΈ 관계λ₯Ό λ“œλŸ¬λ‚Έλ‹€.

μ ˆλŒ€ ν•˜μ§€ 말아야 ν•  일은 디버거λ₯Ό μ—΄μ–΄μ„œ ν…ŒμŠ€νŠΈν•œ μ½”λ“œλ₯Ό λ‹¨κ³„λ³„λ‘œ ν›‘μ–΄ λ‚΄λ €κ°€λ©΄μ„œ λΆˆμΌμΉ˜ν•œ 점을 μ•Œμ•„λ‚΄λŠ” 것이닀. κ·Έλ ‡κ²Œ ν•œλ‹€λŠ” 것은, μ΅œμ†Œν•œ μš°λ¦¬κ°€ μž‘μ„±ν•œ ν…ŒμŠ€νŠΈκ°€ μš”κ΅¬ 사항을 μΆ©λΆ„νžˆ λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•˜μ§€ λͺ»ν–ˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

μž‘κ³ , λ¬Έμ œμ— μ§‘μ€‘ν•˜κ³ , 이름을 잘 지은 ν…ŒμŠ€νŠΈβ€‹

진단을 κ°œμ„ ν•˜λŠ” κ°€μž₯ μ‰¬μš΄ 방법은 각 ν…ŒμŠ€νŠΈλ₯Ό μž‘μœΌλ©΄μ„œ λ¬Έμ œμ— μ΄ˆμ μ„ 맞좘 μƒνƒœλ‘œ μœ μ§€ν•˜κ³  ν…ŒμŠ€νŠΈμ— 가독성 μžˆλŠ” 이름을 λΆ€μ—¬ν•˜λŠ” 것이닀.

Chapter 24: ν…ŒμŠ€νŠΈ μœ μ—°μ„±β€‹

  • ν…ŒμŠ€νŠΈ λΆˆμ•ˆμ •μ„±μ˜ 곡톡적인 원인은 λ‹€μŒκ³Ό κ°™λ‹€.
    • ν…ŒμŠ€νŠΈκ°€ μ‹œμŠ€ν…œμ—μ„œ 관련이 μ—†λŠ” λΆ€λΆ„μ΄λ‚˜ ν…ŒμŠ€νŠΈ λŒ€μƒ 객체에 λ¬΄κ΄€ν•œ ν–‰μœ„μ™€ λ„ˆλ¬΄ κΈ΄λ°€ν•˜κ²Œ 결햅돼 μžˆλ‹€.
    • ν…ŒμŠ€νŠΈκ°€ λŒ€μƒ μ½”λ“œμ˜ μ˜ˆμƒ ν–‰μœ„λ₯Ό κ³Όλ„ν•˜κ²Œ κΈ°μˆ ν•΄μ„œ ν•„μš” μ΄μƒμœΌλ‘œ μ œμ•½ν•œλ‹€.
    • μ—¬λŸ¬ ν…ŒμŠ€νŠΈμ—μ„œ λ™μΌν•œ μ œν’ˆ μ½”λ“œμ˜ ν–‰μœ„λ₯Ό μ‹œν—˜ν•  λ•Œ 쀑볡이 생긴닀.
  • ν…ŒμŠ€νŠΈ λΆˆμ•ˆμ •μ„±μ€ μ‹œμŠ€ν…œ 섀계와도 관련이 μžˆλŠ”λ° μ–΄λ–€ 객체가 μ˜μ‘΄μ„±μ΄ λ„ˆλ¬΄ λ§Žκ±°λ‚˜ ν•΄λ‹Ή 객체의 μ˜μ‘΄μ„±μ΄ 감좰져 μžˆμ–΄ ν™˜κ²½κ³Ό λΆ„λ¦¬ν•˜κΈ°κ°€ μ–΄λ ΅λ‹€λ©΄ ν•΄λ‹Ή 객체의 ν…ŒμŠ€νŠΈλŠ” 객체와 동떨어진 뢀뢄이 변경될 λ•Œ μ‹€νŒ¨ν•  것이닀.
  • ν…ŒμŠ€νŠΈ 가독성과 회볡λ ₯은 λ—„ 수 μ—†λŠ” 관계며, λ¬Έμ œμ— μ§‘μ€‘ν•˜κ³ , λͺ…λ£Œν•œ μ€€λΉ„ 사항을 κ°–μΆ”κ³  있으며, 쀑볡이 μ΅œμ†Œν™”λœ ν…ŒμŠ€νŠΈλŠ” 이름을 짓기가 쉽고 ν…ŒμŠ€νŠΈ λͺ©μ μ΄ λΆ„λͺ…ν•˜κ²Œ λ“œλŸ¬λ‚œλ‹€.