Notice
Recent Posts
Recent Comments
Link
Β«   2024/05   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

DOing

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ κ·Έλž˜μ„œ μ™œ μ“ΈκΉŒ? λ³Έλ¬Έ

디버깅쀑 🌠

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ κ·Έλž˜μ„œ μ™œ μ“ΈκΉŒ?

mangdo 2022. 10. 25. 01:00

  ν˜„μž¬ λ‹€λ‹ˆκ³  μžˆλŠ” νšŒμ‚¬μ—μ„œλŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μ½”λ“œ μ „λ°˜μ—μ„œ 적극적으둜 μ‚¬μš©ν•˜κ³  μžˆλ‹€. μ‚¬λ‚΄μ—μ„œ μ‚¬μš©ν•˜κ³  μžˆλŠ” μ–Έμ–΄κ°€ Kotlinμ΄λ‹€λ³΄λ‹ˆ, Kotlin 을 더 잘 μ‚¬μš©ν•  수 μžˆλŠ” 방법에 λŒ€ν•΄ κ³ λ―Όν•˜λ‹€κ°€ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄μ„œ μŠ€ν„°λ””λ₯Ό μ§„ν–‰ν–ˆμ—ˆλ‹€. μŠ€ν„°λ””λ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ μ μš©ν•΄λ³Ό 수 μžˆκ² λ‹€ 싢은 λ‚΄μš©λ“€μ€ μ‹€μ œλ‘œ ν”„λ‘œλ•μ…˜ μ½”λ“œμ— λ…Ήμ΄λ©΄μ„œ λ‚˜λ¦„λŒ€λ‘œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ 적극적으둜 ν™œμš©ν•˜κ³  μžˆλ‹€λΌκ³  μƒκ°ν–ˆλ‹€.

  μ–΄λŠλ‚ , ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ κ³΅λΆ€ν• κΉŒ κ³ λ―Όν•˜μ‹œλ˜ 같은 νŒ€μ˜ ν”„λ‘ νŠΈ μ—”μ§€λ‹ˆμ–΄ 뢄이 “ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ λ­μ—μš”? λ„μž…ν•˜λ©΄ μž₯점이 λ­μ—μš”?”라고 여쭀보셨닀. μˆœκ°„ 말문이 λ§‰νžˆλŠ” 것을 느껴쑌고, λ‚΄κ°€ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μ‚¬μš©ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν–ˆμ§€λ§Œ, κ·Έ μž₯점이 무엇인지 λŒ€μ²΄ μ™œ μ¨μ•Όν•˜λŠ”κ±΄μ§€μ— λŒ€ν•œ 닡을 λͺ…ν™•νžˆ μ„€λͺ…ν•  수 μ—†λ‹€λŠ” 것을 κΉ¨λ‹¬μ•˜λ‹€. κ·Έ μ΄ν›„λ‘œ κ·Έ 닡을 μ°ΎκΈ° μœ„ν•΄μ„œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— κ΄€ν•œ 세가지 정도 책을 μ½μ—ˆμ—ˆκ³  κ·Έ λ‚΄μš©μ„ 이번 ν¬μŠ€νŒ…μ—μ„œ μ •λ¦¬ν•΄λ³΄κ³ μž ν•œλ‹€.

 


ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄λž€?

  κ·Έλž˜μ„œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄λž€ λ¬΄μ—‡μΌκΉŒ?
  λ‚˜λŠ” 이 μ§ˆλ¬Έμ— λŒ€ν•΄ λͺ…ν™•ν•˜κ²Œ λŒ€λ‹΅ν•˜λŠ” 것 이 μƒλ‹Ήνžˆ νž˜λ“€μ—ˆλ‹€. ν•˜μ§€λ§Œ μ°Ύμ•„λ³΄λ‹ˆ λ‚˜λ§Œ 그런 것은 μ•„λ‹ˆμ˜€λ˜ 것 κ°™λ‹€. ν•¨μˆ˜ν˜• μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ €μžμΈ 마이클 ν¬κ±°μŠ€λŠ” ‘ν΄λ‘œμ € ν”„λ‘œκ·Έλž˜λ°μ˜ 즐거움’μ—μ„œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μ •μ˜μ— λŒ€ν•΄ λ‹€μŒκ³Ό 같이 μ΄μ•ΌκΈ°ν–ˆλ‹€.
   “μš°λ¦¬λ„ 정닡을 λͺ¨λ₯Έλ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ λͺ…ν™•ν•œ μ •μ˜κ°€ μ—†λŠ” μ»΄ν“¨νŒ… μš©μ–΄ 쀑 ν•˜λ‚˜λ‹€. μ–΄λ–€ μ‚¬λžŒμ΄ μ–΄λ–€ 책이, λ˜λŠ” μ–΄λ–€ μ–Έμ–΄κ°€ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•œ κΆŒμœ„λ₯Ό μ£Όμž₯ν•  수 μžˆκ² λŠ”κ°€?”
   “ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μ‹€μ œμ μΈ μ •μ˜λ‘œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν•¨μˆ˜μ˜ κ΅¬μ„±μš”μ†Œ, 더 λ‚˜μ•„κ°€ μ–Έμ–΄ 자체λ₯Ό ν•¨μˆ˜μ²˜λŸΌ 여기도둝 λ§Œλ“€κ³  μ΄λŸ¬ν•œ ν•¨μˆ˜ κ°œλ…μ„ κ°€μž₯ μš°μ„ μˆœμœ„μ— λ†“λŠ”λ‹€. ν•¨μˆ˜λŠ” κ°’μœΌλ‘œ λ‹€λ£° 수 μžˆμ–΄μ„œ λ‹€λ₯Έ 데이터듀과 λ§ˆμ°¬κ°€μ§€λ‘œ μ €μž₯이 κ°€λŠ₯ν•˜κ³  μ „λ‹¬ν•˜κ±°λ‚˜ 리턴 받을 수 μžˆλ‹€. 이것이 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— κ°€μž₯ μ€‘μš”ν•œ κ°œλ…μ΄λ‹€. ν•¨μˆ˜ν˜• 사고방식은 문제의 해결방법을 동사(ν•¨μˆ˜)λ“€μ˜ κ΅¬μ„±μœΌλ‘œ μ ‘κ·Όν•œλ‹€λŠ” 것이닀

 

