diff --git "a/10\354\236\245/70_\353\263\265\352\265\254\355\225\240_\354\210\230_\354\236\210\353\212\224_\354\203\201\355\231\251\354\227\220\353\212\224_\352\262\200\354\202\254\354\230\210\354\231\270\353\245\274_\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215_\354\230\244\353\245\230\354\227\220\353\212\224_\353\237\260\355\203\200\354\236\204\354\230\210\354\231\270\353\245\274_\354\202\254\354\232\251\355\225\230\353\235\274_\352\271\200\352\264\221\355\233\210.md" "b/10\354\236\245/70_\353\263\265\352\265\254\355\225\240_\354\210\230_\354\236\210\353\212\224_\354\203\201\355\231\251\354\227\220\353\212\224_\352\262\200\354\202\254\354\230\210\354\231\270\353\245\274_\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215_\354\230\244\353\245\230\354\227\220\353\212\224_\353\237\260\355\203\200\354\236\204\354\230\210\354\231\270\353\245\274_\354\202\254\354\232\251\355\225\230\353\235\274_\352\271\200\352\264\221\355\233\210.md" new file mode 100644 index 0000000..cad7add --- /dev/null +++ "b/10\354\236\245/70_\353\263\265\352\265\254\355\225\240_\354\210\230_\354\236\210\353\212\224_\354\203\201\355\231\251\354\227\220\353\212\224_\352\262\200\354\202\254\354\230\210\354\231\270\353\245\274_\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215_\354\230\244\353\245\230\354\227\220\353\212\224_\353\237\260\355\203\200\354\236\204\354\230\210\354\231\270\353\245\274_\354\202\254\354\232\251\355\225\230\353\235\274_\352\271\200\352\264\221\355\233\210.md" @@ -0,0 +1,79 @@ +# Item 70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 +## 1. 핵심 정리 +- 검사 예외: 복구할 수 있는 상황 +- 비검사 예외: 프로그래밍 오류, 혹은 확실하지 않은 케이스 +- throwable: 정의하지도 말자 +- 검사 예외라면 복구에 필요한 정보를 알려주는 메서드도 제공하자 + +
+ +## 2. 검시 예외 (Checked Exception) +- 호출하는 쪽에서 복구하리라 여겨지는 상황이라면 `검사 예외`를 사용하라. + - 복구한다는 의미 ?? + - 호출자가 예외를 마주쳤을 때, 대응한다는 의미 같다. + + +- 호출자가 그 예외를 `catcb` 로 잡아 처리하거나 더 바깥으로 전파하도록 강제하게 된다. + + +- API 설계자는 API 사용자에게 검사 예외를 던져주어 그 상항에서 회복해내라고 요구한 것이다. + + +- 구조 예시 + - Exception 의 자식 클래스 중 RuntimeException 을 제외한 모든 클래스는 CheckedException 이다. + +
+ + + + + +- 코드 예시 + ```java + public class ObjectMapper extends ObjectCodec implements Versioned, Serializable { + // 중략 + + public void writeValue(DataOutput out, Object value) throws IOException { + this._writeValueAndClose(this.createGenerator(out), value); + } + } + ``` + + +
+ +## 3. 비검사 예외 (Unchecked Exception) +- 비검사 예외란 ? + - 일반적으로 프로그램에서 잡을 필요가 없거나 혹은 잡지 말아야 한다. + - 명시적인 예외 처리를 강제하지 않는 특징이 있기 때문에 catch 로 잡거나 throw 로 호출한 메서드로 에외를 던지지 않아도 된다. + - 구조 예시 + +
+ + +- 런타임 에러 + - 프로그래밍 오류를 나타낼 때는 런타임 예외를 사용하자 + - 해당 에러는 대부분 전제조건을 만족하지 못했을 때 발생 + - 전제조건 예시로는 Index 가 있다. + - Index 는 0 to Array.size() - 1 사이에 있어야 한다. 이 전제조건이 위배가 된다면 `ArrayIndexOfBoundsException` 이 발생한다. + +
+ +## 4. 에러 (Error) +- 에러 ??? + - 보통 JVM이 자원 부족, 불변식 깨짐 등 더 이상 수행을 계속할 수 없는 상황을 나타낼 때 사용한다. + - Error 는 시스템 레벨에서 심각한 수준이기 때문에 예측하거나 처리할 수 있는 방법이 없다. + + - 구조 예시 + +
+ + +- 주의 사항 + - Error 는 상속하지 말아야할 뿐 아니라, throw 문으로 직접 던지는 일도 없어야 한다. + +
+ +#### 참고 +- https://www.nextree.co.kr/p3239/ +- https://cheese10yun.github.io/checked-exception/ \ No newline at end of file