Exception
Checked & Unchecked
Checked Exception & Unchecked Exception
- 자바의 예외 처리는 두 가지로 구별할 수 있다. 위의 그림을 보면 쉽게 구분할 수 있다.
- Checked Exception
- Unchecked Exception
- 둘의 차이는 예외가 발생할 수 있는 상황과 관련이 있다.
- Checked Exception은 예상이 가능하다.
- 이미지 파일을 가져올거야, 근데 없으면 defaulst image로 대체해. => 예측과 복구가 이뤄짐
- Unchecked Exception은 예측이 어렵다.
- 프로그램이 돌아가던 중에 메모리가 부족하네? => 예측할 수 없어 언제 catch하고 복구할지 정해둘 수가 없다.
- 메소드 인자로 null이 들어왔네? => 얘는 예측이 가능한 경우는 복구할 수 있지만, 너무 광범위하게 일어남.
- Checked Exception은 예상이 가능하다.
- 둘은 서로 다른 작성 룰이 있다.
Checked Exception
- Checked Exception을 throws 할 수 있는 메서드를 작성한 경우,
- 메서드 시그니처에 throws 절을 사용해서 예외를 선언해야 한다.
- Checked Exception을 던지는데 throws 절을 선언하지 않으면, 컴파일 에러가 뜬다.
- 이 부분 때문에 Checked 라는 확인 되었다는 이름이 붙음.
- 메서드 시그니처에 throws 절을 사용해서 예외를 선언해야 한다.
- 내가 작성한 메서드에서 사용된 다른 메서드가 Checked Exception을 throw 할 수 있는 경우
- 내가 작성한 메서드가 Checked Exception을 throw 할 가능성이 없어도, thorws절로 선언해줘야 한다.
- 또는, try/catch 문으로 exception 처리를 해줘야 한다.
- Checked Exception은 두 가지 선택지가 있다.
- 내가 여기서 예외를 잡거나, (try/catch)
- 나를 호출하는 너한테 떠넘기거나. (throws)
- 이러나 저러나 Checked Exception은 예외 처리가 필수이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Checked Exception을 던질 가능성이 있는 경우.
public void test1() throws CheckedException {
throws new CheckedException();
}
// Checked Exception이 발생해도 예외 처리를 한 경우.
public void test2() {
try {
throws new CheckedException();
} catch(Exception e) {
// 예외 처리
}
}
// 여러 개의 Checked Exception이 발생할 수 있는 경우.
public void test3() throws CheckedException, BaboCheckedException {
throwChecked();
throwBabo();
}
// 여러 개의 Checked Exception이 발생할 수 있지만, 예외 처리로 잡아준 경우.
// 바보만 잡아줬으니 CheckedException 얘는 throws로 선언해줘야 한다.
public void test4() throws CheckedException {
throwChecked();
try {
throwBabo();
} catch(BaboException e) {
// 예외 처리
}
}
- Checked Exception을 throw 할 가능성이 있는 경우에는 메서드 시그니처에 thorws 절로 어떤 CheckException을 throw 할 수 있는지 명시 해줘야 한다.
- Checked Exception을 throw 할 가능성은 있지만, 빠르게 처리해버리면 throws 절로 명시하지 않아도 된다.
- 만약 해당 메서드가 여러 종류의 Checked Exception을 throw 할 가능성이 있다면, 여러 개 넣어주면 된다. 역시나 여러 개여도 try/catch로 예외 처리를 해주면 명시하지 않아도 된다.
Unchecked Exception
- Unchecked Exception가 throw 되더라도 throws문을 작성할 필요가 없다.
- Unchecked Exception은 어디에서도 일어날 수 있기 때문에, 따로 예측할 필요가 없다.
- Unchecked Exception은 try/catch로 잡을 수도 있다.
- Unchecked Exception 역시 예측만 할 수 있다면 잡을 수도 있다.
- 예를 들어, NullPointException을 처리하는 경우가 가장 많을 것이다.
- Unchecked Exception은 잡지 못할 수도 있다.
- Unchecked Exception은 프로그래밍 내에서는 해결하지 못하는 경우가 있다.
- 예를 들어, OutOfMemoryError의 경우 예측하고 catch 해봤자, 프로그래밍 레벨에서 해결할 수 있는게 없다.
- 그렇지만 try/catch로 로깅 정도는 가능하다고 한다.
This post is licensed under CC BY 4.0 by the author.