[πŸ“šλ…ν›„κ° ] Clean Code_7. 였λ₯˜ 처리

호랭이·2022λ…„ 9μ›” 22일
0

πŸ“šλ…ν›„κ°

λͺ©λ‘ 보기
2/4

λ‚΄ 생각 λ¨Όμ €

이번 μž₯μ—μ„œλŠ” λ‚΄κ°€ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©° ν–ˆλ˜ 고민듀이 μ—¬λŸ¬λ²ˆ μ–ΈκΈ‰λ˜μ—ˆλ‹€.
λ‚˜λŠ” 였λ₯˜ μ²˜λ¦¬μ— λŒ€ν•΄ 이런 고민듀을 ν–ˆμ—ˆλ‹€.
1. 였λ₯˜λ₯Ό λ˜μ§€κΈ΄ ν–ˆλŠ”λ°, 처리λ₯Ό μ–΄λ””μ„œ ν•΄μ•Όν•˜μ§€?
2. nil을 λ°˜ν™˜ν•˜λ©΄ μ˜΅μ…”λ„λ°”μΈλ”©μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆμ§€λ§Œ...μ˜λ―Έμ—†λŠ” nil을 λ°˜ν™˜ν•˜λŠ” 것이 정말 λ°”λžŒμ§ν•œκ±ΈκΉŒ?
3. 였λ₯˜λ₯Ό λ˜μ§€λŠ” 것과 빈 값을 가진 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” 것 쀑에 무엇이 λ‚˜μ„κΉŒ?

일단 throw둜 였λ₯˜λ₯Ό λ˜μ§€κ³  λ‚˜λ©΄, μ±…μ—μ„œ λ§ν•œ 것과 같이 μƒμœ„ λ©”μ†Œλ“œλ“€λ„ 쀄쀄이 μ˜ˆμ™Έμ²˜λ¦¬κ°€ ν•„μš”ν–ˆμ—ˆλ‹€. μ½”λ“œκ°€ 지저뢄해보이기도 ν–ˆκ³  μ–΄λŠ μ§€μ μ—μ„œ μ²˜λ¦¬ν•˜λŠ” 것이 μ’‹μ„κΉŒμ— λŒ€ν•œ 고민을 ν–ˆλ‹€.
λ‚˜μ˜ κ²½μš°λŠ” μ—¬λŸ¬ λ‘œμ§λ“€μ΄ λ§Œλ‚˜λŠ” νŠΉμ • μƒμœ„ λ©”μ†Œλ“œμ—μ„œ 였λ₯˜ 처리λ₯Ό ν–ˆλŠ”λ°, μ•žμœΌλ‘œλŠ” 여기에 λ”ν•΄μ„œ 였λ₯˜λ“€μ΄ λ§Œλ‚˜λŠ” κ·Έ μ§€μ κΉŒμ§€λŠ” 였λ₯˜μ˜ ν΄λž˜μŠ€ν™”λ‘œ μΊ‘μŠν™”λ₯Ό 깨지 μ•Šλ„λ‘ ν™œμš©ν•΄λ΄μ•Όκ² λ‹¨ 생각을 ν–ˆλ‹€.

nil을 λ°˜ν™˜ν•˜λŠ” 것에 λŒ€ν•΄μ„œλŠ”, 코딩을 ν•˜λ‹€λ³΄λ©΄ μ’…μ’… nil을 λ°˜ν™˜ν•˜κ³  싢은 μš•κ΅¬κ°€ μƒκΈ°κ³ λŠ” ν•œλ‹€...
μ˜΅μ…”λ„ 바인딩을 ν•˜λ©΄μ„œ nil일 경우 μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•΄μ£Όλ©΄ 되긴 ν•˜μ§€λ§Œ, λ¬Έμ œλŠ” μ˜ˆμƒν•˜μ§€ λͺ»ν•œ μ—¬λŸ¬ λ¬Έμ œλ“€ λ•Œλ¬Έμ— nil이 λ°œμƒν•  경우 이λ₯Ό λ””λ²„κΉ…ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” κ²ƒμ΄μ—ˆλ‹€.
μ±…μ—μ„œ λ‚˜μ˜¨ 특수 사둀 κ°μ²΄λΌλŠ” 것을 μ‚¬μš©ν•˜λŠ” 것이 λ­”κ°€ ν•˜λ“œμ½”λ”©, κΌΌμˆ˜λΌλŠ” λŠλ‚Œμ΄ λ“€μ–΄μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ €κ³  ν–ˆμ—ˆλŠ”λ°, 이것도 ν•˜λ‚˜μ˜ 쒋은 방법이 λœλ‹€λŠ” 것을 μ•Œμ•˜λ‹€.
κ·Έλž˜λ„ 디버깅을 μœ„ν•΄μ„œλΌλ©΄ 였λ₯˜λ₯Ό μ •μ˜ν•˜κ³  λ˜μ§€λŠ” 것이 더 λ‚˜μ„ 것 κ°™κΈ΄ ν•œλ° 이 뢀뢄은 더 생각을 해보고싢닀.🧐


