언체크 예외는 말 그대로 컴파일러가 예외 처리 여부를 검사하지 않는 예외이다.
언체크 예외도 체크 예외와 동일하게 try-catch로 처리할 수 있다.
차이점은 예외를 처리하지 않을 경우 throws 선언을 생략할 수 있다는 점이다.
즉, 예외를 잡지 않으면 자동으로 상위 호출자에게 전파된다.
package exception.basic.unchecked;
public class MyUncheckedException extends RuntimeException {
// RuntimeException을 상속 받은 예외는 언체크 예외가 된다.
public MyUncheckedException(String message) {
super(message);
}
}
package exception.basic.unchecked;
public class UnCheckedCatchMain {
public static void main(String[] args) {
Service service = new Service();
service.callCatch();
System.out.println("정상 종료");
}
}
package exception.basic.unchecked;
public class Service {
// unChecked 예외는 예외를 잡거나, 던지지 않아도 된다.
// 예외를 잡지 않으면 자동으로 밖으로 던진다.
Client client = new Client();
public void callCatch() {
try {
client.call();
} catch (MyUncheckedException e) {
// 예외 처리 로직
System.out.println("예외 처리, message = " + e.getMessage());
}
System.out.println("정상 로직");
}
// 예외를 잡지 않아도 된다.
// 자연스럽게 상위로 넘어간다.
// 체크 에예외 다르게 throws 예외 선언을 하지 않아도 된다.
public void callThrow() {
client.call();
}
}