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

πŸ€” Chapter 4: μ‹€μš©μ£Όμ˜ νŽΈμ§‘μ¦

Tip 36. μ—¬λŸ¬λΆ„μ€ μ™„λ²½ν•œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§Œλ“€ 수 μ—†λ‹€.

μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” 자기 μžμ‹  μ—­μ‹œ 믿지 μ•ŠλŠ”λ‹€. μ–΄λŠ λˆ„κ΅¬λ„, μ‹¬μ§€μ–΄λŠ” 자기 μžμ‹ λ„ μ™„λ²½ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μ—†μŒμ„ μ•ŒκΈ° λ•Œλ¬Έμ— μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μžμ‹ μ˜ μ‹€μˆ˜μ— λŒ€λΉ„ν•œ 방어책을 λ§ˆλ ¨ν•œλ‹€.

🍭 Topic 23. 계약에 μ˜ν•œ 섀계​

계약은 μžμ‹ κ³Ό μƒλŒ€νŽΈμ˜ ꢌ리 및 μ±…μž„μ„ μ •μ˜ν•œλ‹€. 그뿐만 μ•„λ‹ˆλΌ ν•œμͺ½μ΄ 계약을 어겼을 경우의 λŒ€μ‘λ„ 계약 사항에 ν¬ν•¨λœλ‹€.

πŸ₯• DBC​

DBC(계약에 μ˜ν•œ 섀계)λŠ” λ‹¨μˆœν•˜μ§€λ§Œ κ°•λ ₯ν•œ κΈ°λ²•μœΌλ‘œ, ν”„λ‘œκ·Έλž¨μ˜ 정확성을 보μž₯ν•˜κΈ° μœ„ν•΄ μ†Œν”„νŠΈμ›¨μ–΄ λͺ¨λ“ˆμ˜ κΆŒλ¦¬μ™€ μ±…μž„μ„ λ¬Έμ„œν™”ν•˜κ³  ν•©μ˜ν•˜λŠ” 데에 μ΄ˆμ μ„ λ§žμΆ˜λ‹€. μ •ν™•ν•œ ν”„λ‘œκ·Έλž¨μ΄λž€ 무엇인가? μžμ‹ μ΄ ν•˜λŠ” 일이라고 μ£Όμž₯ν•˜λŠ” 것보닀 λ§Žμ§€λ„ 적지도 μ•Šκ²Œ λ”± 그만큼만 ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€. 이 μ£Όμž₯을 λ¬Έμ„œν™”ν•˜κ³  κ²€μ¦ν•˜λŠ” 것이 "계약에 μ˜ν•œ 섀계"의 핡심이닀.

μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ˜ λͺ¨λ“  ν•¨μˆ˜μ™€ λ©”μ„œλ“œλŠ” λ­”κ°€λ₯Ό ν•œλ‹€. κ·Έ λ­”κ°€λ₯Ό μ‹œμž‘ν•˜κΈ° 전에 ν•΄λ‹Ή ν•¨μˆ˜λŠ” μ„Έμƒμ˜ μƒνƒœμ— λŒ€ν•΄ μ–΄λ–€ μ „μ œ 쑰건을 κ°–κ³  μžˆμ„ ν…Œκ³ , 루틴이 λλ‚œ ν›„μ—λŠ” μ„Έμƒμ˜ μƒνƒœκ°€ μ–΄λ– ν•  것이라고 μ„ μ–Έν•  수 μžˆμ„ 것이닀.

μ„ ν–‰ 쑰건​

  • 루틴이 호좜되기 μœ„ν•΄ 참이어야 ν•˜λŠ” 것.
  • 즉, λ£¨ν‹΄μ˜ μš”κ΅¬ 사항이닀. λ£¨ν‹΄μ˜ μ„ ν–‰ 쑰건이 μœ„λ°˜λœ κ²½μš°μ—λŠ” 루틴이 ν˜ΈμΆœλ˜μ–΄μ„œλŠ” μ•ˆ λœλ‹€. μ œλŒ€λ‘œ 된 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” 것은 ν˜ΈμΆœν•˜λŠ” μͺ½μœΌ μ±…μž„μ΄λ‹€.

ν›„ν–‰ 쑰건​

  • 루틴이 μžκΈ°κ°€ ν•  것이라고 보μž₯ν•˜λŠ” 것.
  • 즉, 루틴이 μ™„λ£Œλ˜μ—ˆμ„ λ•Œ μ„Έμƒμ˜ μƒνƒœλ‹€. 루틴에 ν›„ν–‰ 쑰건이 μžˆλ‹€λŠ” 것은 곧 루틴이 μ’…κ΅­μ—λŠ” μ’…λ£Œλ  κ²ƒμ΄λΌλŠ” κ±Έ μ˜λ―Έν•œλ‹€. λ¬΄ν•œ λ°˜λ³΅μ€ ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€.

클래슀 λΆˆλ³€μ‹β€‹

  • 호좜자의 μž…μž₯μ—μ„œ λ³Ό λ•ŒλŠ” 이 쑰건이 μ–Έμ œλ‚˜ 참인 것을 ν΄λž˜μŠ€κ°€ 보μž₯ν•œλ‹€.
  • λ£¨ν‹΄μ˜ λ‚΄λΆ€ 처리 λ„μ€‘μ—λŠ” λΆˆλ³€μ‹μ΄ 참이 아닐 μˆ˜λ„ μžˆμ§€λ§Œ, 루틴이 λλ‚˜κ³  호좜자둜 μ œμ–΄κΆŒμ΄ λ°˜ν™˜λ˜λŠ” μ‹œμ μ—λŠ” λΆˆλ³€μ‹μ΄ 참이 λ˜μ–΄μ•Ό ν•œλ‹€.

루틴과 κ·Έ 루틴을 ν˜ΈμΆœν•˜λ €λŠ” μ½”λ“œ κ°„μ˜ 계약은 λ‹€μŒκ³Ό κ°™λ‹€.

λ§Œμ•½ ν˜ΈμΆœμžκ°€ λ£¨ν‹΄μ˜ λͺ¨λ“  μ„ ν–‰ 쑰건을 μΆ©μ‘±ν•œλ‹€λ©΄ ν•΄λ‹Ή 루틴은 μ’…λ£Œ μ‹œ λͺ¨λ“  ν›„ν–‰ 쑰건과 λΆˆλ³€μ‹μ΄ 참이 λ˜λŠ” 것을 보μž₯ν•œλ‹€.

