반응형
포스팅 시작 앞에 에러와 예외에 대해서 먼저 비교를 해보고 시작하려고 한다.
- Error란
시스템 레벨에서 발생하는 심각한 수준의 오류를 뜻하며 개발자가 미리 예측하여 처리할 수 없기에 개발 시 예외 처리에 신경 쓰지 않아도 되는 부분이다. - Exception이란
로직 상에서 발생하는 오류로 개발자 구현한 코드에서 발생하여 예외를 예측할 수 있으며 상황에 맞게 처리할 수 있다.
예외 클래스들은 최상위 클래스인 Object를 상속받은 Throwable이라는 클래스를 기반으로 Error와 Exception 클래스로 나뉘며 이때 Exception 클래스는 RuntimeException 상속 여부에 따라 Checked Exception과 Unchecked Exception으로 나뉜다.
그래서 예외라고 하면 크게 Error , Checked Exception, Unchecked Exception을 생각하면 된다.
그림으로 보면 아래와 같다.
그렇다면 또 여기서 Exception 두가지에 대해서 비교를 해보면
Checked Exception | UnCheckedException | |
앱에서 예외 처리 여부 | 필수 | 선택 |
예외 확인 시점 | 컴파일이 안됨 | 런타임 중 에러 발생 |
대표적인 클래스 | Exception을 상속 받는 클래스중 RuntimeException을 제외한 모든 예외 클래스 IOException SQLException |
RuntimeException을 상속받는 모든 클래스 NullPointerException IndexOutOfBoundException |
예외 처리 방법
예외에 대해서 다뤄봤는데 그럼 예외 처리하는 법에 대해서 기술해보려고 한다.
- 1. 예외 복구
소스
public static void main(String[] args) throws IOException {
byte[] list = {'a', 'b', 'c'};
try {
System.out.write(list);
} catch (IOException e) {
// 여기서 뭔가를 처리하는 로직을 넣어준다.
} }
trycatch로 구현하여 예외처리를 하며 예외 발생시 실행할 코드를 적어준다.
- 2. 예외 회피
소스
public static void main(String[] args) throws IOException {
byte[] list = {'a', 'b', 'c'};
System.out.write(list[4]);
}
클래스에 throws 를 추가하여 해당 예외 처리를 한다.
- 3. 예외 전환
소스
public static void main(String[] args) {
byte[] list = {'a', 'b', 'c'};
try {
System.out.write(list);
} catch (IOException e) {
throw new RuntimeException("list를 읽지 못했습니다.");
}}
이렇게 runtimeException 을 상속받아 에러 처리를 한다.
반응형
'IT > Java' 카테고리의 다른 글
@Transactional 사용시 주의 사항1 (checked Exception) (8) | 2023.02.20 |
---|---|
Spring 에서 async 처리 (@Async) (13) | 2023.02.19 |
findBy 쿼리 메서드에서 dto 명칭(underbar, camel case) (10) | 2023.02.10 |
자바 Timestamp / Date / LocalDate 에서 현재 시간 구하는 방법 (4) | 2023.02.09 |
[Java] 리스트 내 요소 중복 체크 (9) | 2023.02.06 |
댓글