Skip to content

Latest commit

Β 

History

History
88 lines (59 loc) Β· 5.2 KB

File metadata and controls

88 lines (59 loc) Β· 5.2 KB

item 71 : ν•„μš” μ—†λŠ” 검사 μ˜ˆμ™Έ μ‚¬μš©μ€ ν”Όν•˜λΌ

검사 μ˜ˆμ™Έμ˜ ν™œμš©κ³Ό λ¦¬νŒ©ν„°λ§ μ „λž΅

검사 μ˜ˆμ™Έλ₯Ό μ‹«μ–΄ν•˜λŠ” μžλ°” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ λ§Žμ§€λ§Œ, μ œλŒ€λ‘œ ν™œμš©ν•˜λ©΄ API와 ν”„λ‘œκ·Έλž¨μ˜ μ§ˆμ„ 높일 수 μžˆλ‹€. 검사 μ˜ˆμ™ΈλŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 문제λ₯Ό 직접 μ²˜λ¦¬ν•˜μ—¬ μ•ˆμ „μ„±μ„ 높인닀. ν•˜μ§€λ§Œ κ³Όλ„ν•œ μ‚¬μš©μ€ λΆˆνŽΈν•œ APIλ₯Ό λ§Œλ“€μ–΄λ‚΄λ―€λ‘œ, ν•„μš”μ— 따라 μ μ ˆν•˜κ²Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

1. 검사 μ˜ˆμ™Έμ™€ 비검사 μ˜ˆμ™Έμ˜ 차이

1) 검사 μ˜ˆμ™Έμ˜ μž₯단점

  • 검사 μ˜ˆμ™ΈλŠ” λ©”μ„œλ“œμ—μ„œ λ°œμƒν•  수 μžˆλŠ” μ˜ˆμ™Έλ₯Ό λͺ…μ‹œν•˜κ³ , ν˜ΈμΆœν•˜λŠ” μ½”λ“œμ—μ„œ 이λ₯Ό μ²˜λ¦¬ν•˜λ„λ‘ κ°•μ œν•œλ‹€. 이둜 인해 ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ •μ„±μ΄ λ†’μ•„μ§„λ‹€.
  • λ°˜λ©΄μ—, 검사 μ˜ˆμ™ΈλŠ” API μ‚¬μš©μžμ—κ²Œ 뢀담을 쀄 수 μžˆλ‹€. μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ catch 블둝을 μΆ”κ°€ν•΄μ•Ό ν•˜λ©°, 슀트림 API와 같은 κΈ°λŠ₯κ³Ό κ²°ν•©ν•˜κΈ° μ–΄λ €μš΄ κ²½μš°λ„ μžˆλ‹€.

검사 μ˜ˆμ™Έμ™€ 비검사 μ˜ˆμ™Έ 쀑 μ–΄λŠ 것을 μ„ νƒν• μ§€λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ κ·Έ μ˜ˆμ™Έλ₯Ό μ–΄λ–»κ²Œ λ‹€λ£°μ§€ 생각해보면 μ•Œ 수 μžˆλ‹€.

2) μ˜ˆμ™Έ 처리의 예

try {
    obj.action(args);
} catch (TheCheckedException e) {
    // μ˜ˆμ™Έ 상황에 λŒ€μ²˜ν•œλ‹€.
}

μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ 검사 μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•˜λ©°, μ΄λŠ” API μ‚¬μš©μžμ—κ²Œ 뢀담을 쀄 수 μžˆλ‹€.

2. 검사 μ˜ˆμ™Έ λŒ€μ‹  μ‚¬μš©ν•  수 μžˆλŠ” λŒ€μ•ˆ

1) μ˜΅μ…”λ„(Optional) μ‚¬μš©

  • 검사 μ˜ˆμ™Έλ₯Ό νšŒν”Όν•˜λŠ” κ°€μž₯ μ‰¬μš΄ 방법은 μ μ ˆν•œ κ²°κ³Ό νƒ€μž…μ„ 담은 μ˜΅μ…”λ„μ„ λ°˜ν™˜ν•˜λŠ” 것이닀.
  • 검사 μ˜ˆμ™Έ λŒ€μ‹  빈 μ˜΅μ…”λ„μ„ λ°˜ν™˜ν•˜λ©΄, μ˜ˆμ™Έ λ°œμƒ μ‹œ λΆ€κ°€ 정보λ₯Ό μ œκ³΅ν•˜κΈ° μ–΄λ ΅μ§€λ§Œ, μ˜ˆμ™Έ 처리의 뢀담을 쀄일 수 μžˆλ‹€.