λ§Œμ•½ 계약 λ‹Ήμ‚¬μž 쀑 μ–΄λŠ ν•œμͺ½μ΄λΌλ„ 이 계약 λ‚΄μš©μ„ 지킀지 λͺ»ν•˜λ©΄ ν•΄κ²° λ°©μ•ˆμ΄ μ‹€ν–‰λœλ‹€. μ˜ˆμ™Έκ°€ λ°œμƒν•  μˆ˜λ„ 있고 μ•„λ‹ˆλ©΄ ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œμ‹œν‚¬ μˆ˜λ„ μžˆλ‹€. 무슨 일이 λ²Œμ–΄μ§€λ“ μ§€ ν™•μ‹€ν•œ 점은 계약에 λΆ€μ‘ν•˜μ§€ λͺ»ν•˜λŠ” 것은 λ²„κ·ΈλΌλŠ” 것이닀. 이것은 κ²°μ½” λ°œμƒν•΄μ„œλŠ” μ•ˆ λ˜λŠ” 일이며, κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ„ ν–‰ 쑰건을 μ΄μš©ν•΄μ„œ μ‚¬μš©μž μž…λ ₯값을 κ²€μ¦ν•œλ‹€κ±°λ‚˜ ν•΄μ„œλŠ” μ•ˆ λœλ‹€.

Tip 37. κ³„μ•½μœΌλ‘œ μ„€κ³„ν•˜λΌ.

κ³„μœΌλ¦„λ±…μ΄(lazy) μ½”λ“œλ₯Ό κ°•μ‘°ν•˜κ³  μ‹Άλ‹€. μ‹œμž‘ν•˜κΈ° 전에 μžμ‹ μ΄ μˆ˜μš©ν•  것은 μ—„κ²©ν•˜κ²Œ ν™•μΈν•˜κ³ , λ‚΄μ–΄ 쀄 것에 λŒ€ν•΄μ„œλŠ” μ΅œμ†Œν•œλ„λ₯Ό μ•½μ†ν•˜λŠ” 것이닀. 무엇이든 μˆ˜μš©ν•˜κ³  κ²°κ³Όλ‘œλŠ” 무엇이든 λ‹€ μ€€λ‹€κ³  계약을 μ“°μ—¬ μžˆλ‹€λ©΄, μ—¬λŸ¬λΆ„μ€ 정말이지 λ§Žμ€ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•  것이닀.

πŸ₯• DBC κ΅¬ν˜„β€‹

μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° 전에 μœ νš¨ν•œ μž…λ ₯ λ²”μœ„κ°€ 무엇인지, 경계 쑰건이 무엇인지, 루틴이 뭘 μ „λ‹¬ν•œλ‹€κ³  μ•½μ†ν•˜λŠ”μ§€, ν˜Ήμ€ 더 μ€‘μš”ν•˜κ²ŒλŠ” 무엇을 μ•½μ†ν•˜μ§€ μ•ŠλŠ”μ§€ λ“± λ‚˜μ—΄ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλ„λ” λ‚˜μ€ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μž‘μ„±ν•˜λŠ” 데에 μ—„μ²­λ‚œ 도움이 λœλ‹€.

πŸ₯• DBC와 일찍 λ©ˆμΆ”κΈ°β€‹

DBCλŠ” 우리의 "일찍 μž‘λ™μ„ 멈좰라."λΌλŠ” κ°œλ…κ³Ό 잘 μ–΄μšΈλ¦°λ‹€. λ‹¨μ •λ¬Έμ΄λ‚˜ DBC 방식을 μ‚¬μš©ν•˜μ—¬ μ„ ν–‰ μ‘°κ±΄μ΄λ‚˜ ν›„ν–‰ 쑰건, λΆˆλ³€μ‹μ„ κ²€μ¦ν•˜λ©΄ 더 일찍 λ©ˆμΆ”κ³ , λ¬Έμ œμ— λŒ€ν•œ 보닀 μ •ν™•ν•œ 정보λ₯Ό μ•Œλ €μ€„ 수 μžˆμ„ 것이닀.

문제λ₯Ό μ°Ύκ³  원인을 밝히기 μœ„ν•΄μ„œλŠ” 사고가 λ‚œ μ§€μ μ—μ„œ 일찍 λ©ˆμΆ”λŠ” 것이 μœ λ¦¬ν•˜λ‹€.

πŸ₯• 의미둠적 λΆˆλ³€μ‹β€‹

의미둠적 λΆˆλ³€μ‹μ„ μ‚¬μš©ν•˜λ©΄ μΌμ’…μ˜ 철학적 계약인 μ ˆλŒ€ μ–΄κ²¨μ„œλŠ” μ•ˆ λ˜λŠ” μš”κ΅¬ 사항을 ν‘œν˜„ν•  수 μžˆλ‹€.

μ–΄κ²¨μ„œλŠ” μ•ˆ λ˜λŠ” κ³ μ •λœ κ·œμΉ™μΈ μš”κ΅¬ 사항과 κ²½μ˜μ§„μ΄ λ°”λ€Œλ©΄ μ–Όλ§ˆλ“ μ§€ μ—†μ–΄μ§ˆ 수 μžˆλŠ” λ‹¨μˆœν•œ 정책을 ν˜Όλ™ν•˜μ§€ 말아야 ν•œλ‹€. 의미둠적 λΆˆλ³€μ‹μ€ 무언가가 ν’ˆμ€ μ§„μ§œ 의미λ₯Ό 쀑심이 λ˜μ–΄μ•Ό ν•˜λ©°, 훨씬 μ—­λ™μ μœΌλ‘œ λ³€ν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ²˜λŸΌ μΌμ‹œμ μΈ 정책에 영ν–₯을 λ°›μœΌλ©΄ μ•ˆ λœλ‹€. μš°λ¦¬κ°€ 의미둠적 λΆˆλ³€μ‹μ΄λΌλŠ” μš©μ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 이 λ•Œλ¬Έμ΄λ‹€.

λΆˆλ³€μ‹μ˜ 자격이 μžˆλŠ” μš”κ΅¬ 사항을 μ°Ύμ•˜λ‹€λ©΄ μ—¬λŸ¬λΆ„μ΄ μž‘μ„±ν•˜λŠ” λͺ¨λ“  λ¬Έμ„œμ— 잘 λ“œλŸ¬λ‚˜λ„λ‘ λ§Œλ“€μ–΄λΌ. 그게 μ„Έ λΆ€μ”© μ„œλͺ…ν•˜λŠ” μš”κ΅¬ 사항 λ¬Έμ„œμ˜ λ²ˆν˜ΈλΆ™μΈ λͺ©λ‘μ΄λ“ , ν˜Ήμ€ λͺ¨λ“  μ‚¬λžŒμ΄ λ³Ό 수 μžˆλŠ” 곡용 ν™”μ΄νŠΈλ³΄λ“œμ— 쓰인 μ»€λ‹€λž€ λ©”λͺ¨μ΄λ“  뭐든 λͺ¨λ‘κ°€ μ—¬λŸ¬λΆ„μ΄ μ°ΎλŠ” 의미둠적 λΆˆλ³€μ‹μ„ 잘 λ“œλŸ¬λ‚΄μ•Ό ν•œλ‹€. λͺ…ν™•ν•˜κ³  λͺ¨ν˜Έν•œ 점이 μ—†κ²Œ μ„œμˆ ν•˜λ„λ‘ λ…Έλ ₯ν•˜λΌ.

