2024. 6. 2. 17:48ㆍJAVA
예외처리 계층 구조도

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 |