[Item 70] 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라
2022. 8. 28. 11:36ㆍJAVA/Effective Java
Throwable
- 자바는 문제 상황을 알리는 타입으로 검사 예외, 런타임 예외, 에러 3가지를 제공
검사 예외 (Checked Exception)
- 호출하는 쪽에서 복구하리라 여겨지는 상황이면 검사 예외를 사용
- 검사 예외를 던지면 호출자가 그 예외를 catch로 처리하거나 더 바깥으로 던지도록 강제하게 된다.
- API 설계자는 API 사용자에게 검사 예외를 던져주어 그 상황에서 회복하라고 요구한 것
- 검사 예외는 Exception 의 하위 클래스 중 RuntimeException을 상속하지 않은 것
- 호출자가 예외 상황에서 벗어나는 데 필요한 정보를 알려주는 메서드를 함께 제공하자.
비검사 예외 (UnChecked Exception)
- 프로그램에서 복구가 불가능하거나 더 실행해봐야 득보다 실이 더 많아 잡을 필요가 없거나 잡지 말아야 한다.
- 명시적인 예외 처리를 강제하지 않는다.
- Exception, RuntimeException, Error을 상속하지 않는 throwable은 만들지 말자. 혼란을 야기한다.
- 뭘 사용할지 모르겠다면 비검사 예외를 사용하는 것이 더 나을 것이다.
(1) 런타임 예외
- 프로그래밍 오류를 나타낼 때는 런타임 예외를 사용(대부분 전제조건 위배 시)
- 구현하는 비검사 throwable은 모두 RuntimeException의 하위 클래스여야함.
(2) 에러
- 에러는 자바 언어 명세가 요구하는 것은 아니지만 업계에 널리 퍼진 규약 ex>JVM 자원이 부족, 불변식이 깨짐
- 시스템 레벨에서 심각하여 예측하거나 처리할 수 있는 방법이 없음
- Error 클래스를 상속해 하위 클래스를 만들지 말아야 하고 throw문으로 던지지도 말자.
핵심정리
- 검사 예외 : 복구할 수 있는 상황
- 런타임 예외 : 프로그래밍 오류
- 확실하지 않은 예외는 비검사 예외를 던지자
- 검사 예외도 런타임 예외도 아닌 throwable은 만들지 말자
- 검사 예외라면 복구에 필요한 정보를 알려주는 메서드도 제공하자
참고자료
이펙티브 자바 3/E - 교보문고
프로그래밍인사이트 | 자바 6 출시 직후 출간된 『이펙티브 자바 2판』 이후로 자바는 커다란 변화를 겪었다. 그래서 졸트상에 빛나는 이 책도 자바 언어와 라이브러리의 최신 기능을 십분 활용
www.kyobobook.co.kr
'JAVA > Effective Java' 카테고리의 다른 글
[Item 72] 표준 예외를 사용하라 (0) | 2022.08.28 |
---|---|
[Item 71] 필요 없는 검사 예외 사용은 피하라 (0) | 2022.08.28 |
[Item 69] 예외는 진짜 예외 상황에만 사용하라 (0) | 2022.08.21 |
[Item 68] 일반적으로 통용되는 명명 규칙을 따르라 (0) | 2022.08.21 |
[Item 67] 최적화는 신중히 하라 (0) | 2022.08.21 |