였λ₯˜ λ°œμƒ μ‹œ μ†ŒλΉ„μžμ˜ μž…μž₯을 μš°μ„ ν•˜λΌ.

이것은 μ‹œμŠ€ν…œμ˜ μ—¬λŸ¬ λ‹€λ₯Έ 뢀뢄에 μ μš©ν•  수 μžˆλŠ” λΆ„λͺ…ν•˜κ³  κ°„λž΅ν•˜λ©° λͺ…ν™•ν•œ 선언이닀. μ΄λŠ” λͺ¨λ“  μ‹œμŠ€ν…œ μ‚¬μš©μžμ™€ λ§ΊλŠ” 계약이며 λ™μž‘μ— λŒ€ν•œ 우리의 보증이닀.

πŸ₯• 동적 계약과 μ—μ΄μ „νŠΈβ€‹

μ§€κΈˆκΉŒμ§€ μš°λ¦¬λŠ” 계약이 κ³ μ •λΆˆλ³€μ˜ λͺ…세라고 κ°€μ •ν•˜κ³  μ΄μ•ΌκΈ°ν–ˆλ‹€. ν•˜μ§€λ§Œ 자율 μ—μ΄μ „νŠΈμ˜ λ¬΄λŒ€μ—μ„œλΌλ©΄ μ΄μ•ΌκΈ°λŠ” 달라진닀. "자율"의 μ •μ˜ λ”°λ₯΄λ©΄ μ—μ΄μ „νŠΈλŠ” μžμ‹ μ΄ λ”°λ₯΄κΈ° μ›μΉ˜ μ•ŠλŠ” μš”κ΅¬λ₯Ό κ±°μ ˆν•  μžμœ κ°€ μžˆλ‹€. 계약을 μž¬ν˜‘ν•  μžμœ λ„ μžˆλ‹€. "κ·Έκ±Έ μ œκ³΅ν•΄ λ“œλ¦΄ μˆ˜λŠ” μ—†μ–΄μš”. ν•˜μ§€λ§Œ 어렀뢄이 이걸 μ£Όμ‹ λ‹€λ©΄ 저도 λ­”κ°€ λ‹€λ₯Έ κ±Έ λ“œλ¦΄ μˆ˜λŠ” μžˆμ–΄μš”."

μ—μ΄μ „νŠΈ κΈ°μˆ μ— μ˜μ‘΄ν•˜λŠ” μ–΄λ–€ μ‹œμŠ€ν…œμ΄κ±΄ κ³„μ•½μ˜ ν•©μ˜κ°€ κ²°μ •μ μœΌλ‘œ μ€‘μš”ν•˜λ‹€λŠ” 점은 λΆ„λͺ…ν•˜λ‹€. 계약 λ‚΄μš©μ΄ 맀번 λ™μ μœΌλ‘œ μƒμ„±λ˜λ”λΌλ„ λ§ˆμ°¬κ°€μ§€λ‹€.

🍭 Topic 24. 죽은 ν”„λ‘œκ·Έλž¨μ€ 거짓말을 ν•˜μ§€ μ•ŠλŠ”λ‹€.​

μš°λ¦¬λŠ” λŒ€λ‹€μˆ˜κ°€ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ–„ 파일이 μ„±κ³΅μ μœΌλ‘œ λ‹«ν˜”λŠ”μ§€, ν˜Ήμ€ 트레이슀 문이 우리 μ˜ˆμƒλŒ€λ‘œ μ°ν˜”λŠ”μ§€ ν™•μΈν•˜μ§€ μ•Šμ•˜λ˜ 적이 μžˆμ„ 것이닀. 그리고 λ‹€λ₯Έ λͺ¨λ“  쑰건이 늘 κ·ΈλŒ€λ‘œλΌλ©΄ 그럴 ν•„μš”κ°€ μ—†μ—ˆμ„μ§€λ„ λͺ¨λ₯Έλ‹€. 문제의 μ½”λ“œλŠ” 정상적인 μƒν™©μ—μ„œλŠ” μ‹€νŒ¨ν•˜μ§€ μ•Šμ•˜μ„ 것이닀. ν•˜μ§€λ§Œ μš°λ¦¬λŠ” μ§€κΈˆ λ°©μ–΄μ μœΌλ‘œ μ½”λ”©ν•˜κ³  μžˆλ‹€.
데이터가 μš°λ¦¬κ°€ μƒκ°ν•˜λŠ” λŒ€λ‘œμΈμ§€, μ„œλΉ„μŠ€μ—μ„œ μž‘λ™ν•˜λŠ” μ½”λ“œκ°€ μš°λ¦¬κ°€ μƒκ°ν•˜λŠ” κ·Έ μ½”λ“œμΈμ§€ 확인해야 ν•œλ‹€.

λͺ¨λ“  였λ₯˜λŠ” 정보λ₯Ό μ€€λ‹€. μ—¬λŸ¬λΆ„μ€ 였λ₯˜κ°€ λ°œμƒν•  리 μ—†λ‹€κ³  μžμ‹ μ„ μ„€λ“ν•˜κ³ μ„  κ·Έκ±Έ λ¬΄μ‹œν•˜κΈ°λ‘œ ν•  μˆ˜λ„ μžˆλ‹€. λ°˜λ©΄μ— μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” λ§Œμ•½ 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€λ©΄ μ •λ§λ‘œ λ­”κ°€ λ‚˜μœ 일이 생긴 것이라고 μžμ‹ μ—κ²Œ μ΄μ•ΌκΈ°ν•œλ‹€. 일단 κ·Έλ†ˆμ˜ 였λ₯˜ λ©”μ‹œμ§€ μ’€ 읽어라.

πŸ₯• μž‘μ€ ν›„ κ·Έλƒ₯ λ†“μ•„μ£ΌλŠ” 것은 물고기뿐​

μ–΄λ–€ κ°œλ°œμžλŠ” λͺ¨λ“  μ˜ˆμ™Έλ₯Ό catchλ‚˜ rescue둜 μž‘μ€ ν›„ 둜그 λ©”μ‹œμ§€λ₯Ό μ’€ 찍은 λ‹€μŒ λ‹€μ‹œ μ˜ˆμ™Έλ₯Ό λ°œμƒν•˜μ‹œν‚€λŠ” 것이 쒋은 방식이라고 μ—¬κΈ°λŠ” λ“―ν•˜λ‹€. 이λ₯Ό ν…Œλ©΄ λ‹€μŒκ³Ό 같은 μ‹μœΌλ‘œ μ½”λ“œλ₯Ό μ“΄λ‹€. μ—¬κΈ°μ„œ 아무 인자 없이 μ“΄ raiseλŠ” ν˜„μž¬ μ˜ˆμ™Έλ₯Ό λ‹€μ‹œ λ°œμƒμ‹œν‚€λŠ” 것이닀.

