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

🍭 λ£¨λΉ„λ‘œ λ°°μš°λŠ” 객체지ν–₯ λ””μžμΈ

Chapter 9: λΉ„μš©-효율적인 ν…ŒμŠ€νŠΈ λ””μžμΈν•˜κΈ°β€‹

μ˜λ„λ₯Ό 가지고 ν…ŒμŠ€νŠΈν•˜κΈ°β€‹

  • ν…ŒμŠ€νŠΈλŠ” 버그λ₯Ό 쀄여주고 λ¬Έμ„œμ˜ 역할을 ν•˜λ©° ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ””μžμΈμ΄ ν–₯μƒλœλ‹€.
  • μ§„μ •ν•œ ν…ŒμŠ€νŠΈμ˜ λͺ©ν‘œλŠ” λ””μžμΈμ˜ μ§„μ •ν•œ λͺ©ν‘œμ™€ λ˜‘κ°™μ΄, μ½”λ“œ μž‘μ„± λΉ„μš©μ„ μ€„μ΄λŠ” 것이닀.
  • ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ””μžμΈν•˜λŠ” 데 λ“œλŠ” μ‹œκ°„λ³΄λ‹€ 였래 κ±Έλ¦°λ‹€λ©΄ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” μ˜λ―Έκ°€ μ—†μ§€λ§Œ, ν…ŒμŠ€νŠΈ μž‘μ„± λΉ„μš©μ΄ λ„ˆλ¬΄ 높은 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 방법은 ν…ŒμŠ€νŠΈλ₯Ό κ·Έλ§Œλ‘λŠ” 것이 μ•„λ‹ˆλΌ ν…ŒμŠ€νŠΈλ₯Ό 더 잘 지 수 μžˆλ„λ‘ μˆ˜λ ¨ν•˜λŠ” 것이닀.

ν…ŒμŠ€νŠΈ μ˜λ„λ₯Ό μ•ŒκΈ°β€‹

  • 버그 μ°Ύμ•„λ‚΄κΈ°
    • 초기 λ‹¨κ³„μ—μ„œ 버그λ₯Ό λ°œκ²¬ν•˜κΈ°λ„ 쉽고 μˆ˜μ •ν•˜κΈ°λ„ μ‰¬μšΈ 뿐 μ•„λ‹ˆλΌ μ½”λ“œλ₯Ό 일찍 μ˜¬λ°”λ₯΄κ²Œ λ§Œλ“€μ–΄ λ†“λŠ” 것이 μ½”λ“œ λ””μžμΈμ— 긍정적인 영ν–₯을 λ―ΈμΉœλ‹€.
  • λ¬Έμ„œλ₯Ό μ œκ³΅ν•˜κΈ°
    • ν…ŒμŠ€νŠΈλ§Œμ΄ λ””μžμΈμ— λŒ€ν•œ 믿을 수 μžˆλŠ” λ¬Έμ„œλ₯Ό μ œκ³΅ν•œλ‹€.
  • λ””μžμΈ 결정을 미루기
    • μ˜λ„μ μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄ μ•„λ¬΄λŸ° λŒ€κ°€λ₯Ό 치λ₯΄μ§€ μ•Šκ³ λ„ μ•ˆμ „ν•˜κ²Œ λ””μžμΈ 결정을 λ―Έλ£° 수 μžˆλ‹€.
  • 좔상화λ₯Ό 돕기
    • 쒋은 λ””μžμΈμ€ μΆ”μƒν™”λœ μ½”λ“œμ— κΈ°λŒ€κ³  μžˆλŠ” μž‘κ³  독립적인 객체듀을 μžμ—°μŠ€λŸ½κ²Œ λ§Œλ“€μ–΄λ‚Έλ‹€. 이런 좔상화듀 μ‚¬μ΄μ˜ μƒν˜Έμž‘μš©μœΌλ‘œ μ‘°κΈˆμ”© λ³€ν•΄κ°„λ‹€.
    • μΆ”μƒν™”λœ λ””μžμΈμ΄ μ–΄λŠ μˆœκ°„μ— λ„λ‹¬ν•˜λ©΄, ν…ŒμŠ€νŠΈ μ—†μ΄λŠ” 더 이상 μ•ˆμ „ν•˜κ²Œ μ½”λ“œλ₯Ό μˆ˜μ •ν•  수 μ—†λŠ” μˆ˜μ€€μ— λ„λ‹¬ν•œλ‹€.
    • ν…ŒμŠ€νŠΈλŠ” λͺ¨λ“  μΆ”μƒν™”λœ μΈν„°νŽ˜μ΄μŠ€μ˜ 기둝이기 λ•Œλ¬Έμ— 우리의 μž‘μ—…μ„ μ§€μ§€ν•΄μ£ΌλŠ” 기반이 λœλ‹€.
  • λ””μžμΈμ˜ 결점 λ“œλŸ¬λ‚΄κΈ°
    • ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ μ€€λΉ„ μž‘μ—…μ΄ λ„ˆλ¬΄ νž˜κ²Ήλ‹€λ©΄ μ½”λ“œμ— λ„ˆλ¬΄ λ§Žμ€ λ§₯락(context)이 μžˆλ‹€λŠ” λœ»μ΄λ‹€.
    • 객체 ν•˜λ‚˜λ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ 객체λ₯Ό 많이 λŒμ–΄μ™€μ•Ό ν•œλ‹€λ©΄ 이 μ½”λ“œλŠ” μ˜μ‘΄μ„±μ΄ λ†’λ‹€λŠ” λœ»μ΄λ‹€. λ””μžμΈμ΄ λ‚˜μ  λ•Œ ν…ŒμŠ€νŠΈλŠ” νž˜λ“€μ–΄μ§„λ‹€.
    • μ΅œμ†Œν•œμ˜ λΉ„μš©μœΌλ‘œ ν…ŒμŠ€νŠΈκ°€ μ œκ³΅ν•˜λŠ” 이점을 μ΅œλŒ€ν•œμœΌλ‘œ λˆ„λ¦¬λŠ” 것이고 이걸 이루기 μœ„ν•΄μ„œλŠ” λŠμŠ¨ν•˜κ²Œ κ²°ν•©λœ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 것이닀.

