λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

10-1 μ˜ˆμ™Έμ²˜λ¦¬(μ˜ˆμ™Έ 클래슀)

μ‹œνλ¦¬ν‹°μ§€ν˜Έ 2023. 10. 27.

μ˜ˆμ™Έ: μ‚¬μš©μžμ˜ 잘λͺ»λœ μ‘°μž‘ λ˜λŠ” 개발자의 잘λͺ»λœ μ½”λ”©μœΌλ‘œ 인해 λ°œμƒν•˜λŠ” ν”„λ‘œκ·Έλž¨ 였λ₯˜λ₯Ό λ§ν•œλ‹€. μ˜ˆμ™Έκ°€ λ°œμƒλ˜λ©΄ ν”„λ‘œκ·Έλž¨μ€ κ³§λ°”λ‘œ μ’…λ£Œλœλ‹€λŠ” μ μ—μ„œλŠ” μ—λŸ¬μ™€ λΉ„μŠ·ν•˜λ‹€. κ·ΈλŸ¬λ‚˜ μ˜ˆμ™ΈλŠ” μ˜ˆμ™Έ 처리λ₯Ό 톡해 ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•˜μ§€ μ•Šκ³ , 정상 μ‹€ν–‰ μƒνƒœκ°€ μœ μ§€λ˜λ„λ‘ ν•  수 μžˆλ‹€.

 

*μžλ°”λŠ” μ˜ˆμ™Έκ°€ λ°œμƒν•  κ°€λŠ₯성이 높은 μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•  λ•Œ μ˜ˆμ™Έ 처리 유무λ₯Ό ν™•μΈν•œλ‹€. λ§Œμ•½ μ˜ˆμ™Έ 처리 μ½”λ“œκ°€ μ—†λ‹€λ©΄ 컴파일이 λ˜μ§€ μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ λͺ¨λ“  μ˜ˆμ™Έμ— λŒ€ν•΄μ„œ μ˜ˆμ™Έ 처리 유무λ₯Ό ν™•μΈν•˜λŠ” 것은 μ•„λ‹ˆλ‹€.

 

μ˜ˆμ™Έμ™€ μ˜ˆμ™Έ 클래슀

 

일반 μ˜ˆμ™Έ(exception) : 컴파일 체크 μ˜ˆμ™ΈλΌκ³ λ„ ν•˜λŠ”λ°, μ‹€ν–‰ μ‹œ μ˜ˆμ™Έκ°€ 바생할 κ°€λŠ₯성이 λ†’κΈ° λ•Œλ¬Έμ— μžλ°” μ†ŒμŠ€λ₯Ό μ»΄νŒŒμΌν•˜λŠ” κ³Όμ •μ—μ„œ ν•΄λ‹Ή μ˜ˆμ™Έ 처리 μ½”λ“œκ°€ μžˆλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. λ§Œμ•½ μ˜ˆμ™Έ 처리 μ½”λ“œκ°€ μ—†λ‹€λ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

 

μ‹€ν–‰ μ˜ˆμ™Έ(runtime exception) :  μ»΄νŒŒμΌλŸ¬ λ„Œ 체크 μ˜ˆμ™ΈλΌκ³ λ„ ν•˜λŠ”λ°, μ‹€ν–‰ μ‹œ μ˜ˆμΈ‘ν•  수 없이 κ°‘μžκΈ° λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μ»΄νŒŒμΌν•˜λŠ” κ³Όμ •μ—μ„œ μ˜ˆμ™Έ 처리 μ½”λ“œκ°€ μžˆλŠ”μ§€ κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

*μžλ°”μ—μ„œλŠ” μ˜ˆμ™Έλ₯Ό 클래슀둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€. JVM은 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 도쀑에 μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ ν•΄λ‹Ή μ˜ˆμ™Έ 클래슀둜 객체λ₯Ό μƒμ„±ν•œλ‹€. 그리고 λ‚˜μ„œ μ˜ˆμ™Έ 처리 μ½”λ“œμ—μ„œ μ˜ˆμ™Έ 객체λ₯Ό μ΄μš©ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€. 

 