try do
add_score_to_board(score);
rescue InvalidScore
Logger.error("μ˜¬λ°”λ₯΄μ§€ μ•Šμ€ μ μˆ˜λŠ” 더할 수 μ—†μŒ. μ’…λ£Œν•©λ‹ˆλ‹€.");
raise
rescue BoardServerDown
Logger.error("점수λ₯Ό 더할 수 μ—†μŒ: λ³΄λ“œκ°€ μ£½μ—ˆμŒ. μ’…λ£Œν•©λ‹ˆλ‹€.");
raise
rescue StaleTransaction
Logger.error("점수λ₯Ό 더할 수 μ—†μŒ: 였래된 νŠΈλžœμž­μ…˜. μ’…λ£Œν•©λ‹ˆλ‹€.");
raise
end

μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨ΈλΌλ©΄ λ‹€μŒκ³Ό 같이 μ“Έ 것이닀.

add_score_to_board(score);

μ΄λ ‡κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” μ΄μœ λŠ” 두 가지닀. 첫째, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œκ°€ 였λ₯˜ 처리 μ½”λ“œ 사이에 λ¬»νžˆμ§€ μ•ŠλŠ”λ‹€. 더 μ€‘μš”ν•œ 두 번째 μ΄μœ λŠ” μ½”λ“œμ˜ 결합도λ₯Ό 높이지 μ•ŠλŠ”λ‹€λŠ” 점이닀. 길게 μ“΄ μ½”λ“œμ—μ„œλŠ” add_score_to_board λ©”μ„œλ“œκ°€ λ°œμƒμ‹œν‚¬ 수 μžˆλŠ” λͺ¨λ“  μ˜ˆμ™Έλ₯Ό λ‹€ λ‚˜μ—΄ν•΄μ•Ό ν•œλ‹€. λ§Œμ•½ λ©”μ„œλ“œ μ €μžκ°€ μƒˆλ‘œμš΄ μ˜ˆμ™Έλ₯Ό μΆ”κ°€ν•˜λ©΄ 이 μ½”λ“œλ„ μ‘°κΈˆμ΄μ§€λ§Œ 갱신이 ν•„μš”ν•œ μ½”λ“œκ°€ λ˜μ–΄ 버린닀. 보닀 μ‹€μš©μ μΈ 두 번째 μ½”λ“œμ—μ„œλŠ” μƒˆλ‘œμš΄ μ˜ˆμ™Έκ°€ μžλ™μœΌλ‘œ μ „νŒŒλœλ‹€.

Tip 38. 일찍 μž‘λ™μ„ 멈좰라.

πŸ₯• λ§μΉ˜μ§€ 말고 λ©ˆμΆ°λΌβ€‹

κ°€λŠ₯ν•œ ν•œ 빨리 문제λ₯Ό λ°œκ²¬ν•˜λ©΄ μ’€ 더 일찍 μ‹œμŠ€ν…œμ„ 멈좜 수 μžˆμœΌλ‹ˆ 더 λ‚«λ‹€. 계닀가 ν”„λ‘œκ·Έλž¨μ„ λ©ˆμΆ”λŠ” 것이 ν•  수 μžˆλŠ” μ΅œμ„ μΈ κ²½μš°κ°€ ν”ν•˜λ‹€.

μ–΄λ–€ ν™˜κ²½μ—μ„œλŠ” μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ„ κ·Έλƒ₯ μ’…λ£Œν•΄ λ²„λ¦¬λŠ” 것이 적절치 λͺ»ν•  μˆ˜λ„ μžˆλ‹€. ν•΄μ œλ˜μ§€ μ•Šμ€ λ¦¬μ†ŒμŠ€κ°€ 남아 μžˆμ„ μˆ˜λ„ 있고, 둜그 λ©”μ‹œμ§€λ₯Ό 기둝해야 ν•  μˆ˜λ„ 있고, μ—΄λ € μžˆλŠ” νŠΈλžœμž­μ…˜μ„ 정리해야 ν•˜κ±°λ‚˜ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€ μƒν˜Έμž‘μš©μ΄ ν•„μš”ν• μ§€λ„ λͺ¨λ₯Έλ‹€.

κ·Έλ ‡μ§€λ§Œ κΈ°λ³Έ 원칙은 λ˜‘κ°™λ‹€. 방금 μžˆμ„ 수 μ—†λŠ” 일이 λ°œμƒν–ˆλ‹€λŠ” 것을 μ½”λ“œκ°€ λ°œκ²¬ν–ˆλ‹€λ©΄ ν”„λ‘œκ·Έλž¨μ€ λ”λŠ” μœ νš¨ν•˜μ§€ μ•Šλ‹€κ³  ν•  수 μžˆλ‹€. μ΄μ‹œμ  μ΄ν›„λ‘œ ν•˜λŠ” 일은 λͺ¨λ‘ μˆ˜μƒμ©μ€ 게 λœλ‹€. λ˜λ„λ‘ 빨리 μ’…λ£Œν•  일이닀.
일반적으둜 죽은 ν”„λ‘œκ·Έλž¨μ΄ λΌμΉ˜λŠ” ν”Όν•΄λŠ” μ΄μƒν•œ μƒνƒœμ˜ ν”„λ‘œκ·Έλž¨μ΄ λΌμΉ˜λŠ” 피해보닀 훨씬 적은 법이닀.

🍭 Topic 25. 단정적 ν”„λ‘œκ·Έλž˜λ°β€‹

그런 일은 μ ˆλŒ€ 일어날 리 μ—†μ–΄

"이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ™Έκ΅­μ—μ„œ μ‚¬μš©ν•˜λŠ” 일은 μ ˆλŒ€ 없을 텐데 λ­ν•˜λ‘œ κ΅­μ œν™”ν•˜μ§€?", "countλŠ” μŒμˆ˜κ°€ 될 수 μ—†μ–΄.", "λ‘œκΉ…μ€ μ‹€νŒ¨ν•  리 μ—†μ–΄."
이런 μ‹μœΌλ‘œ μžμ‹ μ„ κΈ°λ§Œν•˜μ§€ 말자, 특히 μ½”λ”©ν•  λ•ŒλŠ”.

Tip 39. λ‹¨μ •λ¬ΈμœΌλ‘œ λΆˆκ°€λŠ₯ν•œ 상황을 μ˜ˆλ°©ν•˜λΌ.

