2022. 5. 1. 13:25γJAVA/μλ°μ μ μ
https://hyejin.tistory.com/573
1οΈβ£ μμΈ λ°μμν€κΈ°
ν€μλ throw λ₯Ό μ¬μ©ν΄μ νλ‘κ·Έλλ¨Έκ° κ³ μλ‘ μμΈλ₯Ό λ°μμν¬ μ μλ€.
1. λ¨Όμ , μ°μ°μ new λ₯Ό μ΄μ©ν΄μ λ°μμν€λ €λ μμΈ ν΄λμ€μ κ°μ²΄λ₯Ό λ§λ λ€μ
Exception e = new Exception("μμΈ λ°μ");
2. ν€μλ throw λ₯Ό μ΄μ©ν΄μ μμΈλ₯Ό λ°μμν¨λ€.
throw e;
2οΈβ£ checked μμΈμ unchecked μμΈ
checked μμΈ : μ»΄νμΌλ¬κ° μμΈμ²λ¦¬ μ¬λΆλ₯Ό μ²΄ν¬ (μμΈμ²λ¦¬ νμ)
unchecked μμΈ : μ»΄νμΌλ¬κ° μμΈμ²λ¦¬ μ¬λΆλ₯Ό μ²΄ν¬ μν¨ (μμΈμ²λ¦¬ μ ν)
-> μ΄ μμ λ μμ±ν νμ μ»΄νμΌμ νλ©΄ μλ¬κ° λ°μνμ¬ μ»΄νμΌμ΄ μλ£λμ§ μλ κ²μ νμΈν μ μλ€.
μμΈμ²λ¦¬κ° λμ΄μΌ ν λΆλΆμ μμΈμ²λ¦¬κ° λμ΄ μμ§ μλ€λ κ²μ΄λ€.
-> μ΄ μμ λ μμΈ μ²λ¦¬λ₯Ό νμ§ μμμμλ λΆκ΅¬νκ³ μ΄μ μ μμ μλ λ€λ₯΄κ² μ±κ³΅μ μΌλ‘ μ»΄νμΌμ΄ λ κ²μ΄λ€.
νμ§λ§ μ€ννλ©΄ RuntimeExceptionμ΄ λ°μνμ¬ λΉμ μμ μΌλ‘ μ’ λ£λλ€.
3οΈβ£ λ©μλμ μμΈ μ μΈνκΈ°
μμΈλ₯Ό μ²λ¦¬νλ λ°©λ²μλ try~catchλ¬Έμ μ¬μ©νλ κ² μΈμ, μμΈλ₯Ό λ©μλμ μ μΈνλ λ°©λ²μ΄ μλ€.
λ©μλμ μμΈλ₯Ό μ μΈνλ €λ©΄, λ©μλμ μ μΈλΆμ ν€μλ throwsλ₯Ό μ¬μ©ν΄μ λ©μλ λ΄μμ λ°μν μ μλ μμΈλ₯Ό μ μ΄μ£ΌκΈ°λ§ νλ©΄ λλ€.
κ·Έλ¦¬κ³ μμΈκ° μ¬λ¬κ°μΌ κ²½μ°μλ μΌν, λ‘ κ΅¬λΆνλ€.
void method() throws Exception {
...
}
-> μ΄λ κ² μμΈλ₯Ό μ μΈνλ©΄, μ΄ μμΈ λΏλ§ μλλΌ κ·Έ μμνμ μ μμΈκΉμ§ λ°μν μ μλ€λ μ μ μ£Όμν΄μΌνλ€.
μμ μ€λ²λΌμ΄λ©μμ μ΄ν΄λ³Έ κ²κ³Ό κ°μ΄ μ€λ²λΌμ΄λ©ν λλ λ¨μν μ μΈλ μμΈμ κ°μ λΏλ§ μλλΌ μμκ΄κ³κΉμ§ κ³ λ €ν΄μΌνλ€.
λ©μλμ μ μΈλΆμ μμΈλ₯Ό μ μΈν¨μΌλ‘μ¨ λ©μλλ₯Ό μ¬μ©νλ €λ μ¬λμ΄ λ©μλμ μ μΈλΆλ₯Ό 보μμ λ, μ΄ λ©μλλ₯Ό μ¬μ©νκΈ° μν΄μλ μ΄λ ν μμΈλ€μ΄ μ²λ¦¬λμ΄μΌνλμ§ μ½κ² μ μ μλ€.
μμΈμ throws λ₯Ό λͺ μνλ κ²μ μμΈλ₯Ό μ²λ¦¬νλ κ²μ΄ μλλΌ μμ μ νΈμΆν λ©μλμκ² μμΈλ₯Ό μ λ¬νμ¬ μμΈμ²λ¦¬λ₯Ό νΌνλ κ²μ΄λ€.
μμΈλ₯Ό μ λ¬λ°μ λ©μλκ° λ λ€μ μμ μ νΈμΆν λ©μλμκ² μ λ¬ν μ μμΌλ©°, μ΄λ°μμΌλ‘ κ³μ νΈμΆμ€νμ μλ λ©μλλ€μ λ°λΌ μ λ¬λλ€κ° μ μΌ λ§μ§λ§μ μλ main λ©μλμμλ μμΈκ° μ²λ¦¬λμ§ μμΌλ©΄ main λ©μλλ§μ μ’ λ£λμ΄ νλ‘κ·Έλ¨μ΄ μ μ²΄κ° μ’ λ£λλ€.
μ΄μ²λΌ μμΈκ° λ°μν λ©μλμμ μμΈμ²λ¦¬λ₯Ό νμ§ μκ³ μμ μ νΈμΆν λ©μλμκ² μμΈλ₯Ό λκ²¨μ€ μ μμ§λ§, μ΄κ²μΌλ‘ μμΈκ° μ²λ¦¬λ κ²μ΄ μλκ³ μμΈλ₯Ό λ¨μν μ λ¬λ§ νλ κ²μ΄λ€.
κ²°κ΅ μ΄λ ν κ³³μμλ λ°λμ try~catch λ¬ΈμΌλ‘ μμΈμ²λ¦¬λ₯Ό ν΄μ£Όμ΄μΌνλ€.
-> μμΈκ° λ°μν λ©μλ λ΄μμ μ체μ μΌλ‘ μ²λ¦¬ν΄λ λλ κ²μ λ©μλ λ΄μμ try~catch λ¬Έμ μ¬μ©ν΄μ μ²λ¦¬νλ€.
4οΈβ£ finally λΈλ
finally λΈλμ μμΈμ λ°μμ¬λΆμ μκ΄μμ΄ μ€νλμ΄μΌ ν μ½λλ₯Ό ν¬ν¨μν¬ λͺ©μ μΌλ‘ μ¬μ©λλ€.
try-catchλ¬Έμ λμ μ νμ μΌλ‘ λ§λΆμ¬ μ¬μ©ν μ μμΌλ©°, try-catch-finally μ μμλλ‘ κ΅¬μ±λλ€.
try {
// μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ λ¬Έμ₯λ€μ λ£λλ€.
} catch(Exception e) {
// μμΈ μ²λ¦¬λ₯Ό μν λ¬Έμ₯μ λ£λλ€.
} finally {
// μμΈμ λ°μμ¬λΆμ κ΄κ³μμ΄ νμ μνλμ΄μΌ νλ λ¬Έμ₯λ€μ λ£λλ€.
}
μμΈκ° λ°μν κ²½μ°μλ try -> catch -> finally μμΌλ‘ μ€ν
μμΈκ° λ°μνμ§ μμ κ²½μ°μλ try -> finally μμΌλ‘ μ€ν
5οΈβ£ μ¬μ©μ μ μ μμΈλ₯Ό λ§λ€κΈ°
κΈ°μ‘΄μ μ μλ μμΈ ν΄λμ€ μΈμ νμμ λ°λΌ νλ‘κ·Έλλ¨Έκ° μλ‘μ΄ μμΈ ν΄λμ€λ₯Ό μ μνμ¬ μ¬μ©ν μ μλ€.
λ³΄ν΅ Exception ν΄λμ€ λλ RuntimeException ν΄λμ€λ‘λΆν° μμλ°μ ν΄λμ€λ₯Ό λ§λ€μ§λ§, νμμ λ°λΌμ μλ§μ μμΈ ν΄λμ€λ₯Ό μ νν μ μλ€.
κΈ°μ‘΄μ μμΈ ν΄λμ€λ μ£Όλ‘ Exception μ μμλ°μμ checked μμΈλ‘ μμ±νλ κ²½μ°κ° λ§μμ§λ§ μμ¦μ μμΈμ²λ¦¬λ₯Ό μ νμ μΌλ‘ ν μ μλλ‘ RuntimeExceptionμ μμλ°μμ μμ±νλ μͺ½μΌλ‘ λ°λμ΄κ°κ³ μλ€. checked μμΈλ λ°λμ μμΈμ²λ¦¬λ₯Ό ν΄μ£Όμ΄μΌνκΈ° λλ¬Έμ μμΈ μ²λ¦¬κ° λΆνμν κ²½μ°μλ try~catchλ¬Έμ λ£μ΄μ μ½λκ° λ³΅μ‘ν΄μ§κΈ° λλ¬Έμ΄λ€.
νλ‘κ·Έλλ° νκ²½μ΄ λ¬λΌμ§ λ§νΌ νμμ μΌλ‘ μ²λ¦¬ν΄μΌλ§ ν κ² κ°μλ μμΈλ€μ΄ μ νμ μΌλ‘ μ²λ¦¬ν΄λ λλ μν©μΌλ‘ λ°λλ κ²½μ°κ° μ’ μ’ λ°μνκ³ μλ€. κ·Έλμ νμμ λ°λΌ μμΈμ²λ¦¬μ μ¬λΆλ₯Ό μ νν μ μλ unchecked μμΈκ° κ°μ μ μΈ checked μμΈλ³΄λ€ λ νμλ°κ³ μλ€.
6οΈβ£ μμΈ λλμ§κΈ° exception re-throwing
ν λ©μλμμ λ°μν μ μλ μμΈκ° μ¬λΏμΈ κ²½μ°, λͺ κ°λ try-catchλ¬Έμ ν΅ν΄μ λ©μλ λ΄μμ μ체μ μΌλ‘ μ²λ¦¬νκ³ , κ·Έ λλ¨Έμ§λ μ μΈλΆμ μ§μ νμ¬ νΈμΆν λ©μλμμ μ²λ¦¬νλλ‘ ν¨μΌλ‘μ¨, μμͺ½μμ λλ μ μ²λ¦¬λλλ‘ ν μ μλ€.
κ·Έλ¦¬κ³ μ¬μ§μ΄λ λ¨ νλμ μμΈμ λν΄μλ μμΈκ° λ°μν λ©μλμ νΈμΆν λ©μλ, μμͺ½μμ μ²λ¦¬νλλ‘ ν μ μλ€.
μ΄κ²μ μμΈλ₯Ό μ²λ¦¬ν νμ μΈμμ μΌλ‘ λ€μ λ°μμν€λ λ°©λ²μ ν΅ν΄μ κ°λ₯νλ°, μ΄κ²μ μμΈ λμ§κΈ° λΌκ³ νλ€.
λ¨Όμ μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ λ©μλμμ try-catchλ¬Έμ μ¬μ©ν΄μ μμΈλ₯Ό μ²λ¦¬ν΄μ£Όκ³ , catchλ¬Έμμ νμν μμ μ νν νμ throw λ¬Έμ μ¬μ©ν΄μ μμΈλ₯Ό λ€μ λ°μμν¨λ€.
λ€μ λ°μν μμΈλ μ΄ λ©μλλ₯Ό νΈμΆν λ©μλμμ μ λ¬λκ³ νΈμΆν λ©μλμ try-catchλ¬Έμμ μμΈλ₯Ό λ λ€μ μ²λ¦¬νλ€.
μ΄ λ°©λ²μ νλμ μμΈμ λν΄μ μμΈκ° λ°μν λ©μλμ μ΄λ₯Ό νΈμΆν λ©μλ μμͺ½ λͺ¨λμμ μ²λ¦¬ν΄μ€μΌν μμ μ΄ μμ λ μ¬μ©λλ€.
μ΄ λ μ£Όμν΄μΌν μ μ μμΈκ° λ°μν λ©μλμμλ try-catchλ¬Έμ μ¬μ©ν΄μ μμΈμ²λ¦¬λ₯Ό ν΄μ€κ³Ό λμμ λ©μλμ μ μΈλΆμ λ°μν μμΈλ₯Ό throwsμ μ§μ ν΄μ€μΌ νλ€λ κ²μ΄λ€.
7οΈβ£ μ°κ²°λ μμΈ chained Exception
ν μμΈκ° λ€λ₯Έ μμΈλ₯Ό λ°μμν¬ μλ μλ€. μλ₯Ό λ€μ΄ μμΈ Aκ° μμΈ Bλ₯Ό λ°μμμΌ°λ€λ©΄ Aλ₯Ό Bμ μμΈ μμΈλΌκ³ νλ€.
Throwable initCause(Throwable cause) : μ§μ ν μμΈλ₯Ό μμΈ μμΈλ‘ λ±λ‘
Throwable getCause() : μμΈ μμΈλ₯Ό λ°ν
λ°μν μμΈλ₯Ό κ·Έλ₯ μ²λ¦¬νλ κ²μ΄ μλκ³ μμΈ μμΈλ‘ λ±λ‘ν΄μ λ€μ μμΈλ₯Ό λ°μμν€λ μ΄μ :
- μ¬λ¬κ°μ§ μμΈλ₯Ό νλμ ν° λΆλ₯μ μμΈλ‘ λ¬Άμ΄μ λ€λ£¨κΈ° μν΄μ
- checked μμΈλ₯Ό unchecked μμΈλ‘ λ°κΏ μ μλλ‘ νκΈ° μν΄μ
: checked μμΈκ° λ°μν΄λ μμΈλ₯Ό μ²λ¦¬ν μ μλ μν©μ΄ νλ λ λ°μνκΈ° μμνλ€. μ΄λ΄ λ ν μ μλ μΌμ΄λΌκ³€ κ·Έμ μλ―Έμλ try-catch λ¬Έμ μΆκ°νλ κ²λΏμΈλ°, chekced μμΈλ₯Ό unchekced μμΈλ‘ λ°κΎΈλ©΄ μμΈμ²λ¦¬κ° μ νμ μ΄ λλ―λ‘ μ΅μ§λ‘ μμΈμ²λ¦¬λ₯Ό νμ§ μμλ λλ€.
-> MemoryExceptionμ Exceptionμ μμμΌλ‘ λ°λμ μμΈλ₯Ό μ²λ¦¬ν΄μΌνλλ° μ΄ μμΈλ₯Ό RuntimeExceptionμΌλ‘ κ°μΈλ²λ ΈκΈ° λλ¬Έμuncheked μμΈκ° λμλ€.