Item 72. Standard Exceptions

ν‘œμ€€ μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•˜λΌ

μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜λŠ” 것은 쒋은 일이닀. λ§ˆμ°¬κ°€μ§€λ‘œ μ˜ˆμ™Έλ„ μž¬μ‚¬μš©ν•˜λŠ” 것이 μ’‹μœΌλ©°, μžλ°” λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λŒ€λΆ€λΆ„ APIμ—μ„œ 쓰기에 μΆ©λΆ„ν•œ 수의 μ˜ˆμ™Έλ₯Ό μ œκ³΅ν•œλ‹€. ν‘œμ€€ μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•˜λ©΄ μ•„λž˜μ™€ 같은 μž₯점을 얻을 수 μžˆλ‹€.

  • λ‹€λ₯Έ μ‚¬λžŒμ΄ 읡히고 μ‚¬μš©ν•˜κΈ° 쉬움

  • μ˜ˆμ™Έ ν΄λž˜μŠ€κ°€ μ μ„μˆ˜λ‘ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰λ„ 쀄고, 클래슀λ₯Ό μ μž¬ν•˜λŠ” μ‹œκ°„λ„ 적게 κ±Έλ¦Ό

ν‘œμ€€ μ˜ˆμ™Έ 쀑 κ°€μž₯ 많이 μž¬μ‚¬μš©λ˜λŠ” μ˜ˆμ™ΈλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • IllegalArgumentException: 인수둜 λΆ€μ μ ˆν•œ 값을 λ„˜κΈΈ λ•Œ λ°œμƒ(반볡 νšŸμˆ˜μ— 음수λ₯Ό λ„˜κΈ°λŠ” 경우 λ“±)

    • λΆ€μ μ ˆν•œ 값을 λ„˜κΈ°λŠ” 상황 쀑 μ•„λž˜ 두 가지 κ²½μš°λŠ” μ•„λž˜μ˜ μ˜ˆμ™Έλ₯Ό μ‚¬μš©ν•œλ‹€.

    • NullPointerException: null을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œμ— null을 λ„˜κΈΈ λ•Œ λ°œμƒ

    • IndexOutOfBoundsException: 인덱슀 λ²”μœ„λ₯Ό λ„˜μ–΄μ„€ λ•Œ λ°œμƒ

  • IllegalStateException: 객체가 λ©”μ„œλ“œλ₯Ό μˆ˜ν–‰ν•˜κΈ°μ— μ μ ˆν•˜μ§€ μ•Šμ€ μƒνƒœμΌ λ•Œ λ°œμƒ(μ΄ˆκΈ°ν™” λ˜μ§€ μ•Šμ€ 객체λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 λ“±)

  • ConcurrentModificationException: 단일 μŠ€λ ˆλ“œμ—μ„œ μ‚¬μš©ν•˜λ €κ³  μ„€κ³„λœ 객체λ₯Ό μ—¬λŸ¬ μŠ€λ ˆλ“œμ—μ„œ μ‚¬μš©ν•˜λ €κ³  ν•  λ•Œ λ°œμƒ

  • UnsupportedOperationException: μš”μ²­ν•œ λ™μž‘μ„ λŒ€μƒ 객체가 μ§€μ›ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒ(μ›μ†Œλ₯Ό 넣을 수만 μžˆλŠ” List에 μ›μ†Œλ₯Ό μ‚­μ œν•˜λ €κ³  ν•  λ•Œ λ“±)

이 외에도 λ‹€λ₯Έ ν‘œμ€€ μ˜ˆμ™Έλ“€μ΄ μ‘΄μž¬ν•˜λ‹ˆ, λ§Œμ•½ ν˜„μž¬ 상황에 λΆ€ν•©ν•˜λŠ” ν‘œμ€€ μ˜ˆμ™Έκ°€ μžˆλ‹€λ©΄ 그것을 μ‚¬μš©ν•˜μž. κΈ°μ‘΄ μ˜ˆμ™Έμ—μ„œ 더 λ§Žμ€ 정보λ₯Ό μ œκ³΅ν•˜κ³  μ‹Άλ‹€λ©΄, μ˜ˆμ™Έλ₯Ό ν™•μž₯ν•΄μ„œ μƒˆλ‘œμš΄ μ˜ˆμ™Έλ₯Ό λ§Œλ“œλŠ” 방법도 μžˆλ‹€.

μ μ ˆν•œ μ˜ˆμ™Έ 선택 κ°€μ΄λ“œ

λ‘œμ§μ„ μž‘μ„±ν•˜λ‹€λ³΄λ©΄ μž¬μ‚¬μš©ν•  μ˜ˆμ™Έ 선택이 μ–΄λ €μšΈ 수 μžˆλ‹€. 상황은 μ•„λž˜λΌκ³  κ°€μ •ν•˜μž.

  • μΉ΄λ“œ 덱을 ν‘œν˜„ν•˜λŠ” 객체 쑴재

  • 인수둜 건넨 수만큼 μΉ΄λ“œλ₯Ό 뽑아 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ 쑴재

  • λ§Œμ•½ 덱에 남은 μΉ΄λ“œκ°€ 인수둜 건넨 μˆ˜λ³΄λ‹€ 적닀면 μ˜ˆμ™Έλ₯Ό 던짐

이 상황에선 인수의 값이 큰 κ²½μš°μ—” IllegalArgumentException을, 남은 μΉ΄λ“œ μˆ˜κ°€ 적닀고 보면 IllegalStateException을 λ˜μ§€λŠ” 것, 두 가지 방법이 μžˆλ‹€. 이런 상황에선 일반적인 κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • IllegalStateException: 인수 값이 λ¬΄μ—‡μ΄μ—ˆλ“  μ‹€νŒ¨ν•˜λŠ” μƒνƒœμΈ 경우

  • IllegalArgumentException: 그렇지 μ•Šμ€ 경우

Last updated

Was this helpful?