λ‚΄κ°€ μ—¬λŸ¬ μ±…μ—μ„œ μ°Ύμ•„λ΄€λ˜ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•œ μ •μ˜ 쀑에 κ°€μž₯ 납득이 잘 κ°”λ˜ λ¬Έμž₯은 λ‹€μŒκ³Ό κ°™λ‹€.

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 성곡적인 ν”„λ‘œκ·Έλž˜λ°, μ•ˆμ „ν•œ ν”„λ‘œκ·Έλž¨μ„ μœ„ν•΄
λΆ€μˆ˜ 효과λ₯Ό μ΅œλŒ€ν•œ λ©€λ¦¬ν•˜κ³ 
쑰합성을 κ°•μ‘°ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄λ‹€.

 

 

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ λΆ€μˆ˜νš¨κ³Όλ₯Ό μ΅œλŒ€ν•œ λ©€λ¦¬ν•˜λŠ” μ΄μœ λŠ” λ‹€μŒ 두가지이닀.

  1. 였λ₯˜λ₯Ό 쀄이기 μœ„ν•΄
  2. μ‘°ν•©μ„± ν˜Ήμ€ λͺ¨λ“ˆν™” μˆ˜μ€€μ„ 높이기 μœ„ν•΄μ„œ

높은 λͺ¨λ“ˆν™” μˆ˜μ€€μ€ 성곡적인 ν”„λ‘œκ·Έλž˜λ°μ˜ ν•΅μ‹¬μš”μ†Œμ΄λ‹€.
높은 λͺ¨λ“ˆν™” μˆ˜μ€€μ€ 생산성을 높이고, 였λ₯˜ μ—†λŠ” ν•¨μˆ˜λ“€μ˜ 쑰합은 ν”„λ‘œκ·Έλž¨ μ „μ²΄μ˜ μ•ˆμ •μ„±μ„ λ†’μ—¬μ€€λ‹€.

 


ν•¨μˆ˜ν˜•μ˜ νŠΉμ§•(μž₯점)

🌱 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ λ²”μš©μ μ΄λ‹€.

  객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 객체가 기쀀이라면 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” ν•¨μˆ˜κ°€ 기쀀이닀.
  객체가 κΈ°μ€€μ΄λΌλŠ” 말은 λ°μ΄ν„°ν˜•μ΄ 기쀀이 λœλ‹€λŠ” 의미이고, ν•¨μˆ˜κ°€ κΈ°μ€€μ΄λΌλŠ” 말은 둜직이 기쀀이 λœλ‹€λŠ” μ˜λ―Έλ‹€.
