예외 클래스
예외
(exception)
사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
예외가 발생하면 프로그램은 곧바로 종료된다는 점에서 에러와 비슷하지만,
예외는 예외처리(exception handling)를 통해서 프로그램을 종료하지 않고,
정상 실행 상태를 유지할 수 있도록 할 수 있다.
자바는 예외가 발생할 가능성이 높은 코드를 컴파일할 때 예외 처리 유무를 확인한다.
만약 예외 처리 코드가 없다면 컴파일이 되지 않는다.
하지만 모든 예외에 대해 예외처리 유무를 확인하는 것은 아니다.
try-catch-finally 블록
try {
예외 발생 가능 코드
} catch(예외클래스 e) {
예외 처리
} finally {
항상 실행
}
- try 블록에는 예외 발생 가능 코드가 있다.
- 1️⃣ try 정상실행 ➜ finally
2️⃣ try 예외발생 ➜ catch 예외처리 코드 실행 ➜ finally - finally 블록은 생략이 가능하다.
catch블록 내부에서는 try에서 발생한 예외와 관련된 블록을 찾게 된다.
또한 예외가 발생했을 때 예외에 대한 정보를 로그에 남기거나,
사용자에게 오류메세지를 표시하는 등의 예외처리를 수행 할 수 있다.
다중 Catch 블록
catch블록은 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다.
예외 처리를 할 때 catch 블록은 위에서부터 차례로 검색되기 때문에,
만약 상위 예외 클래스의 catch블록이 위에 있다면, 하위 예외 클래스의 catch블록은 실행되지 않는다.
➜ 하위 예외는 상위 예외를 상속했기 때문에 상위 예외 타입도 되기 때문
잘못된 예외 처리 코드
try {
NumberFormatException 발생
} catch (exception e) {
예외처리 1
} catch (NumberFormatException e) {
예외처리 2
}
NumberFromatException은 Exception을 상속받기 때문에
예외처리 1은 실행되지만 예외처리 2는 실행되지 않는다.
try {
NumberFormatException 발생
} catch (NumberFormatException e) {
예외처리 1
} catch (exception e) {
예외처리 2
}
위와 같이 수정한다면
NumberFormatException이 발생하면
예외처리 1을 실행하고,
그 이외의 에러가 발생한다면 예외처리 2로 가게 된다.
'자바 탐구' 카테고리의 다른 글
스프링) 스프링이란? (0) | 2024.05.14 |
---|---|
JPA) N + 1 문제 (0) | 2023.08.01 |
자바) 오버로딩과 오버라이딩 (0) | 2023.07.31 |
스프링) @SpringBootTest와 @WebMvcTest의 차이 (0) | 2023.07.25 |
스프링) RestClient (0) | 2023.07.25 |