[Java/Spring] 예외 : Global Exception Handler 작성법

[코딩 노트] Exception 처리, 어떻게 하는게 좋을까?  

 

아이템 69. 예외는 진짜 예외 상황에만 사용하라
아이템 70. 복구할 수 있는 상황에는 CheckedException을, 프로그래밍 오류에는 RuntimeException을 사용하라
아이템 71. 필요 없는 CheckedException 사용은 피하라
  • Checked Exception은 다음과 같은 상황에서 사용
    • 호출하는 쪽에서 복구할 것이라고 여겨지는 상황
    • 예를 들면 File IO. 예외가 발생하면 닫았다가 다시 열 수도 있고 등등 복구가 가능함.
  • Unchecked Exception은 다음과 같은 상황에서 사용
    • 제대로 쓴다면 일어날 가능성이 없는 경우
    • 예외가 발생해도 어차피 할 수 있는게 없는 경우 (호출한 쪽에서 복구 불가능)
      • 예를 들어 코딩을 애초에 잘못해서 난거면 복구가 불가능함
      • 또는, 유저한테 요청을 받았는데 있어야 할 값이 없어서 진행이 불가능한 경우, 내가 어떻게 더 이상 할 수가 없음. 다시 보내달라고 할 수도 없는 노릇이고. 이런 경우가 복구 불가능.
  • 복구 가능/불가능이 딱 따져지지 않을 때는 그냥 RuntimeException 쪽을 사용하는 편이 낫다

 

아이템 72. 표준 예외를 사용하라
아이템 73. 추상화 수준에 맞는 예외를 던져라

```java

try {

    ... // 저수준 추상화를 이용한다.

} catch (LowerLevelException cause) {

    // 추상화 수준에 맞게 번역한다.

    throw new HigherLevelException(cause);

}

```

 

아이템 74. 메서드가 던지는 모든 예외를 문서화하라
아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라
아이템 76. 가능한 한 실패 원자적으로 만들라
  • 실패 원자적이란, "호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 하는 것"
아이템 77. 예외를 개무시하지 말라
  • 어쨌든 무시하기로 했으면 이유를 주석으로 남기고 변수 이름을 `` ignored``로 바꿔두도록 하자

```java

} catch (ExecutionException ignored) {

    // 기본값을 사용한다

}

```