객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄ λ°μ΄ν„°ν˜•μ„ μ„€κ³„ν•œ ν›„ 데이터 ν˜•μ— λ§žλŠ” λ©”μ„œλ“œλ₯Ό λΆ™μ—¬κ°€λŠ” 식이라면, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ ν•¨μˆ˜λ‘œ λ‘œμ§μ„ μ„€κ³„ν•œ ν›„ λ‘œμ§μ— λ§žλŠ” 데이터λ₯Ό 인자둜 ν—ˆμš©ν•œλ‹€.
 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 각기 λ‹€λ₯΄κ²Œ 생긴 데이터 ν˜•μ„ 더 많이 μ§€μ›ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜ λ‚΄λΆ€λ₯Ό ν•¨μˆ˜λ‘œ μΆ”μƒν™”ν•œλ‹€.
  덕뢄에 ν•¨μˆ˜ ν•˜λ‚˜κ°€ μ²˜λ¦¬ν•  수 μžˆλŠ” 데이터 ν˜•μ€ 끝이 μ—†λ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 데이터가 user, post,posts μΈμ§€λŠ” λ³„λ‘œ μ€‘μš”ν•˜μ§€ μ•ŠμœΌλ©° λͺ¨λ‘ μ²˜λ¦¬ν•  수 μžˆλŠ” μ•„μ£Ό 높은 λ‹€ν˜•μ„±μ„ 가진 ν•˜λ‚˜μ˜ ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” λ°©μ‹μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•œλ‹€.

🌱 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ μ½”λ“œκ°€ 짧닀.

  λ©”μ„œλ“œκ°€ 계측 ꡬ쑰의 μƒμ†μ΄λ‚˜ μΈμŠ€ν„΄μŠ€ μƒμ„±μœΌλ‘œ κΈ°λŠ₯을 κ³΅μœ ν•΄μ•Όν•œλ‹€λ©΄, ν•¨μˆ˜κ°€ 혼자 μ‘΄μž¬ν•˜κΈ°μ— μ•„λ¬΄λ ‡κ²Œλ‚˜ μ‘°ν•©ν•˜λ©΄ λœλ‹€. 데이터 ν˜•μ—μ„œ 자유둭고 쑰합이 μžμœ λ‘œμ›Œ μž¬μ‚¬μš©μ„±κ³Ό 쑰합성이 맀우 λ†’λ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ μž‘μ„±λœ μ½”λ“œλ₯Ό 보면 λ°μ΄ν„°μ˜ μƒκΉ€μƒˆκ°€ 잘 보이지 μ•ŠλŠ”λ‹€. μΆ”μƒν™”μ˜ 정도가 λ†’μ•„ 데이터 ν˜•μ΄ μ½”λ“œμ— 잘 λ“±μž₯ν•˜μ§€ μ•Šκ³  λ³€μˆ˜λͺ…μ΄λ‚˜ λ°μ΄ν„°μ˜ ꡬ쑰가 ν‘œν˜„λ˜λŠ” 일이 적닀. λŒ€μž…λ¬Έμ΄ 적어진닀. μ΄λŸ°μ λ“€λ•Œλ¬Έμ— μ½”λ“œκ°€ 맀우 짧아진닀.


🌱 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 읽기 쉽닀

  일단 λΆ„κΈ°κ°€ 적고, for while 같은 ꡬ쑰가 잘 λ“±μž₯ν•˜μ§€ μ•Šμ•„μ„œ μ½”λ“œ λͺ¨μ–‘이 λ‹¨μˆœν•˜λ‹€. λ‹€μ–‘ν•œ ν˜•μ„ 지원함에도 λ³΄μ‘°ν•¨μˆ˜μ˜ 쑰합을 톡해 λΆ„κΈ°λ₯Ό λŒ€μ‹ ν•˜κΈ°λ•Œλ¬Έμ— if문이 적닀. μœ„μ—μ„œ μ•„λž˜λ‘œ, μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ μ½νžˆλŠ” μ½”λ“œλŠ” 읽기 쉽닀. λΆ„κΈ° 없이 μ•žμœΌλ‘œλ§Œ κ°€λŠ” μ½”λ“œλŠ” 였λ₯˜κ°€ λ°œμƒν•  ν™•λ₯ λ„ 적고 κ³ μΉ˜κΈ°λ„ 쉽닀.


