예외처리 -Checked Exception

2024. 6. 2. 17:48JAVA

 

예외처리 계층 구조도

출처 : TCP School

Error

메모리 부족이나 심각한 시스템 오류로 인해 앱 내에서 복구가 불가능한 예외이다.

 

Exception

- 앱 내에서 사용할 수 있는 실질적인 최상위 예외이다.

- Exception 과 Exception을 상속받는 하위 클래스는 모두 컴파일러가 체크하는 체크 예외이다. 단, RuntimeException 은 컴파일러가 체크해주지 않는다.

RuntimeException

- 컴파일러가 체크하지 않는 언체크 예외이다.

- RuntimeException을 상속하는 모든 예외는 언체크 예외이다.

- 통용적으로, 앱 실행 중 발생하는 익셉션을 RuntimeException 으로 부르곤 한다.


Exception

개발자는 checked 예외를 처리하기 위해 명시적 작업을 수행해야 한다.

Exception은 클래스로, 새로운 예외 클래스는 다음과 같이 작성하면 된다.

public class MyCheckedException extends Exception{
    public MyCheckedException(String message) {
        super(message);
    }
}

생성자에 파라미터를 전달하여 상위 클래스에 메세지를 저장. Throwable까지 거슬러 올라가 메세지를 저장한다.

이후, getMessage() 를 통해 꺼낼 수 있다.

 

사용 규칙

반드시, 예외를 던지거나, 처리해야 한다.

 

키워드

throw : 예외를 발생시키는 키워드 이다.

throws : 해당 메서드에서 발생할 예외를 처리하지 못할 때 메서드를 호출한 곳으로 예외를 던지는 키워드이다.

public void call() throws MyCheckedException{
    // 문제 발생!
    throw new MyCheckedException("ex");

}

 

try : 예외가 발생할 수 있는 코드(메서드)를 호출하는 블럭

catch : try에서 발생한 예외를 잡아 내 정상작동하도록 처리하는 블럭이다.

public void callCatch() {
    try {
        client.call();
    } catch (MyCheckedException e) {
        System.out.println("예외 처리, message " + e.getMessage());
    }
    System.out.println("정상 흐름");
}

call() 를 호출했을 때, 문제가 발생하면

throw new 예외 클래스();로 예외가 발생한다.

처리하는 코드가 따로 없고, throws 예외 클래스 처리 하였으므로, 

MyCheckedException 이 call() 메서드를 호출한 곳으로 넘어간다.

 

catch(처리할 예외){

처리 코드

}

로 정상흐름으로 되돌린다.

 

예외를 발생시키고, 직접 처리하거나, 바깥으로 던지면서 폭탄돌리기를 하는데

앱 시작 지점인 main()를 넘어가게 될 경우, 프로그램이 종료된다.

 

 

'JAVA' 카테고리의 다른 글

예외처리 - try ~ catch ~ finally  (0) 2024.06.03
예외처리 - Unchecked Exception(런타임 익셉션)  (0) 2024.06.02
중첩 클래스 -정적 중첩 클래스  (0) 2024.05.28
중첩 클래스  (0) 2024.05.28
enum  (0) 2024.05.01