1) Error와 Exception의 차이
Error(오류)는 자바 프로그램 밖, 시스템에서 비정상적인 상황이 발생한 것을 말한다.
이는 시스템 레벨에서 발생하는 오류이며, 프로세스에 문제를 야기시켜 프로세스를 종료시킬 수 있다.
ex) 컴파일 오류 또는 메모리 부족, Stack Overflow
Error는 프로세스에 영향을 주고, Exception은 쓰레드에만 영향을 준다.
2) Exception과 종류
자바에서의 예외(Exception)이란 사용자의 잘못된 조작이나 개발자의 코딩 실수로 인해 발생하는 프로그램 오류를 뜻한다.
자바에서는 Checked Exception과 Unchecked Exception이 있다.
일반 예외인 Checked Exception은 컴파일 단계에서 확인되는 예외로, 반드시 개발자가 예외 처리를 직접 진행해야 한다.
실행 예외인 컴파일 단계에서 확인되지 않는 예외로, Unchecked Exception은 개발자가 직접 처리하지 않아도 된다.
모든 Exception class는 java.lang.Exception 클래스를 상속받는다.
Exception 클래스 자체는 Checked Exception이고, 자식 클래스 중 RuntimeException 클래스는 Unchecked로 분류된다.
Checked Exception의 예시
- ClassNotFoundException, IOException, SQLException
Unchecked Exception의 예시
- NullPointerException, ArrayIndexOutOfBoundsException
3) 예외 처리 방법
- 예외 처리 코드 (try~catch~finally~)
try{
///예외가 발생할 가능성이 있는 코드
.... ......... ;
.............. .. ; << 1. 여기서 예외가 발생했을 때
.............. .... ; << 2. 예외 발생한 곳 아래는 실행하지 않고,
}
catch(예외클래스 e) {
예외 처리; << 3. catch문에서 예외처리를 한다.
}
finally {
///무슨 일이 있든 항상 실행
}
- 예외 처리 떠넘기기(throw)
throw를 사용하여 호출한 곳으로 예외를 떠넘길 수 있다.
4) 스프링에서의 Exception Handling
- Checked Exception의 경우, 예외 처리 필수이다. 이는 컴파일 단계에서 체크한다.
- Transaction 기본 롤백 대상이 아니기 때문에 롤백 처리할면 추가 처리가 필요하다.
- Unchecked Exception의 경우 Transactional rollbackFor에 기본 옵션으로 들어가 있어 예외 발생시 기본적으로 롤백 처리가 된다.
5) 스프링에서 @ExceptionHandler와 @ControllerAdvice를 사용하여 Exception Handling
- Controller, RestController에만 적용가능 (Service에서 안됨)
- Return 타입은 자유롭게 설정 가능, 이는 Response에 해당될 것이다
- ExceptionHandler는 하나의 클래스에 대한 Exception을 처리
- ControllerAdvice는 모든 Controller에서 발생할 수 있는 예외를 잡아 처리해준다.
참고
'CS' 카테고리의 다른 글
함수형 프로그래밍 (0) | 2021.08.27 |
---|---|
[Spring] ControllerAdvice가 어떻게 작동할까? (0) | 2021.08.22 |
[Spring] AOP란 무엇일까? (0) | 2021.08.21 |
Devops와 CI/CD (0) | 2021.08.05 |
[기술면접] 데이터베이스 트랜잭션 (0) | 2021.07.16 |