"ν•˜μ§€λ§Œ λ¬Όλ‘  그런 일은 μ ˆλŒ€ μΌμ–΄λ‚˜μ§€ μ•Šμ„ κ±°μ•Ό."λΌλŠ” 생각이 λ“ λ‹€λ©΄ 그런 일을 ν™•μΈν•˜λŠ” μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λΌ. κ°€μž₯ κ°„λ‹¨ν•˜κ²Œ μΆ”κ°€ν•˜λŠ” 방법은 단정문을 μ‚¬μš©ν•˜λŠ” 것이닀. λŒ€λΆ€λΆ„μ˜ μ–Έμ–΄ κ΅¬ν˜„μ—μ„œ 쑰건이 참인지 거짓인지 ν™•μΈν•˜λŠ” assert의 일쒅을 찾을 수 μžˆμ„ 것이닀. 이런 단정문은 μ—„μ²­λ‚˜κ²Œ μœ μš©ν•˜λ‹€. 맀개 λ³€μˆ˜λ‚˜ κ²°κ³Όκ°€ μ ˆλŒ€ nullμ΄μ–΄μ„œλŠ” μ•ˆ λœλ‹€λ©΄ λͺ…μ‹œμ μœΌλ‘œ κ²€μ‚¬ν•˜λΌ.

assert (result != null);

μžλ°”λ‚˜ 파이썬의 λ‹¨μ •λ¬Έμ—λŠ” λ¬Έμžμ—΄λ‘œ μ„€λͺ…을 μΆ”κ°€ν•  수 μžˆλ‹€. κΌ­ μ„€λͺ…을 넣어라.

assert  result != null && result.size() > 0 : "XYZ의 κ²°κ³Όκ°€ λΉ„μ–΄ 있음";

단정은 μ•Œκ³ λ¦¬μ¦˜μ˜ λ™μž‘μ„ κ²€μ‚¬ν•˜λŠ” 데도 μœ μš©ν•˜λ‹€. μ—¬λŸ¬λΆ„μ΄ μ•„μ£Ό κΈ°λ°œν•œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μΈ my_sortλ₯Ό μž‘μ„±ν–ˆλ‹€λ©΄ 그것이 μ œλŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜λΌ.

books = my_sort(find("SF"))
assert(is_sorted?(books))

ν•˜μ§€λ§Œ μ§„μ§œ 였λ₯˜ 처리λ₯Ό ν•΄μ•Ό ν•˜λŠ” 곳은 단정을 λŒ€μ‹  μ‚¬μš©ν•˜μ§€λŠ” 말라. 단정은 κ²°μ½” μΌμ–΄λ‚˜λ©΄ μ•ˆ λ˜λŠ” 것듀을 κ²€μ‚¬ν•œλ‹€. λ‹€μŒκ³Ό 같은 μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ„œλŠ” μ•ˆ λœλ‹€.

puts("'Y'λ‚˜ 'N'을 μž…λ ₯ν•˜μ‹œμ˜€: ")
ch = gets[0] # μ‘λ‹΅μ˜ 첫 κΈ€μžλ§Œ 뢄리
assert((ch == 'Y')) || (ch == 'N') # λͺΉμ‹œ λ‚˜μœ 생각이닀!

그리고 단정이 μ‹€νŒ¨ν•  λ•Œ λŒ€λΆ€λΆ„μ΄ assert κ΅¬ν˜„μ΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œμ‹œν‚¨λ‹€κ³  ν•΄μ„œ μ—¬λŸ¬λΆ„μ΄ μž‘μ„±ν•˜λŠ” 버전도 κ·Έλž˜μ•Ό ν•  μ΄μœ λŠ” μ—†λ‹€. λ§Œμ•½ λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν•  ν•„μš”κ°€ μžˆλ‹€λ©΄ λ‹¨μ •μœΌλ‘œ 인해 λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ₯Ό μž‘κ±°λ‚˜ ν”„λ‘œκ·Έλž¨ μ’…λ£Œλ₯Ό μ€‘μ§€μ‹œν‚€κ³  μ—¬λŸ¬λΆ„μ˜ 였λ₯˜ 처리 루틴을 μ‹€ν–‰ν•˜λΌ. λ‹€λ§Œ, ν”„λ‘œμ„ΈμŠ€κ°€ μ£½λŠ” λͺ‡ λ°€λ¦¬μ΄ˆμ˜ μ‹œκ°„ λ™μ•ˆ μ—¬λŸ¬λΆ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ μ• μ΄ˆμ— 단정을 μ‹€νŒ¨ν•˜κ²Œ ν•œ 잘λͺ»λœ 정보에 μ˜μ‘΄ν•˜μ§€ μ•Šλ„λ‘ ν•˜λΌ.

πŸ₯• 단정과 λΆ€μž‘μš©β€‹

단정문을 μ“Έ λ•Œ 쑰건을 ν‰κ°€ν•˜λŠ” μ½”λ“œμ— λΆ€μž‘μš©(side effect)이 μžˆλ‹€λ©΄ 이런 일이 λ°œμƒν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ μ½”λ“œλ₯Ό λ‹€μŒκ³Ό 같이 μž‘μ„±ν•˜λŠ” 것은 그리 쒋은 생각이 μ•„λ‹ˆλ‹€.

while (iter.hasMoreElements()) {
assert(iter.nextElement() != null);
Object obj = iter.nextElement();
// ...
}

단정문 μ•ˆμ— μžˆλŠ” .nextElement() ν˜ΈμΆœμ€ 이 호좜이 λ°˜ν™˜ν•˜λŠ” μ›μ†Œ λ‹€μŒμœΌλ‘œ 반볡자λ₯Ό μ΄λ™μ‹œν‚€λŠ” λΆ€μž‘μš©μ΄ μžˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ 이 λ°˜λ³΅λ¬Έμ€ μ»¬λ ‰μ…˜μ˜ μ›μ†Œ 쀑 절반만 μ²˜λ¦¬ν•˜κ²Œ λœλ‹€. λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

while (iter.hasMoreElements()) {
Object obj = iter.nextElement();
assert(obj != null);
// ...
}

μ΄λŠ” 디버깅 ν–‰μœ„κ°€ λ””λ²„κΉ…ν•˜λ €λŠ” μ‹œμŠ€ν…œμ˜ 행동을 λ°”κΏ” λ²„λ¦¬λŠ” μΌμ’…μ˜ "ν•˜μ΄μ  λ²„κ·Έ"적인 λ¬Έμ œλ‹€.

πŸ₯• 단정 κΈ°λŠ₯을 켜 둬라​

단정문에 κ΄€ν•œ ν”ν•œ μ˜€ν•΄κ°€ ν•˜λ‚˜ μžˆλ‹€. λŒ€λž΅ λ‹€μŒκ³Ό λΉ„μŠ·ν•˜λ‹€.