λ‚΄μš© 정리

였λ₯˜μ²˜λ¦¬λŠ” ν”„λ‘œκ·Έλž¨μ— λ°˜λ“œμ‹œ ν•„μš”ν•œ μš”μ†Œμ΄μ§€λ§Œ, 였λ₯˜ 처리 μ½”λ“œ λ•Œλ¬Έμ— 전체 μ½”λ“œμ˜ νŒŒμ•…μ΄ μ–΄λ €μ›Œμ§„λ‹€λ©΄ 클린 μ½”λ“œλΌκ³  λΆ€λ₯΄κΈ° μ–΄λ ΅λ‹€.

였λ₯˜λ³΄λ‹€λŠ” μ˜ˆμ™Έ μ‚¬μš©

λ‹¨μˆœν•˜κ²Œ 였λ₯˜λ§Œμ„ λ°˜ν™˜ν•˜κ²Œ 되면 ν•¨μˆ˜ 호좜 μ¦‰μ‹œ 였λ₯˜λ₯Ό ν™•μΈν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— 호좜 μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§„λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 둜직과 였λ₯˜ 처리 μ½”λ“œκ°€ λ’€μ„žμ΄μ§€ μ•Šλ„λ‘, 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” 편이 λ‚«λ‹€.

Try-Catch-Finally μ½”λ“œ 순으둜 μž‘μ„±

try의 블둝은 μ–΄λ–€ λ©΄μ—μ„œ νŠΈλžœμž­μ…˜κ³Ό λΉ„μŠ·ν•΄μ„œ, try λΈ”λ‘μ—μ„œ 무슨 일이 생기든 catch 블둝은 ν”„λ‘œκ·Έλž¨ μƒνƒœλ₯Ό 일관성 있게 μœ μ§€ν•΄μ•Ό ν•œλ‹€.
λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•  λ•Œμ—λ„ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν†΅ν•΄μ„œ λ¦¬νŒ©ν† λ§μ΄ νŽΈλ¦¬ν•΄μ§„λ‹€.

미확인 μ˜ˆμ™Έλ₯Ό μ‚¬μš©

ν™•μΈλœ(μ–΄λ–€ 였λ₯˜μΈμ§€ μ •μ˜λœ) 였λ₯˜λ₯Ό λ˜μ§„λ‹€λ©΄ μ—°κ΄€λœ μƒμœ„ λ©”μ„œλ“œλ“€μ€ 이에 λͺ¨λ‘ ν•΄λ‹Ή μ˜ˆμ™Έλ₯Ό μ •μ˜ν•΄μ•Όν•œλ‹€. ν•˜μœ„μ—μ„œ μ½”λ“œκ°€ λ³€κ²½λœλ‹€λ©΄ μƒμœ„λ„ λͺ¨λ‘ λ³€κ²½ν•΄μ•Όν•˜λŠ” 것이닀. throws κ²½λ‘œμ— μœ„μΉ˜ν•œ λͺ¨λ“  ν•¨μˆ˜κ°€ μ΅œν•˜μœ„ ν•¨μˆ˜μ—μ„œ λ˜μ§€λŠ” μ˜ˆμ™Έλ₯Ό μ•Œμ•„μ•Όν•˜λ―€λ‘œ μΊ‘μŠν™”κ°€ 깨진닀. 였λ₯˜λ₯Ό λ°œμƒ μ™ΈλΆ€μ—μ„œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•˜λŠ” 것인데, 이처럼 ν™•μΈλœ μ˜ˆμ™Έκ°€ μΊ‘μŠν™”λ₯Ό κΉ¨λ²„λ¦¬λŠ” ν˜„μƒμ€ λ°”λžŒμ§ν•˜μ§€ μ•Šλ‹€.

μ˜ˆμ™Έμ— 의미λ₯Ό μ§€κ³΅ν•˜λΌ

였λ₯˜ 메세지에 정보λ₯Ό λ‹΄μ•„ μ˜ˆμ™Έμ™€ ν•¨κ»˜ λ˜μ§„λ‹€. μ „ν›„ 상황을 μΆ©λΆ„νžˆ 덧뢙인닀면 였λ₯˜κ°€ λ°œμƒν•œ 원인과 μœ„μΉ˜λ₯Ό μ°ΎκΈ°κ°€ μ‰¬μ›Œμ§„λ‹€.