단점: μ˜΅μ…”λ„μ€ μ˜ˆμ™Έ λ°œμƒ μ΄μœ μ— λŒ€ν•œ λΆ€κ°€ 정보λ₯Ό μ œκ³΅ν•  수 μ—†λ‹€. 반면 μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•˜λ©΄ ꡬ체적인 μ˜ˆμ™Έ νƒ€μž…κ³Ό κ·Έ νƒ€μž…μ΄ μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œλ₯Ό 톡해 λΆ€κ°€ 정보λ₯Ό 전달할 수 μžˆλ‹€.

μ˜΅μ…”λ„μ„ ꡳ이 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 이유

  • μ½”λ“œ 가독성 ν–₯상: μ˜΅μ…”λ„μ„ μ‚¬μš©ν•˜λ©΄ μ˜ˆμ™Έ 처리 μ½”λ“œμ˜ 쀑볡을 쀄이고 가독성을 높일 수 μžˆλ‹€. μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” λŒ€μ‹  빈 μ˜΅μ…”λ„μ„ λ°˜ν™˜ν•˜λ©΄ μ½”λ“œμ˜ 흐름이 깔끔해진닀.
  • λΆˆν•„μš”ν•œ μ˜ˆμ™Έ λ°©μ§€: μ˜΅μ…”λ„μ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨, μ˜ˆμ™Έμ μΈ 상황이 μ•„λ‹Œ κ²½μš°μ—λ„ λΆˆν•„μš”ν•˜κ²Œ μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” 것을 λ°©μ§€ν•  수 μžˆλ‹€. μ˜ˆμ™ΈλŠ” μ‹€μ œλ‘œ ν”„λ‘œκ·Έλž¨μ˜ 흐름을 λ°©ν•΄ν•˜λ―€λ‘œ, μ˜ˆμ™Έμ μΈ 상황이 μ•„λ‹Œ κ²½μš°μ—λŠ” μ˜΅μ…”λ„μ„ μ‚¬μš©ν•˜λŠ” 것이 더 μ μ ˆν•˜λ‹€.
  • 슀트림 APIμ™€μ˜ ν˜Έν™˜μ„±: μžλ°” 8λΆ€ν„°λŠ” 슀트림 APIκ°€ 널리 μ‚¬μš©λ˜λ©°, μ˜΅μ…”λ„μ„ μ‚¬μš©ν•˜λ©΄ μŠ€νŠΈλ¦Όμ—μ„œ μ²˜λ¦¬ν•˜κΈ°κ°€ 훨씬 μˆ˜μ›”ν•˜λ‹€. 검사 μ˜ˆμ™ΈλŠ” 슀트림과 잘 ν˜Έν™˜λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ˜΅μ…”λ„μ„ μ‚¬μš©ν•˜μ—¬ 더 직관적이고 효율적인 μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ‹€

2) μƒνƒœ 검사 λ©”μ„œλ“œλ‘œ λ¦¬νŒ©ν„°λ§

  • 검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” λ©”μ„œλ“œλ₯Ό 두 개둜 μͺΌκ°œμ–΄ 비검사 μ˜ˆμ™Έλ‘œ λ°”κΏ€ 수 μžˆλ‹€.
  • 첫 번째 λ©”μ„œλ“œλŠ” μƒνƒœ 검사 λ©”μ„œλ“œλ‘œ μ˜ˆμ™Έ λ°œμƒ κ°€λŠ₯ μ—¬λΆ€λ₯Ό boolean κ°’μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.
  • 두 번째 λ©”μ„œλ“œλŠ” μ‹€μ œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€.
  • μ΄λ ‡κ²Œ λ¦¬νŒ©ν„°λ§ν•˜λ©΄ APIκ°€ 더 μœ μ—°ν•΄μ§€μ§€λ§Œ, λͺ¨λ“  μƒν™©μ—μ„œ μ μš©ν•  수 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€. 특히 μ™ΈλΆ€ 동기화 없이 μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ ‘κ·Όν•  수 μžˆλŠ” κ²½μš°μ—λŠ” μ μ ˆν•˜μ§€ μ•Šλ‹€.

