Search
Duplicate
πŸ˜€

08. μ˜ˆμ™Έμ²˜λ¦¬

νƒœκ·Έ
μ—λŸ¬
μ˜ˆμ™Έμ²˜λ¦¬

μ—λŸ¬μ™€ μ˜ˆμ™Έ

심각도에 λ”°λ₯Έ λΆ„λ₯˜
β€’
Error
β—¦
λ©”λͺ¨λ¦¬ λΆ€μ‘±, stack overflow와 같이 λ°œμƒν•˜λ©΄ 볡ꡬ할 수 μ—†λŠ” 상황
β—¦
ν”„λ‘œκ·Έλž¨μ˜ 비정상적 μ’…λ£Œλ₯Ό 막을 수 μ—†μŒ β†’ 디버깅 ν•„μš”
β€’
Exception
β—¦
μ½μœΌλ €λŠ” 파일이 μ—†κ±°λ‚˜ λ„€νŠΈμ›Œν¬ μ—°κ²°μ˜ λ‹¨μ ˆ λ“± 수슡이 κ°€λŠ₯ν•œ 상황
β—¦
ν”„λ‘œκ·Έλž¨ μ½”λ“œμ— μ˜ν•΄ 수슡될 수 μžˆλŠ” 상황
β€’
μ˜ˆμ™Έ 처리
β—¦
μ˜ˆμ™Έ λ°œμƒ μ‹œ ν”„λ‘œκ·Έλž¨μ˜ 비정상 μ’…λ£Œλ₯Ό 막고 정상적인 μ‹€ν–‰ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것

μ˜ˆμ™Έ 클래슀의 계측

checked exception
β€’
μ˜ˆμ™Έμ— λŒ€ν•œ λŒ€μ²˜ μ½”λ“œκ°€ μ—†μœΌλ©΄ 컴파일이 μ§„ν–‰λ˜μ§€ μ•ŠμŒ
β€’
ν•„μˆ˜μ μœΌλ‘œ μ˜ˆμ™Έμ²˜λ¦¬ μˆ˜ν–‰
unchecked exception
β€’
μ˜ˆμ™Έμ— λŒ€ν•œ λŒ€μ²˜ μ½”λ“œκ°€ 없더라도 μ»΄νŒŒμΌμ€ 진행
β€’
κ°œλ°œμžκ°€ μ˜ˆμ™Έ λ°œμƒ κ°€λŠ₯ν•œ 상황을 κ³ λ €ν•΄μ•Ό 함

try ~ catch ꡬ문

