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

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

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

πŸ“š ν…ŒμŠ€νŠΈ 이름은 κΈ°λŠ₯을 κΈ°μˆ ν•œλ‹€β€‹

  • λŒ€μƒ κ°μ²΄μ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯ μΈ‘λ©΄μ—μ„œ ν…ŒμŠ€νŠΈ 이름을 지어야 ν•œλ‹€.
  • ListλŠ” ν•­λͺ©μ΄ μΆ”κ°€λœ μˆœμ„œλŒ€λ‘œ ν•­λͺ©μ„ 보관
  • ListλŠ” λ™μΌν•œ ν•­λͺ©μ— λŒ€ν•΄ μ—¬λŸ¬ 개의 μ°Έμ‘°λ₯Ό 보관할 수 μžˆλ‹€.
  • ListλŠ” 보관 쀑이지 μ•Šμ€ ν•­λͺ©μ„ μ œκ±°ν•  λ•Œ μ˜ˆμ™Έλ₯Ό λ˜μ§„λ‹€.
public class ListTests {
@Test public void holdsItemsInTheOrderTheyWereAdded() { ... }
@Test public void canHoldMultipleReferencesToTheSameItem() { ... }
@Test public void throwsAnExceptionWhenRemovingAnItemItDoesntHold() { ... }
}
  • μŠ€νƒ€μΌ μΈ‘λ©΄μ—μ„œ ν…ŒμŠ€νŠΈ 이름은 μ˜ˆμƒν•˜λŠ” 결과와 객체의 행동, μ‹œλ‚˜λ¦¬μ˜€μ˜ 동기에 κ΄€ν•΄ 무언가λ₯Ό λ§ν•΄μ€˜μ•Ό ν•œλ‹€.

πŸ“š μ •κ·œ ν…ŒμŠ€νŠΈ ꡬ쑰​

  • ν…ŒμŠ€νŠΈλ₯Ό ν‘œμ€€ ν˜•νƒœλ‘œ μž‘μ„±ν•˜λ©΄ μ΄ν•΄ν•˜κΈ° 쉽고 μ˜ˆμƒ κ²°κ³Όλ₯Ό 단정을 λΉ λ₯΄κΈ° νŒŒμ•…ν•  수 있고 ν…ŒμŠ€νŠΈκ°€ ν…ŒμŠ€νŠΈ 쀑인 μ½”λ“œμ™€ μ–΄λ–»κ²Œ μ—°κ²°λ˜λŠ”μ§€ κ°€λŠ ν•  수 μžˆλ‹€.
  • κ°€μž₯ 곡톡적인 ν…ŒμŠ€νŠΈ ν˜•νƒœλŠ” λ‹€μŒκ³Ό κ°™λ‹€.
  • μ€€λΉ„(setup): λŒ€μƒ μ½”λ“œκ°€ 싀행될 ν™˜κ²½μ— ν•΄λ‹Ήν•˜λŠ” ν…ŒμŠ€νŠΈμ˜ μ½˜ν…μŠ€νŠΈλ₯Ό λ§ˆλ ¨ν•œλ‹€.
  • μ‹€ν–‰(execute): λŒ€μƒ μ½”λ“œλ₯Ό ν˜ΈμΆœν•΄ ν…ŒμŠ€νŠΈλœ ν–‰μœ„λ₯Ό μ΄‰λ°œν•œλ‹€.
  • 검증(Verify): ν•΄λ‹Ή ν–‰μœ„μ—μ„œ μ˜ˆμƒν•  수 μžˆλŠ” κ°€μ‹œμ μΈ 효과λ₯Ό κ²€μ‚¬ν•œλ‹€.
  • 정리(Teardown): λ‹€λ₯Έ ν…ŒμŠ€νŠΈμ— 손상을 μž…νž μˆ˜λ„ μžˆλŠ” μž”μ‘΄ μƒνƒœλ₯Ό μ •λ¦¬ν•œλ‹€.

πŸ“š ν…ŒμŠ€νŠΈ μ½”λ“œμ˜ λŠ₯λ₯ ν™”​

  • ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λΉ„λ‘―ν•΄ λͺ¨λ“  μ½”λ“œλŠ” μ–΄λ–»κ²Œλ³΄λ‹€ 무엇을 κ°•μ‘°ν•΄μ•Ό ν•œλ‹€.
  • λ©”μ„œλ“œμ— κ΅¬ν˜„ μ„ΈλΆ€ 사항이 많이 ν¬ν•¨λ μˆ˜λ‘ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ½λŠ” μ‚¬λžŒμ€ 무엇이 μ€‘μš”ν•œμ§€ μ΄ν•΄ν•˜κΈ° 더 μ–΄λ €μ›Œμ§„λ‹€.

