μλ°μμλ μ€ν μ(runtime) λ°μν μ μλ νλ‘κ·Έλ¨ μ€λ₯λ₯Ό 'μλ¬(Error)'μ 'μμΈ(Exception)'λ‘ κ΅¬λΆνλ€. μλ¬λ λ©λͺ¨λ¦¬ λΆμ‘±(OutOfMemoryError)μ΄λ μ€νμ€λ²νλ‘μ°(StackOverflowError)μ κ°μ΄ μΌλ¨ λ°μνλ©΄ 볡ꡬν μ μλ μ¬κ°ν μ€λ₯μ΄κ³ , μμΈλ λ°μνλλΌλ μμ΅λ μ μλ λΉκ΅μ λ μ¬κ°ν κ²μ΄λ€.
μλ¬λ νλ‘κ·Έλ¨ μ½λμ μν΄μ μμ΅λ μ μκ³ μμΈλ μμ΅λ μ μμΌλ―λ‘, μμΈ μ²λ¦¬(Exception Handling)λ₯Ό ν΅ν΄ ν΄λΉ μν©μ μΈμνκ³ λμ²νλλ‘ νλ€.
1. μμΈ ν΄λμ€μ λΆλ₯ πΉ
μμΈ ν΄λμ€μ κ³μΈ΅ ꡬ쑰λ ν¬κ² 3κ°μ§λ‘ λλμ΄ λ³Ό μ μλ€. μΌμͺ½μ μλ Error, νλμμΌλ‘ νμλ Checked Exception κ³μ΄, μ£Όν©μμΌλ‘ νμλ Unchecked Exception κ³μ΄(= RunTime Exception κ³μ΄)μ΄ μλ€.
CheckedException κ³μ΄μ μ¬μ©μμ μ€μμ κ°μ μΈμ μΈ μμΈμ μν΄ λ°μνλ μμΈμ΄λ€. μλ₯Ό λ€μ΄ μ‘΄μ¬νμ§ μλ νμΌμ μ΄λ¦μ μ λ ₯νλ€λκ°(FileNotFoundException), μ€μλ‘ ν΄λμ€μ μ΄λ¦μ μλͺ» μ μλ€λκ°(ClassNotFoundException), λλ μ λ ₯ν λ°μ΄ν° νμμ΄ μλͺ»λ(DataFormat Exception) κ²½μ°μ λ°μνλ€. ν΄λΉ κ²½μ°μλ μμΈμ λν λμ² μ½λκ° μμΌλ©΄ μ»΄νμΌμ΄ μ§νλμ§ μλλ€.
Unchecked Exception κ³μ΄(= RunTime Exception κ³μ΄)μ νλ‘κ·Έλλ¨Έμ μ€μλ‘ λ°μνλ μμΈμ΄λ€. μλ₯Ό λ€μ΄ λ°°μ΄μ λ²μλ₯Ό λ²μ΄λλ€λκ°(ArraryIndexOutOfBoundsException), κ°μ΄ nullμΈ μ°Έμ‘°λ³μμ λ©€λ²λ₯Ό νΈμΆνλ € νλ€λκ°(NullPointerException), ν΄λμ€ κ°μ νλ³νμ μλͺ»νλ€λκ°(ClassCastException), μ μλ₯Ό )μΌλ‘ λλλ €κ³ (ArithmeticException)νλ κ²½μ°μ λ°μνλ€. μ΄λ μμΈμ λν λμ² μ½λκ° μλλΌλ μ»΄νμΌμ μ§νμ΄ λλ€.
2. try-catchλ¬Έ πΈ
try {
// μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ μ½λλ€μ λ£λλ€.
} catch (Exception e) {
// μμΈλ₯Ό μ²λ¦¬νκΈ° μν μ½λλ₯Ό λ£λλ€.
}
μμΈκ° λ°μνλ©΄, λ°μν μμΈμ ν΄λΉνλ ν΄λμ€μ μΈμ€ν΄μ€κ° λ§λ€μ΄μ§λ€. κ·Έλμ λ§μ½ μμΈκ° λ°μν λ¬Έμ₯μ΄ tryλΈλμ ν¬ν¨λμ΄ μλ€λ©΄, μ΄ μμΈλ₯Ό μ²λ¦¬ν μ μλ catch λΈλμ΄ μλμ§ μ°Ύκ² λλ€. μ μ ν catchλΈλμ μ°Ύκ² λλ©΄ catchλΈλ μμ λ΄μ©μ μννκ³ try-catchλ¬Έμ λΉ μ Έλκ°λ€.
catchλΈλμ μμΈνμ λ²μκ° λ무 ν° κ²½μ° μμΈκ° λ°μνμ§λ§ ꡬ체μ μΈ μμΈμ λν΄μ μμ§ λͺ»νκ² λκ³ , λ§μ½ catchλΈλμ μμΈνμ λ²μ λ무 μμ κ²½μ°μλ μμΈκ° μ²λ¦¬λμ§ μλ λ¬Έμ κ° λ°μνλ€. κ·Έλμ μλμ κ°μ΄ μμ λ²μμμ ν° λ²μλ‘ catchλΈλμ νλ¦μ μ μ΄ν νμκ° μλ€. (μμΈ ν΄λμ€λ μμΈνμ λ²μμ ν¬κΈ°μ μλ―Έλ₯Ό λκΈ° μνμ¬ μμλ‘ μμ±ν κ²μ΄λ€.)
try {
// μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ μ½λλ€μ λ£λλ€.
} catch (SubSubException e) {
// μμΈλ₯Ό μ²λ¦¬νκΈ° μν μ½λλ₯Ό λ£λλ€.
} catch (SubException e) {
// μμΈλ₯Ό μ²λ¦¬νκΈ° μν μ½λλ₯Ό λ£λλ€.
} catch (Exception e) {
// μμΈλ₯Ό μ²λ¦¬νκΈ° μν μ½λλ₯Ό λ£λλ€.
}
JDK1.7λΆν°λ λ©ν° catch λΈλμ μ§μνκ³ μλ€. μ΄λ μ¬λ¬ catch λΈλμ '|' κΈ°νΈλ₯Ό ν΅ν΄μ νλλ‘ ν©μΉ μ μκ² ν΄ μ€λ€. μ£Όμν μ μ μμΈ ν΄λμ€κ° μ‘°μκ³Ό μμμ κ΄κ³κ° μμΌλ©΄ μ λλ€.
try {
...
} catch (ParentException | ChildException e) { // Error
...
}
try {
...
} catch (ParentExceptionA | ParentExceptionB e) { // OK
...
}
try {
...
} catch (ChildExceptionA | ChildExceptionB e) { // OK
...
}
3. μμΈμ λν μ 보 π―
μμΈκ° λ°μνμ λ μμ±λλ μμΈ ν΄λμ€μ μΈμ€ν΄μ€μλ λ°μν μμΈμ λν μ λ³΄κ° λ΄κ²¨μλ€. getMessage()μ printStackTrace()λ₯Ό ν΅ν΄μ μ΄ μ 보λ€μ μ¬μ©ν μ μλ€.
getMessage()λ λ°μν μμΈν΄λμ€μ μΈμ€ν΄μ€μ μ μ₯λ λ©μμ§λ₯Ό μ»μ μ μκ³ , printStackTrace()λ μμΈλ°μ λΉμμ νΈμΆμ€ν(Call Stack)μ μμλ λ©μλμ μ 보μ μμΈ λ©μμ§λ₯Ό νλ©΄μ μΆλ ₯νλ€.
public class Main {
public static void main(String[] args) {
int N = 10;
System.out.println("N = " + N);
try {
System.out.println("N / 5 = " + N / 5);
System.out.println("N / 2 = " + N / 2);
System.out.println("N / 0 = " + N / 0); // μμΈ λ°μ
} catch (Exception e) {
e.printStackTrace();
System.out.println("e.getMessage λ΄μ© : " + e.getMessage());
}
}
}
// μΆλ ₯ λ΄μ©
// N = 10
// N / 5 = 2
// N / 2 = 5
// e.getMessage λ΄μ© : / by zero
// java.lang.ArithmeticException: / by zero
// at com.amenable.Main.main(Main.java:8)
4. λ©μλ μμΈ μ μΈ π₯
void method1() throws Exception {
...
}
void method2() throws Exceptoin1, Exception2, Exception3 {
...
}
μμ κ°μ΄ λ©μλ μμΈ μ μΈμ ν΄μ€ μ μλ€. μ΄λ μμΈλ₯Ό μ²λ¦¬νλ€κΈ°λ³΄λ€λ μμ μ νΈμΆν λ©μλμκ² μμΈμ²λ¦¬λ₯Ό λ 맑기λ κ²μ΄λ€. λ¨μν μ λ¬μ νλ κ²μ΄λ―λ‘ μ΄λ ν κ³³μμλ λ°λμ try-catchλ¬ΈμΌλ‘ μμΈμ²λ¦¬λ₯Ό ν΄μ£Όμ΄μΌ νλ€.
κ·Έλ λ€λ©΄ κ·Έλ₯ ν΄λΉ λ©μλμμ λ°λ‘ μμΈμ²λ¦¬λ₯Ό ν΄μ£Όλ©΄ λλλ° μ μ λ¬μ ν κΉ? λ€μν μ΄μ κ° μμ μ μκ² μ§λ§ κ·Έμ€ ν κ°μ§ μ΄μ λ 'νΈμΆν λ©μλμμ μμΈκ° λ°μνλ€λ μ¬μ€μ μ μ μκ² νκΈ° μν¨'μ΄λ€. λ¨Όμ μ½λλ₯Ό 보μ.
public class Main {
public static void main(String[] args) {
method();
}
static void method() {
try {
throw new Exception();
} catch (Exception e) {
System.out.println("methodμμ μμΈ μ²λ¦¬");
e.printStackTrace();
}
}
}
//methodμμ μμΈ μ²λ¦¬
//java.lang.Exception
// at com.amenable.Main.method(Main.java:8)
// at com.amenable.Main.main(Main.java:3)
μμ μ½λμ²λΌ μμ±νλ©΄ mainμμλ μμΈκ° λ°μνλ€λ μ¬μ€μ‘°μ°¨ λͺ¨λ₯΄κ² λλ€. νμ§λ§ methodμμ μμΈλ₯Ό λ겨주면 mainμμ methodλ₯Ό νΈμΆν λΌμΈμμ μμΈκ° λ°μνλ€λ κ²μ μ μ μκ³ μ΄μ λν΄μ μ²λ¦¬λ₯Ό ν μ μλ€.
public class Main {
public static void main(String[] args) {
method(); // μ»΄νμΌ μλ¨. μμΈμ²λ¦¬ ν΄μ€μΌ ν¨
}
static void method() throws Exception {
throw new Exception();
}
}
public class Main {
public static void main(String[] args) {
try {
method();
}
catch(Exception e) {
System.out.println("mainμμ μμΈμ²λ¦¬");
e.printStackTrace();
}
}
static void method() throws Exception {
throw new Exception();
}
}
//mainμμ μμΈμ²λ¦¬
//java.lang.Exception
// at com.amenable.Main.method(Main.java:14)
// at com.amenable.Main.main(Main.java:5)
ν΄λΉ κΈμ λ¨κΆ μ±λμ Javaμ μ μμ μ½κ³ μμ±ν κ²μ λλ€.
'π JAVA > μ£Όμ κ°λ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ μΆλ ₯(I/O)(1) - λ Έλ μ€νΈλ¦Ό, 보쑰 μ€νΈλ¦Ό (0) | 2023.01.29 |
---|---|
λλ€μ(Lambda Expression) - (2) (0) | 2023.01.29 |
λλ€μ(Lambda Expression) - (1) (0) | 2023.01.29 |
Comparableκ³Ό Comparator (0) | 2023.01.28 |
μμΈμ²λ¦¬(Exception Handling) - (2) (0) | 2023.01.28 |