호좜자λ₯Ό κ³ λ €ν•΄ μ˜ˆμ™Έ 클래슀λ₯Ό μ •μ˜ν•˜λΌ

였λ₯˜λ₯Ό λΆ„λ₯˜ν•  λ•Œ, ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ κ°€μž₯ μ€‘μš”ν•œ 것은 였λ₯˜λ₯Ό μž‘μ•„λ‚΄λŠ” λ°©λ²•μ΄λΌλŠ” 것을 μ•Œμ•„μ•Όν•œλ‹€. 였λ₯˜μ™€ μ˜ˆμ™Έμ˜ μœ ν˜•κ³Ό λ¬΄κ΄€ν•˜κ²Œ λŒ€μ‘ 방식이 거의 λ™μΌν•˜λ‹€λ©΄ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ κ³ μΉ  수 μžˆλ‹€. 이런 경우라면 클래슀λ₯Ό μ •μ˜ν•˜μ—¬ 였λ₯˜λ₯Ό ν•˜λ‚˜λ‘œ κ°μ‹ΈλŠ” λ°©μ‹μœΌλ‘œ μˆ˜μ •ν•œλ‹€.

정상 흐름을 μ •μ˜ν•˜λΌ

μ•žμ„  λ‚΄μš©λ“€μ„ λ”°λ₯Έλ‹€λ©΄ μ½”λ“œκ°€ κ°„κ²°ν•˜κ³  κΉ¨λ—ν•΄λ³΄μ΄μ§€λ§Œ 였λ₯˜ κ°μ§€μ˜ μš°μ„ μˆœμœ„κ°€ λ°€λ €λ‚  수 μžˆλ‹€. ν”„λ‘œκ·Έλž¨μ„ μ€‘λ‹¨ν•˜κ³  였λ₯˜λ₯Ό λ˜μ§€λŠ” 것이 λ•Œλ‘œλŠ” μ ν•©ν•˜μ§€ μ•Šμ„ λ•Œλ„ μžˆλ‹€. 예λ₯Ό λ“€μ–΄ 였λ₯˜ 상황 λŒ€μ‹  빈 값을 λ°˜ν™˜ν•˜λ„λ‘ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€λ©΄ μ˜ˆμ™Έμ μΈ 상황을 μ²˜λ¦¬ν•  ν•„μš”κ°€ 없어진닀. 이λ₯Ό 특수 사둀 νŒ¨ν„΄μ΄λΌ λΆ€λ₯Έλ‹€.

null을 λ°˜ν™˜ν•˜μ§€ 마라

null을 λ°˜ν™˜ν•˜λŠ” 것은 ν˜ΈμΆœμžμ—κ²Œ 문제λ₯Ό λ– λ„˜κΈ΄λ‹€. ν•œ κ³³μ—μ„œλΌλ„ null 확인이 빠진닀면 앱이 ν†΅μ œκ°€ λΆˆκ°€λŠ₯ν•΄μ§ˆ μˆ˜λ„ μžˆλ‹€. ν•˜μ§€λ§Œ μ‹€μ œλ‘œλŠ” null 확인이 λ„ˆλ¬΄ λ§Žμ•„μ„œ λ¬Έμ œμ΄λ‹€. null을 λ°˜ν™˜ν•˜λŠ” λŒ€μ‹  μ˜ˆμ™Έλ₯Ό λ˜μ§€κ±°λ‚˜ 특수 사둀 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€. μ™ΈλΆ€ APIκ°€ null을 λ°˜ν™˜ν•œλ‹€λ©΄ λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ—¬ μ˜ˆμ™Έλ₯Ό λ˜μ§€κ±°λ‚˜ 특수 사둀 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.

κ²°λ‘ 

κΉ¨λ—ν•œ μ½”λ“œλŠ” κ°€λ…μ„±λΏλ§Œ μ•„λ‹ˆλΌ μ•ˆμ •μ„±λ„ λ†’μ•„μ•Όν•œλ‹€. 였λ₯˜ 처리λ₯Ό ν”„λ‘œκ·Έλž¨μ˜ 둜직과 λΆ„λ¦¬ν•˜λ©΄ 독립적인 좔둠이 κ°€λŠ₯해지며 μ½”λ“œ μœ μ§€λ³΄μˆ˜μ„±λ„ 높아진닀.

profile
삐약

0개의 λŒ“κΈ€