try ~ catch λ¬Έμ—μ„œμ˜ 흐름
β€’
try λΈ”λ‘μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄
β—¦
JVM이 ν•΄λ‹Ή Exception 클래슀의 객체λ₯Ό 생성 ν›„ 던짐(throw)
(throw new XXException()
β—¦
λ˜μ Έμ§„ exception을 μ²˜λ¦¬ν•  수 μžˆλŠ” catch λΈ”λ‘μ—μ„œ 받은 ν›„ 처리 μ λ‹Ήν•œ catch 블둝을 λ§Œλ‚˜μ§€ λͺ»ν•˜λ©΄ μ˜ˆμ™Έμ²˜λ¦¬λŠ” μ‹€νŒ¨
β€’
tryλΈ”λ‘μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜μ§€ μ•Šμ€ 경우
β—¦
catch 문을 κ±°μΉ˜μ§€ μ•Šκ³  try-catch λΈ”λ‘μ˜ λ‹€μŒ 흐름 λ¬Έμž₯을 μ‹€ν–‰

닀쀑 exception handling

β€’
try λΈ”λ‘μ—μ„œ μ—¬λŸ¬ μ’…λ₯˜μ˜ μ˜ˆμ™Έκ°€ λ°œμƒν•  경우
β—¦
ν•˜λ‚˜μ˜ try 블둝에 μ—¬λŸ¬ 개의 catch 블둝 μΆ”κ°€ κ°€λŠ₯
β€’
닀쀑 catch λ¬Έμž₯ μž‘μ„± μ‹œ μˆœμ„œ μœ μ˜μ‚¬ν•­ - JVM이 λ˜μ§„ μ˜ˆμ™ΈλŠ” catch λ¬Έμž₯을 찾을 λ•Œ λ‹€ν˜•μ„±μ΄ 적용됨 - μƒμœ„ νƒ€μž…μ˜ μ˜ˆμ™Έκ°€ λ¨Όμ € μ„ μ–Έλ˜λŠ” 경우 뒀에 λ“±μž₯ν•˜λŠ” catch 블둝은 λ™μž‘ν•  κΈ°νšŒκ°€ X - 상속 관계가 μ—†λŠ” κ²½μš°λŠ” 무관, γ„΄ 상속 κ΄€κ³„μ—μ„œλŠ” μž‘μ€ λ²”μœ„(μžμ‹)μ—μ„œ 큰 λ²”μœ„(쑰상) μˆœμ„œλ‘œ μ •μ˜

try ~ catch ~ finally

finally
β€’
μ˜ˆμ™Έ λ°œμƒ 여뢀와 상관 없이 μ–Έμ œλ‚˜ μ‹€ν–‰
β€’
쀑간에 return을 λ§Œλ‚˜λŠ” κ²½μš°λ„ finally 블둝을 λ¨Όμ € μˆ˜ν–‰ ν›„ 리턴 μ‹€ν–‰
β€’
μžμ›μ •λ¦¬μ˜ λͺ©μ μœΌλ‘œ 자주 μ‚¬μš©λ¨ (μžμ› λ°˜λ‚©)

try- with- resources

JDK 1.7 μ΄μƒμ—μ„œμ˜ λ¦¬μ†ŒμŠ€μ˜ μžλ™ close 처리
β€’
try 선언문에 μ„ μ–Έλœ 객체듀에 λŒ€ν•΄ μžλ™μœΌλ‘œ closeλ₯Ό ν˜ΈμΆœν•΄μ€€λ‹€. (finally μ—­ν• )
β—¦
단, ν•΄λ‹Ή 객체듀이 AutoCloseable interfaceλ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. (각쒅 I/O 슀트림, socket, connection,,,)
β—¦
ν•΄λ‹Ή κ°μ²΄λŠ” tryλΈ”λ‘μ—μ„œ λ‹€μ‹œ 할당될 수 μ—†λ‹€.

μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ

β€’
API에 μ •μ˜λœ exception 이외에 ν•„μš”μ— 따라 μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έ 클래슀 μž‘μ„±
β€’
λŒ€λΆ€λΆ„ Exception λ˜λŠ” Runtime Exception 클래슀λ₯Ό 상속받아 μž‘μ„±
β—¦
checked exception ν™œμš© : λͺ…μ‹œμ  μ˜ˆμ™Έμ²˜λ¦¬ or throws ν•„μš” γ„΄ μ½”λ“œλŠ” λ³΅μž‘ν•΄μ§€μ§€λ§Œ 처리 λˆ„λ½ λ“± 였λ₯˜ λ°œμƒ κ°€λŠ₯성은 쀄어듬
β—¦
runtime exception ν™œμš© : λ¬΅μ‹œμ  μ˜ˆμ™Έμ²˜λ¦¬ κ°€λŠ₯ γ„΄ μ½”λ“œκ°€ κ°„κ²°ν•΄μ§€μ§€λ§Œ μ˜ˆμ™Έ 처리 λˆ„λ½ κ°€λŠ₯μ„± λ°œμƒ
β€’
μ‚¬μš©μž μ •μ˜ μ˜ˆμ™Έμ²˜λ¦¬μ˜ μž₯점 - 객체의 ν™œμš© : ν•„μš”ν•œ 좔가정보, κΈ°λŠ₯ ν™œμš© κ°€λŠ₯ - μ½”λ“œμ˜ μž¬μ‚¬μš© : λ™μΌν•œ μƒν™©μ—μ„œ μ˜ˆμ™Έ 객체 μž¬μ‚¬μš© κ°€λŠ₯ - throws λ©”μ»€λ‹ˆμ¦˜μ˜ 이용 - 쀑간 λ‹¨κ³„μ—μ„œ return λΆˆν•„μš”