🌱 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 생λͺ…μ£ΌκΈ°κ°€ λ‹¨μˆœν•˜λ‹€.

  μ„ μ–Έκ³Ό μ‹€ν–‰μ΄λΌλŠ” λ‹¨μˆœν•œ 생λͺ…μ£ΌκΈ°λ₯Ό κ°–κΈ° λ•Œλ¬Έμ— μ–Έμ œλ“ μ§€ μ–΄λ””μ„œλ“ μ§€ μ‚¬μš©ν•˜κΈ° 쉽닀. ν•¨μˆ˜κ°€ μ–Έμ œ μ‹€ν–‰λ˜μ—ˆλŠ”κ°€, μ–΄λŠ μŠ€μ½”ν”„μ—μ„œ μ„ μ–Έλ˜μ—ˆλŠ”κ°€, μ–Έμ œ μ‹€ν–‰λ˜μ—ˆλŠ”κ°€, μ–Έμ œ 싀행될 κ²ƒμΈκ°€λ§Œ μ€‘μš”ν•˜λ‹€. λ˜ν•œ λŒ€λΆ€λΆ„μ˜ ν•¨μˆ˜λ“€μ€ λ§Œλ“ μ΄κ°€ 담은 섀계, μ² ν•™κ³Ό 같은 좔가적인 κ°œλ…λ“€μ΄ μ μ–΄μ„œ 빨리 이해할 수 있고 μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€. λˆ„κ°€ λ§Œλ“  ν•¨μˆ˜μ΄λ“  μΈμžμ™€ 결과만으둜 κ°€λ³κ²Œ μ†Œν†΅ν•  수 μžˆλ‹€.


ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ ν‚€μ›Œλ“œ

🌱 μΌκΈ‰ν•¨μˆ˜

일급은 κ°’μœΌλ‘œ λ‹€λ£° 수 μžˆλ‹€λŠ” 의미둜, μ•„λž˜μ™€ 같은 쑰건을 λ§Œμ‘±ν•΄μ•Όν•œλ‹€.

  • λ³€μˆ˜μ— 담을 수 μžˆλ‹€.
  • ν•¨μˆ˜λ‚˜ λ©”μ„œλ“œμ˜ 인자둜 λ„˜κΈΈ 수 μžˆλ‹€.
  • ν•¨μˆ˜λ‚˜ λ©”μ„œλ“œμ—μ„œ 리턴할 수 μžˆλ‹€.

μΌκΈ‰ν•¨μˆ˜λž€, μ•„λž˜μ™€ 같은 쑰건을 λ§Œμ‘±ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€.

  • ν•¨μˆ˜λ₯Ό λ³€μˆ˜λ‘œ 담을 수 μžˆλ‹€.
  • ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œμ˜ 인자둜 ν•¨μˆ˜λ₯Ό λ„˜κΈΈ 수 μžˆλ‹€.
  • ν•¨μˆ˜λ‚˜ λ©”μ„œλ“œμ—μ„œ ν•¨μˆ˜λ₯Ό 리턴할 수 μžˆλ‹€.


🌱 κ³ μ°¨ν•¨μˆ˜

κ³ μ°¨ν•¨μˆ˜λž€ ν•¨μˆ˜λ₯Ό λ‹€λ£¨λŠ” ν•¨μˆ˜

  1. ν•¨μˆ˜λ₯Ό 인자둜 λ°›μ•„ λŒ€μ‹  μ‹€ν–‰ν•˜λŠ” ν•¨μˆ˜
  2. ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜
  3. ν•¨μˆ˜λ₯Ό 인자둜 λ°›μ•„μ„œ λ˜λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜

사싀상 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ ˆλ°˜μ€ κ³ μ°¨ν•¨μˆ˜λ₯Ό 적극적으둜 ν™œμš©ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°μ΄λΌκ³ λ„ ν•  수 μžˆλ‹€.
유λͺ…ν•œ κ³ μ°¨ν•¨μˆ˜λ“€λ‘œλŠ” map filter reduce 등이닀.

