dsc-sookmyung / 2023-01-Effective-Java-Study

이펙티브 자바 공부하는 스터디입니다
2 stars 3 forks source link

Item70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 #68

Open Mingadinga opened 1 year ago

Mingadinga commented 1 year ago

복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 던지자. 확실하지 않다면 비검사 예외를 던지자. 검사 예외도 아니고 런타임 예외도 아닌 throwable은 정의하지도 말자. 검사 예외라면 복구에 필요한 정보를 알려주는 메소드도 제공하자.

image

검사 예외 vs 런타임 예외 vs 에러

셋 다 문제 상황을 알리는 타입(throwabe)이다.

Error

Checked Exception

UnChecked Exception

Error vs Checked Exception vs UnChecked Exception

Throwable

Exception, RuntimeException, Error를 상속하지 않는 throwable을 만들 수도 있지만, 이로울 게 없으니 절대 사용하지 말자!!!

검사 예외에는 예외 메서드도 작성하자

예외도 완전한 객체이며, 예외의 메소드는 주로 그 예외를 일으킨 상황에 관한 정보를 코드 형태로 전달하는데 쓰인다. 만약 이런 메서드가 없다면 클라이언트가 직접 예외 스택에서 문자열을 파싱해 오류 원인을 알아야 하는데, throwable의 오류 메시지 포맷은 자바 버전에 따라 쉽게 바뀐다. 따라서 문자열 파싱 방식은 깨지기 쉬우니 예외 메서드를 사용하는 편이 낫다.

특히 검사 예외는 복구할 것을 요구하므로, 클라이언트가 예외 상황에서 벗어나는데 필요한 정보를 알려주는 메서드를 함께 제공하는 것이 중요하다. 예를 들어 카드 잔고가 부족해 검사 예외가 발생했다고 가정하자.(이 상황을 복구 가능하다고 판단했나보다) 그렇다면 이 예외는 잔고가 얼마나 부족한지를 알려주는 메소드를 제공해야한다.