*λͺ¨λ“  μ˜ˆμ™Έ ν΄λž˜μŠ€λŠ” java.lang.Exception 클래슀λ₯Ό μƒμ†λ°›λŠ”λ‹€.

ex)

java.lang.Exception

일반 μ˜ˆμ™Έ

java.lang.ClassNotFoundException

java.lang.InterruptedException

...

μ‹€ν–‰ μ˜ˆμ™Έ

<λΆ€λͺ¨>

java.lang.RuntimeException 

<μžμ‹>

java.lang.NullPointerException

java.lang.ClassCastException

java.lang.NumberFormatException

 

μ‹€ν–‰ μ˜ˆμ™Έ

μ‹€ν–‰ μ˜ˆμ™ΈλŠ” μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ μ²΄ν¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ˜€λ‘œμ§€ 개발자의 κ²½ν—˜μ— μ˜ν•΄μ„œ μ˜ˆμ™Έ 처리 μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€. λ§Œμ•½ κ°œλ°œμžκ°€ μ‹€ν–‰ μ˜ˆμ™Έμ— λŒ€ν•΄ μ˜ˆμ™Έ 처리 μ½”λ“œλ₯Ό λ„£μ§€ μ•Šμ•˜μ„ 경우, ν•΄λ‹Ή μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ€ κ³§λ°”λ‘œ μ’…λ£Œλœλ‹€.

 

NullPointerException

객체 μ°Έμ‘°κ°€ μ—†λŠ” μƒνƒœ, 즉 null 값을 κ°–λŠ” μ°Έμ‘° λ³€μˆ˜λ‘œ 객체 μ ‘κ·Ό μ—°μ‚°μžμΈ λ„νŠΈ(.)λ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ λ°œμƒ

 

ArrayIndexOutOfBoundsException

λ°°μ—΄μ—μ„œ 인덱슀 λ²”μœ„λ₯Ό μ΄ˆκ³Όν•  경우 λ°œμƒν•˜λŠ” μ‹€ν–‰ μ˜ˆμ™Έμ΄λ‹€.

 

NumberFormatException

ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜λ‹€ 보면 λ¬Έμžμ—΄λ‘œ λ˜μ–΄ μžˆλŠ” 데이터λ₯Ό 숫자둜 λ³€κ²½ν•˜λŠ” κ²½μš°κ°€ 자주 λ°œμƒν•˜λŠ”λ°, 숫자둜 λ³€ν™˜λ  수 μ—†λŠ” λ¬Έμžκ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€λ©΄ λ°œμƒν•˜λŠ” μ‹€ν–‰ μ˜ˆμ™Έμ΄λ‹€.

 

ClassCastException

νƒ€μž… λ³€ν™˜casting은 μƒμœ„ ν΄λž˜μŠ€μ™€ ν•˜μœ„ 클래슀 간에 λ°œμƒν•˜κ³  κ΅¬ν˜„ ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ 간에도 λ°œμƒν•œλ‹€. μ΄λŸ¬ν•œ 관계가 μ•„λ‹ˆλΌλ©΄ ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•  수 μ—†κΈ° λ•Œλ¬Έμ— λ°œμƒν•˜λŠ” μ‹€ν–‰ μ˜ˆμ™Έμ΄λ‹€.

 

*κΈ°λ³Έ νƒ€μž…μ—μ„œ λ°œμƒν•˜λŠ” μΊμŠ€νŒ… 였λ₯˜λŠ” 컴파일 μ—λŸ¬μ΄κ³ 

ν΄λž˜μŠ€μ—μ„œ λ°œμƒν•˜λŠ” μΊμŠ€νŒ… 였λ₯˜λŠ” μ˜ˆμ™Έμ΄λ‹€. 

 

이 λ‘˜ 차이가 μžˆμœΌλ―€λ‘œ κ°œλ… ν•œ 바퀴 돌고 더 κΉŠμ€ κ°œλ…μ„ 이해할 λ•Œ μ •λ¦¬ν•΄λ³΄μž.

λŒ“κΈ€