🌱 μˆœμˆ˜ν•œ ν•¨μˆ˜

  • λ™μΌν•œ μž…λ ₯으둜 μ‹€ν–‰ν•˜λ©΄ 항상 λ™μΌν•œ κ²°κ³Όκ°€ λ‚˜μ˜¨λ‹€. (μ°Έμ‘° 투λͺ…μ„±)
  • λΆ€μˆ˜νš¨κ³Όκ°€ μ—†λ‹€.

 

🌱 μ°Έμ‘° 투λͺ…μ„±?

  ν”„λ‘œκ·Έλž¨μ˜ λ³€κ²½ 없이 μ–΄λ–€ ν‘œν˜„μ‹μ„ κ°’μœΌλ‘œ λŒ€μ²΄ν•  수 μžˆλ‹€λŠ” λœ»μ΄λ‹€.
  μˆœμˆ˜ν•œ ν•¨μˆ˜ f(x)κ°€ yλ₯Ό λ°˜ν™˜ν•œλ‹€λ©΄, f(x)λŠ” y둜 λŒ€μ²΄λ  수 μžˆλ‹€λŠ” λœ»μ΄λ‹€.
  같은 μž…λ ₯이 주어지면 항상 같은 κ²°κ³Όλ₯Ό 내놓기 λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž¨μ˜ κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•˜κ³  μΆ”λ‘ ν•  수 μžˆλ‹€. 이처럼 μ°Έμ‘° 투λͺ…성은 κ°œλ°œμžλ‚˜ μ»΄νŒŒμΌλŸ¬κ°€ 평가 κ²°κ³Όλ₯Ό μΆ”λ‘ ν•  수 있게 ν•œλ‹€. κ·Έλž˜μ„œ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κΈ° 전에 μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œλ₯Ό μ΅œμ ν™”ν•˜κ±°λ‚˜ μ½”λ“œκ°€ ν‰κ°€λ˜λŠ” μ‹œμ μ„ 늦좜 수 μžˆλ‹€. λ˜ν•œ ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ„ 항상 μ•Œ 수 있기 λ•Œλ¬Έμ— 더 μ•ˆμ „ν•  뿐만 μ•„λ‹ˆλΌ 더 μ‰½κ²Œ μ‘°ν•©ν•˜κ³  μœ μ§€ λ³΄μˆ˜ν•˜κ³  λ³€κ²½ν•˜κ³  ν…ŒμŠ€νŠΈ ν•  수 μžˆλ‹€.


 

μ•ˆμ „ν•œ ν”„λ‘œκ·Έλž˜λ°?

  이전 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μ •μ˜μ—μ„œ μ΄μ•ΌκΈ°ν–ˆλ˜ "μ•ˆμ „ν•œ ν”„λ‘œκ·Έλž¨"에 λŒ€ν•΄ 쑰금 더 μ΄μ•ΌκΈ°ν•˜κ³ μž ν•œλ‹€. 이에 λŒ€ν•΄μ„œλŠ” 코틀린을 λ‹€λ£¨λŠ” 기술 μ€‘μ—μ„œ λ‚΄κ°€ λ™μ˜ν•  수 μžˆλŠ” λΆ€λΆ„λ§Œ λ°œμ·Œν–ˆλ‹€.

🌱 μ•ˆμ „ν•œ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ 무엇인가?

  • ν”„λ‘œκ·Έλž¨μ—μ„œ 버그λ₯Ό μ™„μ „νžˆ μ—†μ• μ§€λŠ” λͺ»ν•œλ‹€.
  • 남은 버그가 ν”„λ‘œκ·Έλž¨μ—μ„œ λ³„λ„λ‘œ κ΅¬λΆ„λœ (μ•ˆμ „μ΄ 보μž₯λ˜μ§€ μ•ŠλŠ”) μ˜μ—­μ—μ„œλ§Œ μΌμ–΄λ‚œλ‹€κ³  보μž₯λœλ‹€λ©΄,
  • 버그λ₯Ό 더쉽고 효율적으둜 μž‘μ„ 수 μžˆλ‹€.
  • 버그 μ—†μŒμ΄ λͺ…ν™•νžˆ λ³΄μ΄λŠ” λ‹¨μˆœν•œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 것 그것이 μ•ˆμ „ν•œ ν”„λ‘œκ·Έλž˜λ°κ³Ό μ—°κ²°λœλ‹€.