단정은 μ½”λ“œλ₯Ό 느리게 λ§Œλ“ λ‹€. 단정은 μΌμ–΄λ‚˜μ„œλŠ” μ•ˆ λ˜λŠ” 일듀을 κ²€μ‚¬ν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œ 속에 버그가 μžˆμ„ λ•Œλ§Œ 단정 검사가 μ‹€νŒ¨ν•  것이닀. 일단 μ½”λ“œκ°€ ν…ŒμŠ€νŠΈλ˜κ³  배포된 λ‹€μŒμ—λŠ” 더 이상 단정이 ν•„μš”ν•˜μ§€ μ•Šλ‹€. κ·ΈλŸ¬λ‹ˆ μ½”λ“œ 싀행이 빨라지도둝 단정을 꺼버렀야 ν•œλ‹€. 단정은 디버깅 도ꡬ일 뿐이닀.

μ—¬λ¦¬κ²Œμ€ 두 가지 λͺ…λ°±ν•˜κ²Œ ν‹€λ¦° 가정이 μžˆλ‹€. 첫째, ν…ŒμŠ€νŠΈκ°€ λͺ¨λ“  버그λ₯Ό λ°œκ²¬ν•œλ‹€λŠ” 가정이닀. μ‹€μ œλ‘œλŠ” ν”„λ‘œκ·Έλž¨μ΄ 쑰금만 λ³΅μž‘ν•΄μ Έλ„ μ—¬λŸ¬λΆ„μ˜ μ½”λ“œκ°€ κ±°μΉ  수 μžˆλŠ” 경둜의 전체 μ‘°ν•©μ—μ„œ μ§€κ·Ήνžˆ 적은 λΉ„μœ¨μ‘°μ°¨λ„ ν…ŒμŠ€νŠΈν•˜κΈ° νž˜λ“€λ‹€. λ“€μ§Έ, λ‚™κ΄€μ£Όμ˜μžλ“€μ€ μ—¬λŸ¬λΆ„μ˜ ν”„λ‘œκ·Έλž¨μ΄ ν—˜ν•œ μ„Έμƒμ—μ„œ λŒμ•„κ°„λ‹€λŠ” 사싀을 μžŠλŠ”λ‹€. μ—¬λŸ¬λΆ„μ˜ 첫 번째 방어선은 κ°€λŠ₯ν•œ 였λ₯˜λ₯Ό λͺ¨λ‘ κ²€μ‚¬ν•˜λŠ” 것이고, κ·Έλ‹€μŒμ€ κ·ΈλŸ¬κ³ λ„ λ†“μΉœ 것을 μž‘μ•„λ‚΄κΈ° μœ„ν•΄ 단정을 μ‚¬μš©ν•˜λŠ” 것이닀.

μ„±λŠ₯ λ¬Έμ œκ°€ μžˆλ‹€ ν•˜λ”λΌλ„ 정말 λ¬Έμ œκ°€ λ˜λŠ” λ‹¨μ •λ¬Έλ§Œ 끄도둝 ν•˜μž. μ•žμ— λ‚˜μ˜¨ μ •λ ¬ μ˜ˆμ‹œκ°€ μ—¬λŸ¬λΆ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심적인 뢀뢄이고 λ”°λΌμ„œ 속도가 빨라야 할지도 λͺ¨λ₯Έλ‹€. 검사λ₯Ό μΆ”κ°€ν•˜λŠ” 것은 κ·Έ 데이터 전체λ₯Ό ν•œ 번 더 μ²˜λ¦¬ν•˜λŠ” 것을 μ˜λ―Έν•˜κΈ°μ— μˆ˜μš©ν•˜κΈ° νž˜λ“€ μˆ˜λ„ μžˆλ‹€. κ·Έ 단정 ν•˜λ‚˜λ§Œ 끌 수 있게 λ§Œλ“€κ³  λ‚˜λ¨Έμ§€λŠ” κ·ΈλŒ€λ‘œ 둬라.

🍭 Topic 26. λ¦¬μ†ŒμŠ€ μ‚¬μš©μ˜ κ· ν˜•β€‹

μš°λ¦¬λŠ” μ½”λ”©ν•  λ•Œ μ–Έμ œλ‚˜ λ¦¬μ†ŒμŠ€μ„ κ΄€λ¦¬ν•œλ‹€. κ·Έλ ‡μ§€λ§Œ λ§Žμ€ κ°œλ°œμžκ°€ λ¦¬μ†ŒμŠ€ ν• λ‹Ήκ³Ό ν•΄μ œλ₯Ό λ‹€λ£¨λŠ” μ•Œκ΄€λœ 방침을 κ°–κ³  μžˆμ§€ μ•Šλ‹€.

Tip 40. μžμ‹ μ΄ μ‹œμž‘ν•œ 것은 μžμ‹ μ΄ 끝내라.

λ¦¬μ†ŒμŠ€λ₯Ό ν• λ‹Ήν•˜λŠ” ν•¨μˆ˜λ‚˜ 객체가 λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν•˜λŠ” μ±…μž„ μ—­μ‹œ μ Έμ•Ό ν•œλ‹€λŠ” 뜻일 뿐이닀.

"μžμ‹ μ΄ μ‹œμž‘ν•œ 것은 μžμ‹ μ΄ 끝내라." 팁이 κ°€λ₯΄μ³ μ£ΌλŠ” 것은 μ΄μƒμ μœΌλ‘œ λ§ν•΄μ„œ λ¦¬μ†ŒμŠ€λ₯Ό ν• λ‹Ήν•˜λŠ” 루틴이 ν•΄μ œ μ—­μ‹œ μ±…μž„μ Έμ•Ό ν•œλ‹€λŠ” 것이닀.

Tip 41. μ§€μ—­μ μœΌλ‘œ ν–‰λ™ν•˜λΌ.

πŸ₯• 쀑첩 할당​

λ¦¬μ†ŒμŠ€ ν• λ‹Ήμ˜ κΈ°λ³Έ νŒ¨ν„΄μ„ ν™•μž₯ν•΄μ„œ ν•œ λ²ˆμ— μ—¬λŸ¬ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 루틴에 μ μš©ν•  수 μžˆλ‹€. 두 κ°€μ§€λ§Œ 더 μ œμ•ˆν•˜κ² λ‹€.

  • λ¦¬μ†ŒμŠ€λ₯Ό ν• λ‹Ήν•œ μˆœμ„œμ˜ μ—­μˆœμœΌλ‘œ ν•΄μ œν•˜λΌ. μ΄λ ‡κ²Œ ν•΄μ•Ό ν•œ λ¦¬μ†ŒμŠ€κ°€ λ‹€λ₯Έ λ¦¬μ†ŒμŠ€λ₯Ό μ°Έμ‘°ν•˜λŠ” κ²½μš°μ—λ„ μ°Έμ‘°λ₯Ό λ§κ°€νŠΈλ¦¬μ§€ μ•ŠλŠ”λ‹€.
  • μ½”λ“œμ˜ μ—¬λŸ¬ κ³³μ—μ„œ λ™μΌν•œ κ΅¬μ„±μ˜ λ¦¬μ†ŒμŠ€λ“€μ„ ν• λ‹Ήν•˜λŠ” κ²½μš°μ—λŠ” μ–Έμ œλ‚˜ 같은 μˆœμ„œλ‘œ ν• λ‹Ήν•΄μ•Ό ꡐ착 κ°€λŠ₯성을 쀄일 수 μžˆλ‹€.