무엇을 ν…ŒμŠ€νŠΈν• μ§€ μ•ŒκΈ°β€‹

ν…ŒμŠ€νŠΈμ—μ„œ 더 λ‚˜μ€ κ°€μΉ˜λ₯Ό μ–»κΈ° μœ„ν•œ 방법 쀑 ν•˜λ‚˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό 덜 μ§œλŠ” 것이닀. 이λ₯Ό μœ„ν•΄μ„œλŠ” λͺ¨λ“  것을 단 ν•œλ²ˆλ§Œ ν…ŒμŠ€νŠΈν•˜κ³  μ œλŒ€λ‘œ 된 κ³³μ—μ„œ ν…ŒμŠ€νŠΈν•΄μ•Ό ν•œλ‹€.

λͺ¨λ“  κ°μ²΄μ—μ„œ κ°€μž₯ μ•ˆμ •μ μΈ 것은 퍼블릭 μΈν„°νŽ˜μ΄μŠ€λ‘œ μš°λ¦¬κ°€ ν…ŒμŠ€νŠΈν•˜λŠ” 것은 퍼블릭 μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜λœ λ©”μ‹œμ§€μ΄λ‹€.

κ°€μž₯ λΉ„νš¨μœ¨μ μΈ 것은 λΆˆν•„μš”ν•œ ν…ŒμŠ€νŠΈλŠ” 객체λ₯Ό κ°μ‹ΈλŠ” 방어막을 뚫고 λ“€μ–΄κ°€μ„œ 객체 λ‚΄λΆ€μ˜ λΆˆμ•ˆμ •ν•œ 세뢀사항을 ν…ŒμŠ€νŠΈν•˜λŠ” 것이닀. λ¦¬νŒ©ν† λ§μ‹œ μœ μ§€λ³΄μˆ˜ λΉ„μš©λ§Œ λ†’μ΄κ²Œ λœλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν…ŒμŠ€νŠΈλŠ” 객체의 경계λ₯Ό λ„˜λ‚˜λ“œλŠ” λ©”μ‹œμ§€μ— 집쀑해야 ν•œλ‹€. κ°μ²΄λŠ” 였직 μžμ‹ μ˜ 퍼블릭 μΈν„°νŽ˜μ΄μŠ€μ— μ†ν•˜λŠ” λ©”μ‹œμ§€μ˜ μƒνƒœλ§Œ 검증해야 ν•œλ‹€. λ“€μ–΄μ˜€λŠ” λ©”μ‹œμ§€μ— λŒ€ν•΄μ„œλŠ” λ©”μ‹œμ§€κ°€ λ°˜ν™˜ν•˜λŠ” μƒνƒœλ₯Ό ν…ŒμŠ€νŠΈν•œλ‹€.

μ–Έμ œ ν…ŒμŠ€νŠΈν• μ§€ μ•ŒκΈ°β€‹

ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜λŠ” 것이 μ’‹λ‹€. ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜λ©΄ 객체λ₯Ό 처음 λ§Œλ“œλŠ” μˆœκ°„λΆ€ν„° 객체 속에 μ•½κ°„μ˜ μž¬μ‚¬μš© κ°€λŠ₯성을 κ°μΈμ‹œμΌœ λ†“κ²Œ λœλ‹€.

μ œλŒ€λ‘œ 된 μ‹œμ μ— μ λ‹Ήν•œ μ–‘μ˜ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œλ‹€λ©΄, 그리고 ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•œλ‹€λ©΄ 전체적인 κ°œλ°œλΉ„μš©μ„ 쀄일 수 μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 객체지ν–₯ λ””μžμΈμ˜ 원칙을 ν…ŒμŠ€νŠΈμ—μ„œλ„ μ μš©ν•΄μ•Ό ν•œλ‹€.


프라이빗 λ©”μ„œλ“œλ₯Ό ν…ŒμŠ€νŠΈν•  λ•Œ κΈ°λ³Έ 원칙은 μ ˆλŒ€ ν…ŒμŠ€νŠΈ ν•˜μ§€ 마라. λ§Œμ•½ ν…ŒμŠ€νŠΈν•΄μ•Ό ν•œλ‹€λ©΄, κ·Έλž˜λ„ ν…ŒμŠ€νŠΈ ν•˜μ§€ 마라. λ¬Όλ‘  κΌ­ ν•΄μ•Ό ν•˜λŠ” μƒν™©μ—μ„œλŠ” ν…ŒμŠ€νŠΈν•΄λ„ λœλ‹€.