🌱 ν”„λ‘œκ·Έλž¨μ„ 더 μ•ˆμ „ν•˜κ²Œ λ§Œλ“œλ €λ©΄?

  • λΆˆλ³€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄λΌ.
  • μˆœμˆ˜ν•˜μ§€ λͺ»ν•œ ν•¨μˆ˜μ˜ 선언을 μ΅œμ†Œν™”ν•˜κ³ , μˆœμˆ˜ν•˜μ§€ λͺ»ν•œ μž‘μ—…μ΄ ν•„μš”ν•œ λΆ€λΆ„λ§Œ λͺ¨λ“ˆν™”ν•˜μ—¬ λΆ„λ¦¬ν•˜λΌ.
    • λΆ€μˆ˜νš¨κ³Όλ₯Ό μΌλΆ€μ˜μ—­ μ•ˆμ—μ„œλ§Œ μΌμ–΄λ‚˜λ„λ‘ μ œν•œν•˜λΌ.
    • 이말은 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  λ•Œ 일뢀 ν•œμ •λœ μ˜μ—­μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ λΆ€λΆ„μ—μ„œ μ½˜μ†”λ“±μ˜ μž₯치λ₯Ό 좜λ ₯ν•˜κ±°λ‚˜ 파일, λ°μ΄ν„°λ² μ΄μŠ€, λ„€νŠΈμ›Œν¬λ“±μ˜ μž₯μΉ˜μ— 데이터λ₯Ό μ“°λŠ” λ“±μ˜ ν–‰μœ„λ₯Ό ν•˜μ§€λ§μ•„ν–”λ‹€
  • λΆ€μˆ˜νš¨κ³Όλ₯Ό 없애라.
    • ν”„λ‘œκ·Έλž¨μ΄ λ°˜ν™˜ν•˜λŠ” 결괏값에 덧뢙여 ν”„κ³ λ₯΄λž¨ λ°–μ—μ„œ κ΄€μ°°ν•  수 μžˆλŠ” μ–΄λ–€ λ³€ν™”λ₯Ό λœ»ν•œλ‹€.
    • 값을 λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œλ‚˜ ν•¨μˆ˜κ°€ μ™ΈλΆ€μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” 경우
    • λΆ€μˆ˜νš¨κ³Ό
  • μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ 마라.
    • μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” 것은 goto이 ν˜„λŒ€μ  λ³€ν˜•μ΄λ‹€.
    • μ΄λ‘œμΈν•΄ ν”„λ‘œκ·Έλž¨μ΄ μŠ€νŒŒκ²Œν‹° μ½”λ“œκ°€ 될 수 μžˆλ‹€.
    • μŠ€νŒŒκ²Œν‹° μ½”λ“œλΌλŠ” 말은 ν”„λ‘œκ·Έλž¨ 흐름이 μ–΄λ””μ„œ μ‹œμž‘ν•˜λŠ”μ§€ μ•Œ 수 μ—†μ§€λ§Œ, μ–΄λ””λ‘œ ν˜λŸ¬κ°€λŠ”μ§€ μ œλŒ€λ‘œ λ”°λΌκ°ˆ 수 μ—†λ‹€λŠ” λœ»μ΄λ‹€.
  • μ•ˆμ „ν•œ ν”„λ‘œκ·Έλž¨μ€ 인자λ₯Ό λ°›μ•„μ„œ λ°˜ν™˜ν•˜λŠ” μ—¬λŸ¬ ν•¨μˆ˜λ₯Ό ν•©μ„±ν•΄ λ§Œλ“€μ–΄μ§„λ‹€.
    • 그리고 그런 ν•¨μˆ˜ 합성이 ν”„λ‘œκ·Έλž¨μ„ μ΄λ£¨λŠ” μ „λΆ€λ‹€.

  ν•¨μˆ˜μ˜ ν•©μ„±λΆ€λΆ„κ³Ό μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ λ§λΌλŠ” 뢀뢄은 λ‚΄κ°€ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ 처음 μ ‘ν–ˆμ„ λ•ŒλŠ” 이해가 λ˜μ§€ μ•ŠλŠ” λΆ€λΆ„μ΄μ˜€λ‹€. ν•˜μ§€λ§Œ μ΄μ œλŠ” μ‘°κΈˆμ€ 곡감할 수 μžˆλŠ” 뢀뢄이닀.
  ν˜„μž¬ νšŒμ‚¬μ—μ„œ ν”„λ‘œλ•μ…˜ μ½”λ“œλ₯Ό μž‘μ„±ν• λ•ŒλŠ” μ˜ˆμ™Έλ₯Ό λƒ…λ‹€ λ˜μ§€λŠ” 것보닀 Result둜 κ°μ‹Έμ„œ μ‚¬μš©ν•˜κ³  μžˆλ‹€. Resultλ₯Ό μ‚¬μš©ν•˜κ²Œλ˜λ©΄, μ˜ˆμ™Έμ— λŒ€ν•œ 처리λ₯Ό 더 λΆ€λ“œλŸ½κ²Œ, μžμ—°μŠ€λŸ½κ²Œ ν•  수 μžˆλ‹€. μ‹€νŒ¨ν–ˆμ„ λ•Œ(μ—λŸ¬κ°€ λ‚¬μ„λ•Œ) μ–΄λ””λ‘œ μ–΄λ–»κ²Œ κ°€μ„œ μ–΄λ–€ 처리λ₯Ό ν•˜λŠ”μ§€ 잘 νŠΈλž˜ν‚Ήν•  수 μžˆλ‹€. κ·Έλƒ₯ μ½”λ“œλ₯Ό λΆ€λ“œλŸ½κ²Œ 읽으면 λ‚˜μ™€μžˆλ‹€.
  λ¬Όλ‘  λΉ„μŠ·ν•œ 처리λ₯Ό try~ catchκ°€ 해쀄 수 μžˆμ§€λ§Œ 이보닀 μ½”λ“œκ°€ κΉ”λ”ν•˜κ²Œ λ‚˜μ˜¬ 수 μžˆλ‹€. 이에 κ΄€λ ¨ν•œ 글은 ν† μŠ€μ˜ μ—λŸ¬ν•Έλ“€λ§μ„ λ‹€λ₯Έ ν΄λž˜μŠ€μ—κ²Œ μœ„μž„ν•˜κΈ° λΌλŠ” λΈ”λ‘œκ·Έ 글을 보면 잘 μ„€λͺ…λ˜μ–΄μžˆλ‹€. Result에 μ μ‘ν•˜κ³  λ‚˜λ‹ˆ, throw Errorλ₯Ό ν•˜λŠ”λ° μ–΄λ””μ„œ μž‘μ•„μ£ΌλŠ” 지가 λ‚΄ λˆˆμ— λ°”λ‘œ 보이지 μ•ŠμœΌλ©΄, 잘 μ²˜λ¦¬ν•˜λ‹€κ°€ κ°‘μžκΈ° μ“°λ ˆκΈ°ν†΅μ— λ˜μ Έλ²„λ¦¬λŠ” 기뢄이 λ“€μ—ˆλ‹€. λ¬Όλ‘  μ μ‘ν•˜κΈ° κΉŒμ§€λŠ” μ˜€λž˜κ±Έλ Έλ‹€. μ²˜μŒμ—λŠ” Reusltλ₯Ό μ¨μ„œ 였히렀 μ½”λ“œκ°€ 더 μ–΄λ €μ›Œμ§€λŠ” λŠλ‚Œμ„ μƒλ‹Ήνžˆ λ§Žμ΄λ°›μ•˜λ‹€. ν•˜μ§€λ§Œ Resultλ₯Ό 잘 μ‚¬μš©ν•  μˆ˜μžˆλŠ” ν™œμš©μ„±(좔상화 μˆ˜μ€€)이 높은 ν•¨μˆ˜λ“€μ΄ λ§Œλ“€μ–΄μ§€κ³ μ„œμ•Ό μ’€ μ œλŒ€λ‘œ μ‚¬μš©ν•  수 μžˆμ—ˆλ‹€.