μ–΄λ–€ μ’…λ₯˜μ˜ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ”μ§€λŠ” μ€‘μš”ν•˜μ§€ μ•Šλ‹€. λ¦¬μ†ŒμŠ€λ₯Ό ν• λ‹Ήν•˜λŠ” 것이 μ–Έμ œλ‚˜ κ·Έ λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν•  μ±…μž„κΉŒμ§€ μ Έμ•Ό ν•œλ‹€. κ·Έλ ‡μ§€λ§Œ λͺ‡λͺ‡ μ–Έμ–΄μ—μ„œλŠ” 이 κ°œλ…μ„ μ’€ 더 λ°œμ „μ‹œν‚¬ 수 μžˆλ‹€.

πŸ₯• 객체와 μ˜ˆμ™Έβ€‹

객체 지ν–₯ μ–Έμ–΄λ‘œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•œλ‹€λ©΄ λ¦¬μ†ŒμŠ€λ₯Ό 클래슀 μ•ˆμ— μΊ‘μŠν™”ν•˜λŠ” 것이 μœ μš©ν•  수 μžˆλ‹€. νŠΉμ • μœ ν˜•μ˜ λ¦¬μ†ŒμŠ€κ°€ ν•„μš”ν•  λ•Œλ§ˆλ‹€ κ·Έ 클래슀의 객체λ₯Ό μƒμ„±ν•˜λ©΄ λœλ‹€.

πŸ₯• κ· ν˜• μž‘κΈ°μ™€ μ˜ˆμ™Έβ€‹

μ˜ˆμ™Έλ₯Ό μ§€μ›ν•˜λŠ” μ–Έμ–΄μ—μ„œλŠ” λ¦¬μ†ŒμŠ€ ν•΄μ œκ°€ 골치 μ•„ν”Œ 수 μžˆλ‹€. μ˜ˆμ™Έκ°€ λ˜μ Έμ§„ 경우 μ˜ˆμ™Έ λ°œμƒ 이전에 ν• λ‹Ήλœ λͺ¨λ“  것이 깨끗이 μ²­μ†Œλœλ‹€κ³  μ–΄λ–»κ²Œ 보μž₯ν•  수 μžˆμ„κΉŒ? 일반적으둜 두 가지 방식이 μžˆλ‹€.

  1. λ³€μˆ˜ μŠ€μ½”ν”„λ₯Ό μ‚¬μš©ν•œλ‹€. 예λ₯Ό λ“€μ–΄ C++λ‚˜ 러슀트의 μŠ€νƒ λ³€μˆ˜κ°€ μžˆλ‹€.
  2. try-catch λΈ”λ‘μ—μ„œ finally μ ˆμ„ μ‚¬μš©ν•œλ‹€.

πŸ₯• λ¦¬μ†ŒμŠ€ μ‚¬μš©μ˜ κ· ν˜•μ„ μž‘μ„ 수 μ—†λŠ” κ²½μš°β€‹

이런 경우의 μš”λ Ήμ€ λ©”λͺ¨λ¦¬ 할당에 λŒ€ν•œ 의미둠적 λΆˆλ³€μ‹μ„ μ •ν•˜λŠ” 것이닀. ν•œκ΅°λ° λͺ¨μ€ 자료 ꡬ쑰 μ•ˆμ˜ 자료λ₯Ό λˆ„κ°€ μ±…μž„μ§€λŠ”μ§€ μ •ν•΄ 놓아야 ν•œλ‹€. 자료 κ΅¬μ‘°μ—μ„œ μ΅œμƒμœ„ ꡬ쑰의 λ©”λͺ¨λ¦¬ 할당을 ν•΄μ œν•  경우 μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Ό ν• κΉŒ? ν¬κ²ŒλŠ” λ‹€μŒ μ„Έ 가지 방법이 μžˆλ‹€.

  • μ΅œμƒμœ„ ꡬ쑰가 자기 μ•ˆμ— λ“€μ–΄ μžˆλŠ” ν•˜μœ„ ꡬ쑰듀을 ν•΄μ œν•  μ±…μž„μ„ 진닀. ν•˜μœ„ ꡬ쑰듀은 λ˜λ‹€μ‹œ μž¬κ·€μ μœΌλ‘œ 자기 μ•ˆμ— λ“€μ–΄ μžˆλŠ” μžλ£Œλ“€μ„ ν•΄μ œν•  μ±…μž„μ„ 지고, 이런 μ‹μœΌλ‘œ λ°˜λ³΅λœλ‹€.
  • μ΅œμƒμœ„ ꡬ쑰가 κ·Έλƒ₯ ν• λ‹Ή ν•΄μ œν•œλ‹€. μ΅œμƒμœ„ ꡬ쑰가 μ°Έμ‘°ν•˜λ˜ ν•˜μœ„ ꡬ쑰듀은 연결이 λŠμ–΄μ Έμ„œ λ‹€λ₯Έ κ³³μ—μ„œ μ°Έμ‘°ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 외톨이가 λœλ‹€.
  • μ΅œμƒμœ„ ꡬ쑰가 ν•˜λ‚˜λΌλ„ ν•˜μœ„ ꡬ쑰λ₯Ό 가지고 있으면 μžμ‹ μ˜ ν• λ‹Ή ν•΄μ œλ₯Ό κ±°λΆ€ν•œλ‹€.

πŸ₯• κ· ν˜•μ„ μ κ²€ν•˜κΈ°β€‹

μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μžμ‹ μ„ ν¬ν•¨ν•΄μ„œ 아무도 맏지 μ•ŠλŠ”λ‹€. μš°λ¦¬λŠ” μ–Έμ œλ‚˜ μ •λ§λ‘œ λ¦¬μ†ŒμŠ€κ°€ μ μ ˆν•˜κ²Œ ν•΄μ œλ˜μ—ˆλŠ”μ§€ μ‹€μ œλ‘œ μ κ²€ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것을 μ’‹μ•„ν•œλ‹€. ν”„λ‘œκ·Έλž¨ 논리에 λ”°λ₯΄μžλ©΄ μžμ›λ“€μ΄ λ°˜λ“œμ‹œ νŠΉμ •ν•œ μƒνƒœμ— μžˆμ–΄μ•Ό ν•œλ‹€κ³  지정할 수 μžˆλŠ” 지점듀이 μ½”λ“œ 속에 μžˆμ„ 것이닀. 래퍼λ₯Ό μ‚¬μš©ν•΄μ„œ μƒνƒœκ°€ μ˜¬λ°”λ₯Έμ§€ μ κ²€ν•˜λΌ.

