야생토끼 블로그

Unckecked Exception과 Checked Exception 본문

Computer science/Java

Unckecked Exception과 Checked Exception

lazy. 2020. 5. 3. 14:28
복구할 수 있는 상황이면 검사 예외를, 프로그래밍 오류라면 비검사 예외를 던지자, 확실하지 않다면 비검사예외를 던지자. 검사 예외도 아니고 런타임 예외도 아닌 throwable 은 정의하지도 말자. 검사 예외라면 복구에 필요한 정보를 알려주는 메서드도 제공하자.
- 이펙티브 자바 3편

 

 

 * 출처 : https://www.javamadesoeasy.com/2015/05/exception-handling-exception-hierarchy.html

 

 

에러(Error)

위의 이미지에서도 볼 수 있듯 시스템에 비정상적인 상황이 생겼을 때 발생. 심각한 수준의 오류이고 어플리케이션에서 제어할 수 없기 때문에, 비검사예외(Unckecked Exception)로 분류. 어떤 흐름 중에 발생할 지 예측 불가.

 

예외(Exception)

예상할 수 있고 개발자의 로직에서 발생하므로, 개발자가 만들기도하고 처리도 가능.

 

검사예외(Checked Exception)

컴파일 단계에 컴파일러가 체크, Exception 하위 클래스 중 Runtime 제외한 예외, 처리 안하면 컴파일 에러남. 예외 발생 시 트랜잭션 롤백하지 않음. 대표적으로 IOException, SQLException.

 

비검사예외(Unchecked Exception)

실행 단계, 컴파일러에게 안걸러지고 실행했을 때 발생. 코드 상 문제.  예외 발생 시 트랜잭션 롤백함. 대표적으로 NullPointerException, OutOfBoundsException.

 

사용자 정의 예외

개발자가 생성하고 던지는 예외, 비정상적인, 예측가능한 예외에 대해 커스텀으로 생성한 예외를 던지고 처리하는 것.

 


예외를 잡은 뒤에 처리 방법

복구 : 상황을 파악하고 정상으로 돌려놓는 방법

회피 : 직접 담당하지 않고 호출한 곳으로 던지는 방법

전환 : 적절한 예외로 전환하여 던지는 방법

 


예외를 다루는 방법

catch절 비워두지 않기, 적어도 주석처리라도하기.

어디에서 발생한 에러인지 표기하기. (printStackTrace(), 로거사용)

Checked Exception을 Unchecked Exception으로 변경해서 던져야할 때, Checked 에서 받은 내용을 전해주기.

 


RESTFul 서비스 예외 처리

컨트롤러 기반 예외 처리 (Controller based Exception Handling) : @ExceptionHandler 사용, @Controller, @RestController에서만 사용가능, 개별도 가능하고 공통 컨트롤러를 다른 컨트롤러가 상속받는 구조도 가능.

 

전역 예외 처리 (Global Exception Handling) : @ControllerAdvice, @RestControllerAdvice 사용, 전체 어플리케이션의 컨트롤러(Controller나 RestController 각각 따로)에 적용, @ExceptionHandler, @ModelAttribute, @InitBinder 3가지 메소드 지원.

* 출처 : https://www.concretepage.com/spring/spring-mvc/spring-mvc-controlleradvice-annotation-example

 

 

참고 자료 :

https://madplay.github.io/post/java-checked-unchecked-exceptions

 

https://palpit.tistory.com/914

 

https://brunch.co.kr/@kd4/5

 

https://close852.tistory.com/47

 

https://www.slipp.net/questions/350

 

https://eblo.tistory.com/48

 

https://jeong-pro.tistory.com/195

 

https://5553.tistory.com/132

 

Comments