try … catchλ₯Ό μ‚¬μš©ν–ˆμ„λ•Œ

return runCatching {
  loginApiClient.login(request)
}.onFailure { e -> 
  if (e.errorCode != "INVALID_PASSWORD") throw e
}.getOrNull()

runCatching을 μ‚¬μš©ν–ˆμ„ λ•Œ

try {
  loginApiClient.login(request) 	
} catch (e: LoginException) {
  if (e.errorCode == "INVALID_PASSWORD") {
    return null
  } else {
    throw e
  }
}

   ν•©μ„±ν•  수 μžˆλŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” 높은 μˆ˜μ€€μœΌλ‘œ 좔상화λ₯Ό ν•΄μ•Όν•œλ‹€. κ·ΈλŸ¬λ‹€λ³΄λ©΄ μ €μ ˆλ‘œ μž‘κ²Œ μͺΌκ°œμ§€κ²Œ λœλ‹€. λ‹Ήμž₯은 κ·Έ ν•¨μˆ˜μ—μ„œ ν•˜λŠ”μΌμ΄ λ”±νžˆ 없어보일 수 μžˆλ‹€. ν•˜μ§€λ§Œ 계속 μ‚¬μš©ν•˜λ‹€λ³΄λ©΄ μž¬μ‚¬μš©μ„±μ΄ 높은 ν•¨μˆ˜κ°€ λ˜μ–΄μžˆλ‹€λŠ” 것을 μ‘°κΈˆμ”© κΉ¨λ‹«κ²Œλœλ‹€. ν•˜λ‚˜μ˜ ν•¨μˆ˜λ₯Ό λ§Œλ“€ λ•Œ μ²˜μŒλΆ€ν„° μ§œλŠ” 것이 μ•„λ‹ˆκ³ , ν•¨μˆ˜μ— ν•¨μˆ˜λ₯Ό μ‘°λ¦½ν•΄μ„œ λ˜ν•˜λ‚˜μ˜ ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³ , κ·Έλ ‡κ²Œ ν•¨μˆ˜λ“€μ„ μ‘°λ¦½ν•˜λ‹€λ³΄λ©΄ ν•˜λ‚˜μ˜ κΈ°λŠ₯이 λ˜μ–΄μžˆλ‹€λŠ” 것을 μ•Œ 수 μžˆμ—ˆλ‹€. (λ¬Όλ‘  항상 그런 것은 μ•„λ‹ˆλ‹€.) 이런 μ‹μœΌλ‘œ ν•œλ²ˆ μ½”λ“œλ₯Ό 짜보면 μ•½κ°„ μ½”λ“œμ§œλŠ”κ²Œ 퍼즐 λ§žμΆ”λŠ” 것 마λƒ₯, 레고 μ‘°λ¦½ν•˜λŠ” 것 마λƒ₯ μž¬λ°Œλ‹€λŠ” λŠλ‚Œμ„ 받을 λ•Œκ°€ μžˆλ‹€.

 


