μ무리 μνκ³ μ’μ νλ‘κ·Έλλ¨ΈλΌλ λͺ¨λ κ²μ΄ μλ²½ν μλ μλ€.
μλ²½ν νλ‘κ·Έλ¨λ μ μ΄ν μ μλ λ¬Έμ κ° λ°μλκ³ , μ¬μ©μμ μ
λ ₯μ λ°λΌ λ¬Έμ κ° λ°μμ΄ λ μ μλ€.
[μ£Όλμ΄κ°λ°μ νΉμ κ°λ°μλ₯Ό κΏ κΎΈλ μ¬λ]
"ꡬν"μ μ΄μ μ λκ³ μ½λλ₯Ό μμ±νλ€. "λμκ°κΈ°λ§ νλ©΄ λμ§!"λΌλ μκ°μ κ°μ§κ³ ..
νμ§λ§ κ³μν΄μ μ΄λ° μκ°μ νλ€λ©΄ μ΄κ²μ λμ€μ μ΅κ΄μ΄ λκ³ μ’μ κ°λ°μλ‘ μ±μ₯ν μ μμ κ²μ΄λ€ !
μ€λ₯μ μμΈλ₯Ό κ΅¬λΆ μ§λ μΌλ°μ μΈ κΈ°μ€μ "ν볡 κ°λ₯ μ¬λΆ" μ΄λ€.
Error
)Exception
)μ»΄νμΌ μλ¬ (μμΈ)
.java νμΌμ .class νμΌλ‘ μ»΄νμΌν λ λ°μνλ μλ¬.
λλΆλΆ λ¬Έλ²μ΄ νλ €μ λ°μνκ³ ν΄κ²°ν μ μλ λμμ λ¬Έλ²μ λ§κ² λ€μ μμ±νλ κ²μ΄λ€.
λ°νμ μλ¬ (μμΈ)
μ»΄νμΌμ μ λμμ§λ§ νλ‘κ·Έλ¨ μ€ν λμ€ λ°μνλ μλ¬.
(μμ)
DBκ° λ€μ΄μλλ° νμ©ν μ μλ dataκ° λ€μ΄μμ λ
: μ΄λ―Έ μΈμ§νκ³ μλ νΉμ λ¬Έμ
: 미리 μ μ μλ, μμΈ‘ν μ μλ λ¬Έμ
π¨ μλ¬ (Error) β μμΈ (Exception) π¨
try - catch, finally
)μμΈ μ μ - μ΄λ€ μ’
λ₯μ μμΈλ€μ΄ νλ‘μ νΈ μμ μ‘΄μ¬νκ³ μ΄λ»κ² λΆλ₯ν΄μ μ μν κΉ?
μμΈ λ°μ μ리기 - μμΈκ° λ°μν μ μλ logic μ flag λ₯Ό λ¬μλλλ€.
μμΈ νΈλ€λ§ - μ΄λ€ μμΈ μ¬νλ§λ€ μ΄λ€ μ²λ¦¬λ₯Ό ν κΉ
μΌλ¨
try
(μΈλΌμ΄) ν΄ ~~~ μμΈκ° λ°μνλ©΄ κ·Έκ±Έ μ‘μ (catch
). κ·Έλ¦¬κ³ μ μμ μΌλ‘ μνλλ μμΈκ° λ°μνλ μνλμ΄μΌ νλ logic μ μνν΄ (finally
)
// μμΈ μ μ
class OurBadException extends Exception {
public OurBadException() {
super("μνν νλμ νλ©΄ μμΈμ²λ¦¬λ₯Ό κΌ ν΄μΌν©λλ€!");
}
}
------------------------------------------------------------------------
// μμΈ λ°μ μ리기
class OurClass {
private final Boolean just = true;
public void thisMethodIsDangerous() throws OurBadException { // #1
if (just) {
throw new OurBadException(); // #2
}
}
}
------------------------------------------------------------------------
// μμΈ νΈλ€λ§
public class StudyException {
public static void main(String[] args) {
OurClass ourClass = new OurClass();
try {
System.out.println("try λ¬Έ μ€ν #1");
ourClass.thisMethodIsDangerous();
System.out.println("try λ¬Έ μ€ν #2"); // #3
} catch (OurBadException e) { // #4
System.out.println(e.getMessage());
System.out.println("catch λ¬Έ μ€ν");
} finally {
System.out.println("μ°λ¦¬λ λ°©κΈ μμΈλ₯Ό handling νμ΅λλ€.
μ μμ²λ¦¬λλ , μμΈμ¬νμ΄ λ°μνλ μ¬κΈ°λ₯Ό κ±°μ³μ!!");
}
}
}
------------------------------------------------------------------------
/*
OUTPUT
try λ¬Έ μ€ν #1
μνν νλμ νλ©΄ μμΈμ²λ¦¬λ₯Ό κΌ ν΄μΌν©λλ€!
catch λ¬Έ μ€ν
μ°λ¦¬λ λ°©κΈ μμΈλ₯Ό handling νμ΅λλ€. μ μμ²λ¦¬λλ , μμΈμ¬νμ΄ λ°μνλ μ¬κΈ°λ₯Ό κ±°μ³μ!!
*/
#1
thisMethodIsDangerous()
λ€μ throws OurBadException
μ λΆμ¬ thisMethodIsDangerous()
κ° μνν λ©μλλΌλ κ²μ μλ €μ€λ€. (flag λ₯Ό λ¬μμ€λ€.)
#2
μλ‘μ΄ OurBadException
μ λ§λ€μ΄μ λμ§λ€.
β‘οΈ μ΄λ κ² ν μ μλ μ΄μ : μ΄λ―Έ thisMethodIsDangerous()
κ° μννλ€κ³ flagλ₯Ό λ¬μμ€μ
#3
ourClass.thisMethodIsDangerous();
μ λ§λλ©΄ λ μ΄μ try
λ₯Ό μ€ννμ§ μμ try λ¬Έ μ€ν #1
λ§ μΆλ ₯λλ€.
#4
μκ΄νΈ catch()
: λ¬΄μ¨ μ’
λ₯μ μμΈ μ¬νμ catch
ν κ²μΈμ§ λͺ
μ.
return
μ²λΌ throw
μλ ꡬ문μ μ€νλμ§ μκ³ λ©μλκ° μ’
λ£λλ€.π¨
ourClass.thisMethodIsDangerous();
λ₯Ό λ°λ‘ νΈμΆν μ μμ΄. μλνλ©΄ μ΄λ―Έ μννλ€κ³flag
λ₯Ό λ¬μλμ 무쑰건 μμΈμ²λ¦¬ (try-catch
) λ₯Ό ν΄μΌν΄. π¨
: μ°κ²°λ μμΈ
: μμΈ μμΈλ₯Ό μλ‘μ΄ μμΈμ λ±λ‘ν ν λ€μ μλ‘μ΄ μμΈλ₯Ό λ°μμν€λ κ²
initCause()
: μμΈμ°κ²°. μ§μ ν μμΈλ₯Ό μμΈ μμΈλ‘ λ±λ‘νλ λ©μλgetCause()
: μμΈ μμΈλ₯Ό λ°ννλ λ©μλA. μ¬λ¬κ°μ§ μμΈ μ¬νλ€μ΄ μ‘΄μ¬ν μ μλ€(μμΈμ΄ νλκ° μλλΌ μ¬λ¬ κ°μΌ μ μλ€). β‘οΈ νλλ‘ λ¬Άμ΄μ ν λ²μ ν λΆλ₯λ‘ μ²λ¦¬ν μ μλλ‘. μ½λλ₯Ό μ€μ΄κΈ° μν΄ Checked Exceptionμ Unchecked ExceptionμΌλ‘ ν¬μ₯(wrapping) νκΈ°λ νλ€.