3) λ¦¬νŒ©ν„°λ§ μ˜ˆμ‹œ

λ¦¬νŒ©ν„°λ§ μ „ (검사 μ˜ˆμ™Έ μ‚¬μš©)

try {
    obj.action(args);
} catch (TheCheckedException e) {
    // μ˜ˆμ™Έ 상황에 λŒ€μ²˜ν•œλ‹€.
}

λ¦¬νŒ©ν„°λ§ ν›„ (μƒνƒœ 검사 λ©”μ„œλ“œμ™€ 비검사 μ˜ˆμ™Έ μ‚¬μš©)

if (obj.actionPermitted(args)) {
    obj.action(args);
} else {
    // μ˜ˆμ™Έ 상황에 λŒ€μ²˜ν•œλ‹€.
}

이 λ¦¬νŒ©ν„°λ§μ€ λͺ¨λ“  상황에 μ μš©ν•  수 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€. μ™ΈλΆ€ 동기화 없이 μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ ‘κ·Όν•˜κ±°λ‚˜ μ™ΈλΆ€ μš”μΈμ— μ˜ν•΄ μƒνƒœκ°€ λ³€ν•  수 μžˆλŠ” κ²½μš°μ—λŠ” 이 λ¦¬νŒ©ν„°λ§μ΄ μ μ ˆν•˜μ§€ μ•Šλ‹€.

3. 검사 μ˜ˆμ™Έμ˜ λ‚¨μš© λ°©μ§€

  • 검사 μ˜ˆμ™ΈλŠ” ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ „μ„±μ„ λ†’μ—¬μ£ΌλŠ” μž₯점이 μžˆμ§€λ§Œ, λ‚¨μš©ν•˜λ©΄ μ‚¬μš©ν•˜κΈ° λΆˆνŽΈν•œ APIλ₯Ό λ§Œλ“€ 수 μžˆλ‹€.
  • API ν˜ΈμΆœμžκ°€ μ˜ˆμ™Έ μƒν™©μ—μ„œ 볡ꡬ할 방법이 μ—†λ‹€λ©΄ 비검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€λŠ” 것이 μ’‹λ‹€.
  • 볡ꡬ가 κ°€λŠ₯ν•˜κ³  ν˜ΈμΆœμžκ°€ κ·Έ 처리λ₯Ό ν•΄μ£ΌκΈΈ λ°”λž€λ‹€λ©΄, μš°μ„  μ˜΅μ…”λ„μ„ λ°˜ν™˜ν•  수 μžˆλŠ”μ§€ κ³ λ―Όν•΄μ•Ό ν•œλ‹€.
  • μ˜΅μ…”λ„λ§ŒμœΌλ‘œ μΆ©λΆ„ν•œ 정보λ₯Ό μ œκ³΅ν•  수 없을 λ•Œλ§Œ 검사 μ˜ˆμ™Έλ₯Ό λ˜μ Έμ•Ό ν•œλ‹€.

πŸ’‘ 핡심 정리

  • 검사 μ˜ˆμ™ΈλŠ” κΌ­ ν•„μš”ν•œ κ³³μ—λ§Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ μ‚¬μš©μžκ°€ 뢀담을 느끼고 API μ‚¬μš©μ„±μ„ μ €ν•˜μ‹œν‚¬ 수 μžˆλ‹€.
  • API ν˜ΈμΆœμžκ°€ μ˜ˆμ™Έ μƒν™©μ—μ„œ 볡ꡬ할 방법이 μ—†λ‹€λ©΄ 비검사 μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • 볡ꡬ가 κ°€λŠ₯ν•˜λ‹€λ©΄ μ˜΅μ…”λ„μ„ λ¨Όμ € κ³ λ €ν•˜κ³ , μ˜΅μ…”λ„λ§ŒμœΌλ‘œλŠ” μΆ©λΆ„ν•˜μ§€ μ•Šμ„ λ•Œ 검사 μ˜ˆμ™Έλ₯Ό λ˜μ§€λ„λ‘ ν•œλ‹€.

μ˜¬λ°”λ₯Έ μ˜ˆμ™Έ μ²˜λ¦¬λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ „μ„±κ³Ό μœ μ—°μ„±μ„ λͺ¨λ‘ ν–₯μƒμ‹œν‚€λŠ” μ€‘μš”ν•œ μš”μ†Œμ΄λ‹€.