주제
- Checked Exception과 Unchecked Exception
- Exception별 예외 처리 방법
1. Error 와 Exception
1.1 Error와 Exception의 차이
- Error와 Exception은 문제가 생겼다는 점에서 비슷하지만 다른 클래스이다.
- Error란 시스템이 비정상적일 때 발생하고, 개발자가 미리 예측하거나 대처하기 어렵다
- Ex) 메모리 부족(Out of Memory), 스택 오버플로우(StackOverflow)
- Exception이란 개발자의 실수 혹은 구현한 코드 레벨에서 발생하는 오류로 미리 예측하거나 대처할 수 있다.
- NullPointerException, FileNotFoundException 등등
1.2 Exception의 종류
Exception의 종류는 RuntimeException과 RuntimeException이 아닌 Exception 으로 구분할 수 있다.
1.2.1 RuntimeException(Unchecked Exception)
- 예외 처리를 강제하지 않는다.
- Application이 실행중일 때 발생하는 오류이다.
- NullPointerException, ArithmeticException 등 직접 실행되지 않으면 발생하지 않기 때문에 예측하기 어려운 예외이다
1.1.1 그 외의 Exception(Checked Exception)
- 반드시 예외 처리를 해야 하기 때문에 컴파일 할 때 미리 알 수 있다.
- 존재하지 않는 파일의 이름을 입력(FileNotFoundException)
- 실수로 클래스의 이름을 잘못 적음(ClassNotFoundException)
- 비교적 대처하기 쉽다. (실행하기 전에 식별이 가능함)
- Try-Catch 문 혹은 throws 문을 사용해야 한다.
2. Exception별 예외 처리 기법
2.1 Rollback이 진행되어야 할 때
트랜잭션을 처리하다가 예외가 발생할 경우, 트랜잭션 작업 내용이 다시 원래 상태로 롤백되어야 할 수 있다.
// RuntimeException에 대한 Rollback
@Transactional
public void sync() {
...
}
// RuntimeException이 아닌 Exception을 상속받은 모든 예외들에 대한 처리
@Transactional(rollbackfor = Exception.class)
public void sync() {
...
}
- rollbackfor 속성을 적절하게 이용하면 사용자가 커스터마이징한 Exception에 대해서도 예외 처리가 가능하다.
2.1 작업을 중단하고 적절한 처리를 해야할 때
public void sync() {
try {
something();
} catch (RollbackException e1) {
rollback();
} catch (Exception e2) {
sendAlert();
break();
} finally {
killMemory();
}
}
- Try Catch 문을 적절하게 사용하면 Exception 마다 처리 방안을 마련할 수 있다.
2.3 책임 회피
public void sync() throws Exception {
something();
...
}
- 작업 중에 발생한 예외를 다른 클래스에 책임을 전가한다.
- throw한 예외는 ControllerAdvice를 선언한 예외 처리 클래스를 통해 처리 가능하다.
# 참고자료
728x90
'# Language > Java' 카테고리의 다른 글
[Java] [Mac] 여러 버전의 Java를 설치/변경하기 (0) | 2022.10.07 |
---|---|
[Java 8] Stream 정렬 예제 메모 (0) | 2022.09.02 |
양방향 연관관계 매핑을 위한 연관관계 편의 메소드 (0) | 2022.03.14 |
[Java] 향상된 for문 콜론 ":" 연산자 (0) | 2021.01.25 |
[Java] 2차원 배열 인덱스 (0) | 2021.01.22 |
Random 클래스 이용한 중복 없는 난수 생성하기 ( 1 to 99) (0) | 2020.05.18 |
Java 패키지 네이밍 (0) | 2020.03.16 |