🍭 Topic 27. ν—€λ“œλΌμ΄νŠΈλ₯Ό μ•žμ„œκ°€μ§€ 말라​

μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ 우리의 "ν—€λ“œλΌμ΄νŠΈ"λŠ” μ œν•œλ˜μ–΄ μžˆλ‹€.
μš°λ¦¬λŠ” λ„ˆλ¬΄ λ¨Ό λ―Έλž˜λŠ” λ‚΄λ‹€λ³Ό 수 μ—†κ³ , μ •λ©΄μ—μ„œ λ²—μ–΄λ‚œ 곳일수둝 더 μ–΄λ‘‘λ‹€. κ·Έλž˜μ„œ μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²ŒλŠ” ν™•κ³ ν•œ κ·œμΉ™μ΄ μžˆλ‹€.

Tip 42. μž‘μ€ 단계듀을 λ°Ÿμ•„λΌ. μ–Έμ œλ‚˜.

μ–Έμ œλ‚˜ μ‹ μ€‘ν•˜κ²Œ μž‘μ€ 단계듀을 λ°Ÿμ•„λΌ. 더 μ§„ν–‰ν•˜κΈ° 전에 ν”Όλ“œλ°±μ„ ν™•μΈν•˜κ³  μ‘°μ •ν•˜λΌ. ν”Όλ“œλ°±μ˜ λΉˆλ„λ₯Ό μ—¬λŸ¬λΆ„μ˜ μ œν•œ 속도라고 μƒκ°ν•˜λΌ. "λ„ˆλ¬΄ 큰" λ‹¨κ³„λ‚˜ μž‘μ—…μ€ ν•˜μ§€ μ•Šκ²Œ 될 것이닀.
μ—¬κΈ°μ„œ ν”Όλ“œλ°±μ΄λž€ 무엇을 λ§ν•˜λŠ” 걸까? μ—¬λŸ¬λΆ„μ˜ 행동을 λ…λ¦½μ μœΌλ‘œ ν™•μ¦ν•˜κ±°λ‚˜ λ°˜μ¦ν•˜λŠ” 것이라면 λͺ¨λ‘ ν”Όλ“œλ°±μ΄λ‹€. 예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό κ°™λ‹€.

  • REPL의 κ²°κ³ΌλŠ” APIλ‚˜ μ•Œκ³ λ¦¬μ¦˜μ„ μ—¬λŸ¬λΆ„μ΄ μ œλŒ€λ‘œ μ΄ν•΄ν•˜κ³  μžˆλŠ”μ§€ ν”Όλ“œλ°±μ„ μ€€λ‹€.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” 직전에 고친 μ½”λ“œμ— λŒ€ν•œ ν”Όλ“œλ°±μ„ μ€€λ‹€.
  • μ‚¬μš©μž 데λͺ¨ 및 μ‚¬μš©μžμ™€μ˜ λŒ€ν™”λŠ” κΈ°λŠ₯μ΄λ‚˜ μ‚¬μš©μ„±μ— λŒ€ν•œ ν”Όλ“œλ°±μ„ μ€€λ‹€.

μš°λ¦¬λŠ” 미래의 μœ μ§€ 보수λ₯Ό κ³ λ €ν•΄μ„œ 섀계해야 ν•˜μ§€ μ•ŠλŠλƒκ³ ? λ§žλ‹€. ν•˜μ§€λ§Œ μ—¬λŸ¬λΆ„μ΄ λ³Ό 수 μžˆλŠ” λ―Έλž˜κΉŒμ§€λ§Œ κ³ λ €ν•΄μ•Ό ν•œλ‹€. λ―Έλž˜κ°€ μ–΄λ–€ λͺ¨μŠ΅μΌμ§€ 더 많이 μ˜ˆμΈ‘ν•˜λ € ν• μˆ˜λ‘ μ—¬λŸ¬λΆ„μ΄ 틀릴 κ°€λŠ₯성은 계속 λ†’μ•„μ§ˆ 것이닀. λΆˆν™•μ‹€ν•œ λ―Έλž˜μ— λŒ€λΉ„ν•œ 섀계λ₯Ό ν•˜λŠλΌ 진을 λΉΌλŠ” λŒ€μ‹  μ–Έμ œλ‚˜ ꡐ체 κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ λŒ€λΉ„ν•˜λ©΄ λœλ‹€. μ—¬λŸ¬λΆ„μ˜ μ½”λ“œλ₯Ό λ”μ μ ˆν•œ λ¬΄μ–Έκ°€λ‘œ λŒ€μ²΄ν•˜κΈ° μ‰½κ²Œ μ„€κ³„ν•˜λΌ. μ½”λ“œλ₯Ό ꡐ체할 수 μžˆλ„λ‘ ν•˜λ©΄ μ‘μ§‘λ„λ‚˜ 결합도, DRY에도 도움이 되고, μ „λ°˜μ μœΌλ‘œ 더 λ‚˜μ€ 섀계가 탄생할 것이닀.

섀사 μ—¬λŸ¬λΆ„μ΄ λ―Έλž˜μ— λŒ€ν•œ 확신이 μžˆλ”λΌλ„ μ € λͺ¨ν‰μ΄ λ„ˆλ¨Έμ— λΈ”λž™ μŠ€μ™„μ΄ 기닀리고 μžˆμ„ 수 μžˆλ‹€.

πŸ₯• λΈ”λž™ μŠ€μ™„β€‹

이 μ±…μ˜ 1판이 λ‚˜μ˜¬ 무렡 컴퓨터 μž‘μ§€μ™€ 온라이 κ²Œμ‹œνŒμ„ 달ꡰ μ£Όμ œλŠ” "λ°μŠ€ν¬ν†± GUI μ „μŸμ˜ μŠΉμžλŠ” λˆ„κ΅¬μΈκ°€? λͺ¨ν‹°ν”„인가 μ•„λ‹ˆλ©΄ μ˜€ν”ˆλ£©μΈκ°€?"μ˜€λ‹€. 질문 μžμ²΄κ°€ ν‹€λ Έλ‹€. μ•„λ§ˆ μ—¬λŸ¬λΆ„μ€ 두 기술 λͺ¨λ‘ λ“€μ–΄ λ³Έ 적이 없을 것이닀. λˆ„κ΅¬λ„ "승자"κ°€ λ˜μ§€ λͺ»ν–ˆκ³  λΈŒλΌμš°μ € μ€‘μ‹¬μ˜ 웹이 λΉ λ₯΄κ²Œ 쀑원을 ν‰μ •ν–ˆλ‹€.

Tip 43. μ˜ˆμ–Έν•˜μ§€ 말라.

λŒ€λΆ€λΆ„μ˜ 경우 내일은 였늘과 거의 같을 것이닀. ν•˜μ§€λ§Œ ν™•μ‹ ν•˜μ§€λŠ” 말라.