νλ‘κ·Έλ¨μ μμ±ν λ λ¬Έλ²μ λ§μ§ μκ² μμ±νκ³ μ»΄νμΌνκ±°λ λλ μ΄λ€ μμΈμ μν΄μ μμμΉ λͺ»ν μλ¬κ° λ°μν μ μμ΅λλ€. μ΄λ¬ν μλνμ§ μμ μν©μ λν΄μ μ²λ¦¬νκΈ° μν΄ μμΈ(Exception)λ₯Ό μ 곡ν©λλ€.
μμΈ(exception)λ μλ¬κ° λ°μνμ¬ μ€νμ€μΈ νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’
λ£λμ§λ§ λ€μκ³Ό κ°μ μμΈ‘ κ°λ₯νμ¬ μ²λ¦¬ν μ μλλ‘ μ€κ³ν μ μλ κ²μ λ§νλ©°, μλ°μμλ try-catchλ¬Έμ ν΅ν΄μ μμΈλ₯Ό μ²λ¦¬ν μ μλ λ¬Έλ²μ΄ μ‘΄μ¬ν©λλ€.
- μ¬μ©μμ μ λ ₯μ€λ₯
- λ€νΈμν¬ μ°κ²° λκΉ
- λ©λͺ¨λ¦¬ λΆμ‘±
μλ¬λ λ°μ μμ μ λ°λΌμ ν¬κ² 3κ°μ§λ‘ λλ μ μμ΅λλ€.
- μ»΄νμΌ μλ¬(Compile-time Error)
- λ°νμ μλ¬(Runtime Error)
- λ Όλ¦¬μ μλ¬(Logical Error)
μ»΄νμΌ μλ¬λ λ§ κ·Έλλ‘ μμ€μ½λ(*.java)λ₯Ό μ»΄νμΌ ν λ λ°μνλ μλ¬λ‘ μ€ν νΉμ λ¬Έλ²μ μΌλ‘ μλͺ»λ(μΈλ―Έμ½λ‘ μλ΅, μλͺ»λ μλ£ν λ±) ꡬ문λ€, λ³΄ν΅ λ¬Έλ²μ μΈ λ¬Έμ λ₯Ό κ°λ¦¬ν€λ μμ μλ¬κ° μμ λ λ°μν©λλ€. μ»΄νμΌ μλ¬λ₯Ό μ νμ€ μλ¬(Syntax Error)λΌκ³ λΆλ₯΄κΈ°λ ν©λλ€.
μ»΄νμΌ μλ¬λ μλ° μ»΄νμΌλ¬κ° μ€λ₯λ₯Ό κ°μ§νμ¬ μ¬μ©μμκ² μλ €μ€λλ€. λ³΄ν΅ IDEμμ μ λ ₯νλ€κ° ꡬ문μλ¬κ° λ°κ²¬λλ©΄ μ¦μ λΉ¨κ°μ€λ‘ κ·Έμ΄ μ¬μ©μμκ² λ―Έλ¦¬ μλ €μ£ΌκΈ° λλ¬Έμ λ°κ²¬νκΈ°λ μ½κ³ μ¬μ μ λ°©μ§ ν μ μμ΅λλ€.
μ΄ κ³Όμ μ κ±°μ³μ μ»΄νμΌ μ μ»΄νμΌ μλ¬κ° λ°μνμ§ μκ³ μ±κ³΅μ μΌλ‘ μνμ λ§μΉλ©΄ μμ€μ½λνμΌμ μ»΄νμΌλ¬λ₯Ό ν΅ν΄ ν΄λμ€(*.class)νμΌμ μμ±νκ³ μ€νν μ μκ² λ©λλ€.
λ°νμ μλ¬λ νλ‘κ·Έλ¨μ΄ μ€νλμ€ λ°μνλ μλ¬λ₯Ό λ§ν©λλ€. λ³΄ν΅ μ€ν μ€μ μ΄λ€ μμΈμ μν΄ μλͺ»λ κ²°κ³Όκ°μ μ»κ±°λ λΉμ μμ μΈ μ’ λ£, νΉμ λ©μΆμνμ μ§μ λ±μ κ²½μ°κ° λ°νμ μλ¬μ ν΄λΉν©λλ€.
public static void main(String[] args) {
System.out.println(2 % 0);
}
/* ====== result ======
Exception in thread "main" java.lang.ArithmeticException: / by zero
======================= */λ°νμμλ¬λ μμ μμ μ κ°μ΄ λ¬Έλ²μμ μλ¬λ μμ§λ§ μ»΄ν¨ν°κ° λμ΄μ ν΄λΉ ꡬ문μ μνν μ μμ΄ νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’
λ£λκ³ μλ¬λ©μΈμ§λ₯Ό λμμ€λλ€. μμ μμ μμλ ArithmeticExceptionμ΄ λ°μν κ²μ νμΈν μ μμ΅λλ€.
λ°νμ μλ¬λ νλ‘κ·Έλ¨μ΄ μ€νλ λ JVMμμ κ°μ§λλ©° λ©λͺ¨λ¦¬ λΆμ‘±(OutOfMemoryError)μ΄λ μ€νμ€λ²νλ‘μ°(StackOverflowError) λ± λ°μνλ©΄ 볡ꡬν μ μλ κ²μ μλ¬, κ·Έλ¦¬κ³ μμΈνμμ μμΈ‘νκ³ λμμ½λλ₯Ό μμ±ν μ μλ λΉκ΅μ λ μ¬κ°ν μλ¬λ₯Ό μμΈλΌκ³ ν©λλ€.
μλ°μμλ μμΈμ μ€λ₯λ₯Ό ν΄λμ€λ‘ μ μν΄λμμ΅λλ€. μλ°λ μμΈκ° λ°μνλ©΄ ν΄λμ€μμ μΈμ€ν΄μ€νλ₯Ό ν΅ν΄ μμΈμ²λ¦¬λ₯Ό μ§νν©λλ€.
μμ κ·Έλ¦Όμ μμΈ ν΄λμ€μ μμ κ³μΈ΅λ μ
λλ€. μμΈ(Exception)μ μ΅μμ ν΄λμ€λ Exceptionν΄λμ€ μΈ κ²μ νμΈν μ μμ΅λλ€. μ¬κΈ°μ μμΈμ μ΅μμ ν΄λμ€ Exceptionν΄λμ€λ RuntimeExceptionκ³Ό λ€λ₯Έ μΌλ° μμΈ ν΄λμ€λ€μ΄ μ‘΄μ¬ν©λλ€.
μΌλ° μμΈ ν΄λμ€λ μ£Όλ‘ μΈλΆμ μν₯μΌλ‘ λ°μν μ μλ μ€λ₯λ€λ‘ λ³΄ν΅ μ¬μ©μμ μν΄μ λ°μνλ κ²½μ°κ° λ§μ΅λλ€. μλ₯Όλ€μ΄
- μλͺ»λ ν΄λμ€λͺ (ClassNotFoundException)
- μλͺ»λ λ°μ΄ν° μ λ ₯ νμ(DataFormatException)
- μ‘΄μ¬νμ§ μλ νμΌ νΈμΆ(FileNotFoundException) λ±μ΄ μ‘΄μ¬ν©λλ€.
μ€ν μμΈ ν΄λμ€μλ μ£Όλ‘ κ°λ°μμ μ€μμ μν΄μ λ°μλ μ μλ μμΈλ€λ‘ μλ° λ¬Έλ² μμμ κ΄λ ¨λ μ€λ₯λ€μ΄ ν¬ν¨λμ΄ μμ΅λλ€. μλ₯Ό λ€μ΄
- ν΄λμ€κ°μ νλ³ν μ€λ₯(ClassCastException)
- λ²μ΄λ λ°°μ΄ λ²μ μ§μ (ArrayIndexOutOfBoundsException)
- κ°μ΄ NullμΈ μ°Έμ‘°λ³μμ νΈμΆ(NullPointerException)
- μ μλ₯Ό 0μΌλ‘ λλ(ArithmeticException) λ±μ΄ μ€ν μμΈ ν΄λμ€μ μν©λλ€.
μμ μμΈλ κ°λ°μκ° μμΈ‘μ΄ κ°λ₯νκΈ° λλ¬Έμ λ°μν μμΈμ λν΄ μ²λ¦¬νλ μ½λ μμ±μ 미리 ν΄ μ€ μ μλ€κ³ νμ΅λλ€. μλ°μμλ μμΈ μ²λ¦¬λ₯Ό μν μ½λ μμ±μ μν΄ try-catchλ¬Έμ μ 곡ν©λλ€.
μμΈμ²λ¦¬λ νλ‘κ·Έλ¨ μ€ν μ λ°μν μ μλ μμΈμ λν μ²λ¦¬ μ½λλ₯Ό 미리 μμ±ν¨μΌλ‘μ¨, μλ¬ λ°μ μ νλ‘κ·Έλ¨μ λΉμ μμ μΈ μ’ λ£λ₯Ό μλ°©ν΄μ£Όλ μν μ νλ©° λ€μκ³Ό κ°μ΄ μμ±ν΄ μ€ μ μμ΅λλ€.
try {
// μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ μ½λ μμ±
} catch(Exception1 e) {
// Exception1 μ νμ μμΈ λ°μμ μ€νμ½λ
} catch(Exception2 e) {
// Exception2 μ νμ μμΈ λ°μμ μ€ν μ½λ
} finally {
// μμΈ λ°μ μ¬λΆμ μκ΄μμ΄ νμ μ€ν
// νμ μ΅μ
μ μλ
}tryμ λΈλ μμλ μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ μ½λλ₯Ό μ
λ ₯ν©λλ€. λ§μ½ μμΈ μμ΄ μ μμ μΈ μ€νμ΄ λλ€λ©΄ catchλΈλμ μ€ννμ§ μκ³ λ°λ‘ finalλΈλ λ΄μ μ½λκ° μ€νλ©λλ€.
λ§μ½ μμΈκ° λ°μνμ§λ§ catchλΈλμ μΌμΉνλ μμΈνμ
μ΄ μλ€λ©΄ λΉμ°νκ²λ μ€νλμ§ μμ΅λλ€.
μμ μκ°ν΄λλ¦° try-catchλ¬Έμ μ¬μ©νλ κ² μΈμλ μμΈ μ²λ¦¬λ₯Ό ν μ μλ λ°©λ²μ΄ μμ΅λλ€. λ°λ‘ λ©μλμ throws ν€μλλ₯Ό μ¬μ©νμ¬ λ©μλ λ΄μμ λ°μν μ μλ μμΈ ν΄λμ€λ₯Ό μμ±ν΄ μ£Όλ©΄ λ©λλ€.
public void Example() throws Exception1, Exception2 {}λ§μ½ throwsν€μλ λ€μ Exceptionμ μμ±νλ©΄ Exceptionμ λͺ¨λ μμΈμ μ΅μμ ν΄λμ€μ΄κΈ° λλ¬Έμ λͺ¨λ μ’
λ₯μ μμΈκ° λ°μκ°λ₯νλ€λ κ²μ μλ―Έν©λλ€.