예외 클래스
- Java에서 예외는 class로 선언된다.
- Exception 클래스나 Exception의 서브클래스를 상속받아서 선언한다.
- 클래스이므로 생성자, 멤버변수, 함수 등을 가질 수 있다.
- 예외 클래스들은 일반 객체처럼 사용할 수 있다.
- 일반 객체와 다른 점은 예외 클래스는 throw 할 수 있다는 것이다.
Java의 예외 구조는 위와 같다. 실행시간에 발생하는 예외들은 RuntimeException을 상속하며, Runtime예외는 컴파일러에 의해 미리 검사할 수 없다.
예외 처리
- throw문을 통해 예외를 던진다.
- 예외가 발생했는데 handle하지 않으면 예외메세지가 표시된다.
- 예외메세지는 call stack trace를 포함한다. (main method부터 시작한 호출 과정)
- try-catch-finally 문으로 예외처리를 한다.
try {
int a = 100 / 0;
} catch (ArithmeticException e) {
System.out.println(e);
} catch (IllegalArgumentException e) {
System.out.println(e);
} finally {
System.out.println("okay");
}
예외 전파
handle되지 않은 예외는 caller(호출자)에게 전파된다. handle될 때 까지 전파된다.
main까지 전파되었는데도 handle되지 않으면 프로그램이 종료된다.
컴파일러 예외 검사
- 앞에서 설명했듯이 try-catch로 예외를 잡아야 한다.
- 컴파일러가 compile-time에 발생가능한 예외에 대해 try-catch로 handle했는지 검사한다.
- handle하지 않으면 컴파일에러가 발생한다. (~~Exception must be caught or declared to be thrown)
- try-catch로 handle하지 않았다면 함수 header부분에 throws로 선언해줘야 한다.
void calculate(int a, int b) throws BaboException { ... }
- 컴파일러는 호출된 함수의 header에 throws가 있으면 그 함수를 호출한 함수에서 try-catch로 해당 예외를 handle하는지 검사한다.
- 해당 함수에서도 handle하지 않는다면 해당 함수의 header에도 throws가 있어야 한다.
Unchecked Exception
- 컴파일러가 검사할 수 있는 예외를 Checked Exception이라 한다.
- RuntimeException을 제외한 모든 예외는 Checked Exception이다.
- RuntimeException을 상속하는 예외들을 UncheckedException이라 한다.
- 컴파일러는 UncheckedException에 대해서는 미리 검사하지 않는다.
- 대신 프로그래머가 UncheckedException에 대해 책임져야 한다.
막연히? 알고 있던 내용들인데, 시험공부 하는 김에 한번 정리했다 ^ㅇ^
'Java' 카테고리의 다른 글
Java 정렬 (0) | 2023.12.25 |
---|---|
StringBuilder, StringJoiner, String.format (1) | 2023.10.29 |