마무리

  ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μž₯점에 λŒ€ν•΄μ„œ ν¬μŠ€νŒ…μ„ μΌμ§€λ§Œ, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°λ³΄λ‹€ μš°μ›”ν•˜λ‹€κ³  μƒκ°ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°κ³Ό 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μƒν˜Έ 배제적인 관계가 μ•„λ‹ˆλ‹€. κ²°κ΅­ 두가지 νŒ¨λŸ¬λ‹€μž„ λͺ¨λ‘ μœ μ—°ν•˜κ³  지속 κ°€λŠ₯ν•œ μ‹œμŠ€ν…œμ„ λ§Œλ“€μžλŠ” λͺ©μ μ΄λ©°, μ„œλ‘œλ₯Ό 보완해쀄 수 μžˆλŠ” 관계라고 μƒκ°ν•œλ‹€. λ‚˜μ—κ²Œ μžˆμ–΄μ„œ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μ‚¬μš©ν•΄λ³΄λ©΄ μ–»μ—ˆλ˜ κ°€μž₯ 큰 이득(μž₯점)은, ν•¨μˆ˜λ₯Ό 더 μͺΌκ°œκ³  μž¬μ‚¬μš©μ„± κ°€λŠ₯ν•˜κ²Œ λ§Œλ“€μ–΄λ³΄λ €κ³  λ…Έλ ₯ν–ˆμ—ˆλ˜ κ²½ν—˜κ³Ό 객체 지ν–₯ νŒ¨λŸ¬λ‹€μž„μ΄ μœ μΌν•˜λ©° κ°€μž₯ 쒋은 νŒ¨λŸ¬λ‹€μž„μ΄λΌλŠ” μƒκ°μ—μ„œ λ²—μ–΄λ‚  수 μžˆμ—ˆλ‹€λŠ” 것이라고 μƒκ°ν•œλ‹€.



Ref.
코틀린을 λ‹€λ£¨λŠ” 기술
ν•¨μˆ˜ν˜• μžλ°”μŠ€ν¬λ¦½νŠΈ

μ½”ν‹€λ¦°μœΌλ‘œ λ°°μš°λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°