λ€, κ·Έ ννμ λ§μ΅λλ€. μ²΄ν¬ μμΈμ λ°νμ μμΈμ λ³Έμ§μ μΈ μ°¨μ΄λ₯Ό μ μ€λͺ νκ³ μμ΅λλ€. μ΄λ₯Ό μ’ λ ꡬ체μ μ΄κ³ λͺ ννκ² λ€λ¬μ΄μ μμ±ν΄λ³΄κ² μ΅λλ€.
νλ‘κ·Έλ¨μ κ°λ°νλ€ λ³΄λ©΄ λ€μν μ€λ₯ μν©μ λ§μ£ΌμΉκ² λλ€.
μ΄λ λ
Όλ¦¬μ μΈ λ¬Έμ μΌ μλ μκ³ , λ°°μ΄μ μΈλ±μ€λ₯Ό μλͺ» μ°Έμ‘°νλ λ¬Έμ μΌ μλ μλ€.
κΈ°μ‘΄μλ μ΄λ¬ν λ¬Έμ λ₯Ό ifμ else λ¬Έμ ν΅ν΄ μ²λ¦¬νλ€.
νμ§λ§ μ΄λ¬ν λ°©μμ λ¨μ μ νλ‘κ·Έλλ¨Έκ° μ νν λ¬Έμ λ₯Ό μΈμ§νκ³ μΌμΌμ΄ ν΄κ²°ν΄μΌ νλ€λ μ μ΄λ€.
μ΄λ¬ν λ¨μ μ 보μνκΈ° μν΄ λ±μ₯ν κ²μ΄ λ°λ‘ μμΈ μ²λ¦¬λ€.
μμΈ μ²λ¦¬λ μμ λ°°μ΄ μΆμνμ μΌμ’
μΌλ‘ λ³Ό μ μλ€.
νλ‘κ·Έλλ¨Έκ° λͺ¨λ μ€λ₯ μν©μ μΈμΈν μ νμ μμ΄,
νΉμ λͺ
λ Ήμ΄μ ν΄λμ€λ₯Ό ν΅ν΄ μμΈ μν©μ μ λ°μ μΌλ‘ κ΄λ¦¬νκ³ μ²λ¦¬ν μ μκ² νλ€.
μ΄λ₯Ό ν΅ν΄ μ½λμ κ°λ
μ±κ³Ό μ μ§λ³΄μμ±μ΄ ν₯μλλ©°,
νλ‘κ·Έλ¨μ΄ μμμΉ λͺ»ν μ€λ₯λ‘ μΈν΄ λΉμ μμ μΌλ‘ μ’
λ£λλ κ²μ λ°©μ§ν μ μλ€.
μλ°μμ μμΈ μ²λ¦¬λ try, catch, finally λΈλ‘κ³Ό throw, throws ν€μλλ₯Ό μ¬μ©νμ¬ κ΅¬ννλ€.
try λΈλ‘μλ μμΈκ° λ°μν μ μλ μ½λλ₯Ό μμ±νκ³ , catch λΈλ‘μμλ ν΄λΉ μμΈλ₯Ό μ²λ¦¬νλ€.
finally λΈλ‘μ μμΈ λ°μ μ¬λΆμ κ΄κ³μμ΄ νμ μ€νλλ μ½λλ₯Ό ν¬ν¨νλ€.
throw ν€μλλ λͺ
μμ μΌλ‘ μμΈλ₯Ό λ°μμν€λ λ° μ¬μ©λκ³ ,
throws ν€μλλ λ©μλκ° νΉμ μμΈλ₯Ό λμ§ μ μμμ μ μΈνλ€.
μμΈ μ²λ¦¬λ₯Ό μν΄ try-catch λ¬Έμ μ¬μ©νλ€.
try λΈλ‘μμλ μμΈκ° λ°μν λ§ν ꡬκ°μ κ°μΈκ³ ,
catch λΈλ‘μμλ μμΈκ° λ°μνλ©΄ μ€νν λ¬Έμ₯μ λ£λλ€.
λ°°μ΄μ λ²μλ₯Ό μλͺ» μ¬μ©ν λλ₯Ό μλ‘ λ€μ΄λ³΄μ:
public class ExceptionPrac {
public static void main(String[] args) {
int[] arr = new int[5];
try {
System.out.println(arr[5]);
} catch (Exception e) {
System.out.println("λ°°μ΄μ λ²μλ₯Ό λ²μ΄λ¬μ΅λλ€.");
}
}
}
λ€μκ³Ό κ°μ΄ λ°°μ΄μ λ²μλ₯Ό λ²μ΄λκ² μ¬μ©νλ©΄:
μ¬μ§κ³Ό κ°μ κ²°κ³Όκ° λμ€κ² λλ€.
보λ€μνΌ, try λΈλ‘μμ μμΈκ° λ°μνμ¬ catch λΈλ‘ λ΄λΆμ λ¬Έμ₯μ΄ μ€νλμλ€.
finallyλ λ¬΄μ¨ μΌμ΄ μμ΄λ μ€νλλ λΈλ‘μ΄λ€.
try-catchμμ μ΄λ€ κ²μ΄ μ€νλλ
finallyλ 무쑰건 μ€νλλ€.
public class ExceptionPrac {
public static void main(String[] args) {
int[] arr = new int[5];
try {
System.out.println(arr[5]);
} catch (Exception e) {
System.out.println("λ°°μ΄μ λ²μλ₯Ό λ²μ΄λ¬μ΅λλ€.");
} finally {
System.out.println("μλ 무쑰건 μ€νν΄μΌν΄");
}
}
}
catch λΈλ‘μ Exception eλΌκ³ μ ν κ²μ λ³Ό μ μλ€.
μ€κ΄νΈ λ΄λΆμλ μμΈμ μ’
λ₯λ₯Ό μ°λ©°, Exceptionμ μμΈμ μ’
λ₯λ₯Ό λνλ΄λ "ν΄λμ€"μ΄λ€.
Exception ν΄λμ€μ κ³μΈ΅λλ λ€μκ³Ό κ°λ€:
Throwable κ°μ²΄κ° μλ¬μ μμΈ μ²λ¦¬λ₯Ό λ€λ£¨λ μ΅μμ ν΄λμ€μ΄λ©°,
Exceptionμ μ²λ¦¬ κ°λ₯ν μμΈλ₯Ό,
Errorλ νλ‘κ·Έλ¨μμ 볡ꡬν μ μλ μν©μ λ€λ£¬λ€.
Exception ν΄λμ€μ μμ ν΄λμ€λ€μ λ€μν μν©μ λμλλ€.
catchλ‘ λ€μ λμ΄μμ tryλ νλ²λ§ μ¬μ©ν΄μΌ νμ§λ§ catchλ μ¬λ¬ λ² μ¬μ©ν μ μλ€.
μ΄κ²μ λ€μν μμΈ ν΄λμ€κ° μ‘΄μ¬νκΈ° λλ¬Έμ΄λ€.
public class ExceptionPrac {
public static void main(String[] args) {
int[] arr = new int[5];
try {
System.out.println(arr[5]);
} catch (Exception e) {
System.out.println("λ°°μ΄μ λ²μλ₯Ό λ²μ΄λ¬μ΅λλ€.");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException");
} finally {
System.out.println("μλ 무쑰건 μ€νν΄μΌν΄");
}
}
}
μ μ½λμμλ catch λΈλ‘μ μ€μ²©ν΄μ μ¬μ©ν μ μμ κ² κ°μ§λ§ μ€λ₯κ° λ°μνλ€.
μ΄λ ν΄λμ€μ κ³μΈ΅λμ κ΄λ ¨μ΄ μλ€.
Exception ν΄λμ€λ λͺ¨λ μμΈμ μ΅μμ κ³μΈ΅μ΄λ€.
λ°λΌμ Exceptionμ μμΈμ λν λͺ¨λ μν©μ λ€λ£¬λ€.
κ·Έλ¬λ―λ‘ ExceptionμΌλ‘ μ΄λ―Έ ν΄κ²° κ°λ₯νλ° λ€μ λ€λ₯Έ μμΈλ₯Ό λ§λΆμΌ νμκ° μλ€.
public class ExceptionPrac {
public static void main(String[] args) {
int[] arr = new int[5];
try {
System.out.println(arr[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException");
} catch (Exception e) {
System.out.println("λ°°μ΄μ λ²μλ₯Ό λ²μ΄λ¬μ΅λλ€.");
} finally {
System.out.println("μλ 무쑰건 μ€νν΄μΌν΄");
}
}
}
μμλ₯Ό λ°κΏ μ°λ©΄ λ¬Έμ μμ΄ μ€νλλ©°,
첫 λ²μ§Έ catchκ° μ€νλλ€.
μμΈμ μ’
λ₯λ μ΄ 3κ°μ§μ΄λ€.
1. Error
2. Checked Exception
3. Runtime Exception (Unchecked Exception μ΄λΌκ³ λ ν¨)
<Error>
μλ° νλ‘κ·Έλ¨ λ°μμ λ°μν λ¬Έμ λ‘, μμ€ν
λ 벨μμ λ°μνλ μ¬κ°ν λ¬Έμ λ₯Ό μλ―Ένλ€.
μλ₯Ό λ€μ΄, λμ€ν¬ κ³ μ₯, λ©λͺ¨λ¦¬ λΆμ‘± λ±μ νλμ¨μ΄λ μμ€ν
μ€λ₯κ° μλ€.
νλ‘κ·Έλ¨μμ μ΄λ¬ν μ€λ₯λ₯Ό μμΈ‘νκ±°λ 볡ꡬνκΈ° μ΄λ ΅λ€.
<Checked Exception>
μ»΄νμΌ μμ μμ μμΈ μ²λ¦¬ μ¬λΆλ₯Ό κ²μ¬νλ μμΈλ‘, λ°λμ μμΈ μ²λ¦¬λ₯Ό ν΄μΌ νλ€.
νμΌ μ
μΆλ ₯μ΄λ λ€νΈμν¬ μ°κ²° μ λ°μν μ μλ μμΈκ° μ΄μ ν΄λΉνλ€.
μλ₯Ό λ€μ΄, `IOException`, `SQLException` λ±μ΄ μλ€.
<Runtime Exception (Unchecked Exception)>
μ€ν μμ μμ λ°μνλ μμΈλ‘, νλ‘κ·Έλ¨μ λ
Όλ¦¬μ μ€λ₯λ μλͺ»λ μ
λ ₯μΌλ‘ μΈν΄ λ°μνλ€.
μλ₯Ό λ€μ΄, μλͺ»λ κ°μ μ
λ ₯νκ±°λ, λ°°μ΄μ μΈλ±μ€λ₯Ό λ²μ΄λλ κ²½μ°κ° μ΄μ ν΄λΉνλ€.
μλ₯Ό λ€μ΄, `NullPointerException`, `ArrayIndexOutOfBoundsException` λ±μ΄ μλ€.
*** λ°°μ΄μ μ?
λ°°μ΄μ λν μμΈλ λ°λ³΅λ¬Έκ³Ό λ³μλ₯Ό ν΅ν μΈλ±μ€ μ κ·Όμ΄ μ¬μ© μ€μ κ²°μ λκΈ° λλ¬Έμ μ»΄νμΌ μμ μ μμΈ‘νκΈ° μ΄λ ΅λ€.
λ°λΌμ λ°°μ΄ μΈλ±μ€λ₯Ό μ΄κ³Όνλ μ κ·Όμ λ°νμμ κ²μΆλλ€.
λν, ν¬κΈ°κ° κ³ μ λ λ°°μ΄μ λν΄ λͺ
νν μ μ μλ μΈλ±μ€ μ΄κ³Ό μμΈ
(μ: 5μΉΈ μ§λ¦¬ λ°°μ΄μ arr[6]μΌλ‘ μ κ·Ό)λ μ»΄νμΌλ¬κ° κ°μ§ν μ μμ§λ§,
μλ°λ μΌκ΄μ±μ μ μ§νκΈ° μν΄ λͺ¨λ λ°°μ΄ μΈλ±μ€ μ΄κ³Ό μμΈλ₯Ό λ°νμ μμΈλ‘ μ²λ¦¬νλ€.
The Throwable class is the superclass of all errors and exceptions in the Java language.
<μμ±μ>
- Throwable()
- Throwable(String message) : μμΈμ λν ꡬ체μ μΈ μν©μ μ€λͺ
- Throwable(Throwable cause) : μμΈμ μμΈμ λ겨μ€
- Throwable(String message, Throwable cause)
<맀μλ>
κ°μ₯ λ§μ΄ μ¬μ©λλ 3κ°μ§λ§ μμ보μ
1. getMessange()
- μμΈ λ©μμ§λ₯Ό μ 곡λ°λλ€. μμΈ μΆλ ₯ μ μ΄λ€ μμΈκ° λ°μνλμ§ νμΈνκΈ° μ μ©νλ€.
- μμ±μ νΈμΆ μ λκ²¨μ€ messageλ₯Ό λ°ννλ€.
2. toString()
- getMessageμ²λΌ μμΈ λ©μμ§λ₯Ό λλ €λ°μ§λ§ μΆκ°μ μΌλ‘ μμΈ ν΄λμ€ μ΄λ¦λ μ 곡νλ€.
3. printStackTrace()
- κ°μ₯ 첫 μ€μ μμΈ λ©μμ§ μΆλ ₯ ν λ λ²μ§ΈλΆν° μμΈκ° λ°μνκ² λ λ©μλλ€μ νΈμΆ κ΄κ³λ₯Ό μΆλ ₯ν΄μ€λ€.
package chapter14;
public class ThrowablePrac {
public static void
main(String[] args) {
try {
methodThatThrowsException();
} catch (Exception e) {
System.out.println("Exception caught(use getMessage): " + e.getMessage());
System.out.println("Exception caught(use toString): " + e.toString());
e.printStackTrace();
}
}
public static void methodThatThrowsException() throws Exception {
throw new Exception("Custom error message");
}
}
μ΄λ° μ½λκ° μλ€κ³ ν΄λ³΄μ.
μ€ν μ μ΄λ° λ¬Έμ₯μ΄ μΆλ ₯λλ©°
e.printStackTraceμμλ λ¬Έμ κ° λ°μν λ©μλμ νΈμΆλ ꡬκ°μ΄ λμ¨λ€.
throwλ μμΈλ₯Ό λ°μμν¨λ€.
throw new μμΈμν© μΌλ‘ μ°λ©°
μνλ 쑰건μ νΉμ ν μμΈλ‘ ν¬ν¨(λμ§λ€)μν¨λ€.
public class throwAndThrows {
public static void main(String[] args) {
throwAndThrows sample = new throwAndThrows();
sample.throwException(7);
sample.throwException(13);
}
public void throwException(int number) {
try {
if (number > 12) {
throw new Exception("Number is over than 12!");
} // μ΄μ μ«μκ° 12λ³΄λ€ ν° κ²μ Exceptionμ ν¬ν¨λλ€.
System.out.println("Number is " + number);
} catch (Exception e) {
e.printStackTrace();
}
}
}
μ μ½λμμμ²λΌ μ¬μ©νλ©° 12κ° λμ΄κ° λλ ExceptionμΌλ‘ μ²λ¦¬λλ€.
κ·Έλ κΈ°μ catchλ‘ λ°λ‘ λμ΄κ° μ€λ₯ ꡬ문μ μΆλ ₯νλ€.
μ΄μ²λΌ μνλ μν©μ "μμΈ"λ‘ λ§λ€μ΄ μ²λ¦¬κ° κ°λ₯νλ€.
"μμΈ"λ‘ λ§λ μν©μ μ²λ¦¬ν λλ
1. λ΄κ° μ§μ μ²λ¦¬νλ€.
2. λλ₯Ό νΈμΆν μμ λ©μλμ λ겨μ€λ€.
μ΄ λ κ°μ§λ‘ λ€λ£¬λ€.
λ΄κ° μ§μ ν΄κ²°ν λλ try-catchλ₯Ό ν΅ν΄ ν΄λΉ λ©μλ λ΄μμ ν΄κ²°νλ€.
νμ§λ§ λ§μ½ μμ λ©μλμμ μ²λ¦¬λ₯Ό νκ² νλ€λ©΄ throwsλ₯Ό ν΅ν΄ λ겨μ€μΌ νλ€.
throwsλ λ©μλ μ΄λ¦ μμ λΆμΌλ©° μ΄ λ©μλλ μμΈλ₯Ό λ°μμν€λ μ μ²λ¦¬ν΄μ μ°μΈμλΌλ λ»μ κ°μ§κ³ μλ€.
μλ₯Ό λ€μ΄λ³΄μ
public class throwAndThrows {
public static void main(String[] args) {
throwAndThrows sample = new throwAndThrows();
try {
sample.test2();
} catch (Exception e) {
System.out.println("test1μμ λ°μν μμΈκ° test2λ₯Ό κ±°μ³ μ²λ¦¬λ©λλ€.");
}
}
public void test1() throws Exception {
throw new Exception("μμΈλ₯Ό λ°μμμΌ μμ λ©μλλ‘ λκΉλλ€.");
}
public void test2() throws Exception {
test1(); // test1μ νΈμΆνμ§λ§ μ§μ ν΄κ²°ν λ₯λ ₯μ΄ μμ΄ λ μμλ‘ λ겨μ€λλ€.
}
}
μλμ κ°μ΄ μ¬μ©νλλ° μνλ μν©μ μμΈλ‘ λ§λ€μμ§λ§
λ΄κ° μ²λ¦¬νμ§ λͺ»ν λ throwsλ₯Ό ν΅ν΄ μμ λ©μλλ‘ λκ²¨μ€ ν μμ λ©μλμμ try-catchλ‘ μ²λ¦¬νλ€.
throwμ throwsλ μ΄λ―Έ μ‘΄μ¬νλ μμΈμ λ΄κ° μνλ 쑰건μ μΆκ°νλ κ²μ΄λ€.
νμ§λ§ μ΄κ² λ§κ³ λ λ΄κ° μνλ μμΈ μν©μ λ§λ€ μλ μλ€.
μ¦, μλ‘μ΄ μμΈ classλ₯Ό λ§λ€ μ μλ€.
μμ Throwable ν΄λμ€μλ Exceptionκ³Ό ErrorλΌλ μμ ν΄λμ€κ° μ‘΄μ¬νλ€κ³ νλ€.
μ΄μ€ Error ν΄λμ€λ μ¬μ©μκ° μμ λλ©΄ μ λλ€.
Errorκ° μλ Exception ν΄λμ€λ κ°λ°μκ° μμλ‘ μΆκ°ν μ μλ€.
public class MyException extends Exception {
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
public class CustomExceptionPrac {
public static void main(String[] args) {
CustomExceptionPrac sample = new CustomExceptionPrac();
try {
sample.throwMyException();
} catch (Exception e) {
e.printStackTrace();
}
}
public void throwMyException() throws MyException {
throw new MyException("Custom exception message");
}
}
μμ²λΌ μμΈλ₯Ό μμλ°μ ν΄λμ€λ₯Ό νΈμΆνμ¬ μ¬μ© κ°λ₯νλ€.
μ₯μ μΌλ‘λ
1. μ’ λ λͺ
ννκ² μμ¬ μ λ¬μ΄ κ°λ₯νλ€.
2. ꡬ체μ μΈ μμΈ μ²λ¦¬κ° κ°λ₯νλ€.
λ±μ΄ μλ€.
μλ°μμλ μμΈλ₯Ό λ κ°μ§ μ£Όμ λ²μ£Όλ‘ λλλ€:
Checked Exception(μ²΄ν¬ μμΈ)μ Runtime Exception(λ°νμ μμΈ).
μ΄ λ κ°μ§ μμΈλ μ²λ¦¬ λ°©μκ³Ό μ¬μ© λͺ©μ μ΄ λ€λ₯΄λ€.
μ²΄ν¬ μμΈλ μ»΄νμΌ μμ μμ μμΈ μ²λ¦¬ μ¬λΆλ₯Ό κ²μ¬νλ μμΈλ€.
μ΄λ¬ν μμΈλ λ°λμ μμΈ μ²λ¦¬λ₯Ό ν΄μΌ νλ€. νμΌ μ
μΆλ ₯μ΄λ λ€νΈμν¬ μ°κ²° μ λ°μν μ μλ μμΈκ° μ΄μ ν΄λΉνλ€.
`IOException`, `SQLException` λ±μ΄ μλ€.
μ²΄ν¬ μμΈλ λ©μλ μ μΈλΆμ `throws` ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈν΄μΌ νλ€.
μ΄λ λ©μλλ₯Ό νΈμΆνλ μͺ½μμ ν΄λΉ μμΈλ₯Ό λ°λμ μ²λ¦¬ν΄μΌ νλ€λ κ²μ μλ―Ένλ€.
μ΄λ¬ν μμΈλ μ£Όλ‘ μΈλΆ μμκ³Όμ μνΈμμ©μμ λ°μν μ μλ μ€λ₯λ₯Ό μ²λ¦¬νλ λ° μ¬μ©λλ€.
λ°νμ μμΈλ μ€ν μμ μμ λ°μνλ μμΈλ‘, νλ‘κ·Έλ¨μ λ
Όλ¦¬μ μ€λ₯λ μλͺ»λ μ
λ ₯μΌλ‘ μΈν΄ λ°μνλ€.
μλ₯Ό λ€μ΄, μλͺ»λ κ°μ μ
λ ₯νκ±°λ, λ°°μ΄μ μΈλ±μ€λ₯Ό λ²μ΄λλ κ²½μ°κ° μ΄μ ν΄λΉνλ€.
`NullPointerException`, `ArrayIndexOutOfBoundsException` λ±μ΄ μλ€.
λ°νμ μμΈλ λ©μλ μ μΈλΆμ `throws` ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈνμ§ μμλ λλ€.
μμΈ μ²λ¦¬λ₯Ό κ°μ νμ§ μμΌλ―λ‘, νμν κ²½μ°μλ§ `try-catch` λΈλ‘μ μ¬μ©νμ¬ μ²λ¦¬νλ€.
μ΄λ μ£Όλ‘ νλ‘κ·Έλλ° μ€λ₯λ λ
Όλ¦¬μ μ€λ₯λ₯Ό μ²λ¦¬νλ λ° μ¬μ©λλ€.
μ²΄ν¬ μμΈλ μΈλΆ μμκ³Όμ μνΈμμ©μμ λ°μν μ μλ μ€λ₯λ₯Ό μ²λ¦¬νκΈ° μν΄ μ¬μ©λλ©°,
λ°λμ μμΈ μ²λ¦¬λ₯Ό ν΄μΌ νλ€.
λ°λ©΄, λ°νμ μμΈλ νλ‘κ·Έλ¨μ λ
Όλ¦¬μ μ€λ₯λ₯Ό μ²λ¦¬νκΈ° μν΄ μ¬μ©λλ©°, μμΈ μ²λ¦¬λ₯Ό κ°μ νμ§ μλλ€.
μ²΄ν¬ μμΈλ μμΈ λ°μ κ°λ₯μ±μ΄ λμ μΈλΆ μμ μ κ·Ό μ½λμμ μ¬μ©νκ³ ,
λ°νμ μμΈλ λ
Όλ¦¬μ μ€λ₯λ₯Ό μ²λ¦¬νκΈ° μν΄ μ¬μ©νλ€.
μ΄λ₯Ό ν΅ν΄ μ½λμ κ°λ
μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μμν€κ³ , μμΈ μν©μ λ³΄λ€ ν¨κ³Όμ μΌλ‘ μ²λ¦¬ν μ μλ€.
μ²΄ν¬ μμΈμ λ°νμ μμΈλ κ°κ°μ μ¬μ© λͺ©μ κ³Ό μ²λ¦¬ λ°©μμ΄ λ€λ₯΄λ€.
μ²΄ν¬ μμΈλ μ»΄νμΌ μμ μμ μμΈ μ²λ¦¬ μ¬λΆλ₯Ό κ²μ¬νλ©°, λ°λμ μμΈ μ²λ¦¬λ₯Ό ν΄μΌ νλ€.
λ°νμ μμΈλ μ€ν μμ μμ λ°μνλ©°, μμΈ μ²λ¦¬λ₯Ό κ°μ νμ§ μλλ€.