ꡬ쑰λ₯Ό μ΄μš©ν•΄ μ„€λͺ…ν•˜λΌβ€‹

ꡬ쑰λ₯Ό μ‚¬μš©ν•΄ κ³΅μœ ν•˜λΌβ€‹

  • ν…ŒμŠ€νŠΈ ꡬ쑰λ₯Ό λ„μΆœν•  λ•Œ μœ μΌν•˜κ²Œ μ£Όμ˜ν•  점은 ν…ŒμŠ€νŠΈλ₯Ό λ„ˆλ¬΄ μΆ”μƒμ μœΌλ‘œ λ§Œλ“€μ–΄ ν…ŒμŠ€νŠΈκ°€ 뭘 ν•˜λŠ”μ§€ λ”λŠ” μ•Œμ§€ λͺ»ν•˜κ²Œ λ§Œλ“€μ§€ μ•Šλ„λ‘ 주의λ₯Ό κΈ°μšΈμ—¬μ•Ό ν•œλ‹€λŠ” 것이닀.
  • κ°€μž₯ 큰 κ΄€μ‹¬μ‚¬λŠ” ν…ŒμŠ€νŠΈκ°€ λŒ€μƒ μ½”λ“œκ°€ ν•˜λŠ” 일을 μ„œμˆ ν•˜κ²Œ ν•΄μ„œ λŒ€μƒ μ½”λ“œμ˜ 흐름을 νŒŒμ•…ν•  수 μžˆμ„ μ •λ„λ‘œ λ¦¬νŒ©ν„°λ§ν•˜λŠ” 것이닀.

긍정적인 μš”μ†Œλ₯Ό κ°•μ‘°ν•˜λΌβ€‹

λΆ€μˆ˜μ μΈ 객체에 μœ„μž„ν•˜λΌβ€‹

πŸ“š 단정과 μ˜ˆμƒ ꡬ문​

  • ν…ŒμŠ€νŠΈμ˜ 단정과 μ˜ˆμƒ ꡬ문은 λŒ€μƒ μ½”λ“œμ˜ ν–‰μœ„μ—μ„œ μ€‘μš”ν•œ λ°”λ₯Ό μ •ν™•νžˆ 전달해야 ν•œλ‹€.
  • μš°λ¦¬κ°€ μž‘μ„±ν•˜λŠ” μ˜ˆμƒ ꡬ문과 λ‹¨μ •μ˜ 경우, κ·Έκ²ƒλ“€μ˜ μ •μ˜ λ²”μœ„λ₯Ό λ˜λ„λ‘ 쒁히렀고 λ…Έλ ₯ν•œλ‹€.

πŸ“š λ¦¬ν„°λŸ΄κ³Ό λ³€μˆ˜β€‹

  • μ„€λͺ…이 μ—†λŠ” λ¦¬ν„°λŸ΄ 값은 μ΄ν•΄ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆλŠ”λ° κ·Έ μ΄μœ λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ νŠΉμ • 값이 μ€‘μš”ν•œμ§€, μ•„λ‹ˆλ©΄ λ‹¨μˆœνžˆ ν–‰μœ„λ₯Ό 좔적할 λͺ©μ μ˜ μž„μ˜ μœ„μΉ˜ μ§€μ •μžμ— ν•΄λ‹Ήν•˜λŠ”μ§€ 해석해야 ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • λ¦¬ν„°λŸ΄ 값은 μžμ‹ μ˜ 역할을 κΈ°μˆ ν•˜μ§€ μ•ŠλŠ”λ‹€. 해법은 λ¦¬ν„°λŸ΄ 값을 λ³€μˆ˜λ‚˜ μƒμˆ˜μ— ν• λ‹Ήν•˜κ³ , κ·Έκ²ƒλ“€μ˜ κΈ°λŠ₯을 κΈ°μˆ ν•˜λŠ” 이름을 λΆ€μ—¬ν•˜λŠ” 것이닀.
public static final Chat UNUSED_CHAT = null;
public final static INVALID_ID = 66;
  • μš°λ¦¬λŠ” λ³€μˆ˜μ— 이름을 λΆ€μ—¬ν•΄ μ΄λŸ¬ν•œ κ°’μ΄λ‚˜ 객체가 ν…ŒμŠ€νŠΈμ—μ„œ μˆ˜ν–‰ν•˜λŠ” μ—­ν• κ³Ό κ·Έκ²ƒλ“€μ˜ λŒ€μƒ κ°μ²΄μ™€μ˜ 관계λ₯Ό 보여쀀닀.