복구 가능하다고 믿는다면 검사 예외(checked exception), 아니면 런타임 예외(runtime exception)
확인하기 어렵다면 비검사 예외(unchecked exception) -> why? #71
에러(Error)
보통 JVM이 자원이 부족, 불변식 깨짐 등 더 이상 수행을 계속할 수 없는 상황을 나타낼 때 사용한다.
Error 클래스를 상속해 하위 클래스는 만드는 일은 자제하기 바란다. (업계에 널리 퍼진 규약)
즉, 비검사 예외(unchecked exception)는 모두 RuntimeException의 하위 클래스여야 한다.
Error는 상속도 하지말고 throw문으로 직접 던지는 일도 없어야한다. (AssertionError는 예외)
Exception, RuntionException, Error를 상속하지 않는 throwable을 만들 수도 있지만 절대로 사용하지 말자.
throwable은 정상적인 검사 예외(checked exception)보다 나을게 없으면서 API사용자를 헷갈리게 할 뿐이다.
검사 예외(checked exception)라면 복구에 필요한 정보를 알려주는 메서드를 함께 제공하는 것이 중요하다.
throwable 클랙스는 대부분 오류 메시지 포맷을 상세히 기술하지 않는데, 이는 JVM이나 릴리스에 따라 포맷이 달라질 수 있다는 뜻이다.
75 에서 자세히 다룬다.
핵심 정리
복구할 수 있는 상황이면 검사 예외(checked exception)를, 프로그래밍 오류라면 비검사 예외(unchecked exception)를 던지자.
확실하지 않다면 비검사 예외(unchecked exception)를 던지자.
검사 예외(checked exception)도 아니고 런타임 예외(runtime exception)도 아닌 throwable은 정의하지도 말자.
검사 예외(checked exception)라면 복구에 필요한 정보를 알려주는 메서드도 제공하다.
호출하는 쪽에서 복구라리라 여겨지는 상황이라면 검사 예외(checked exception)를 사용하라.
검사 예외(checked exception)
비검사 예외(unchecked exception)
프로그래밍 오류를 나타낼 때는 런타임 예외(runtime exception)를 사용하자.
에러(Error)
Exception, RuntionException, Error를 상속하지 않는 throwable을 만들 수도 있지만 절대로 사용하지 말자.
검사 예외(checked exception)라면 복구에 필요한 정보를 알려주는 메서드를 함께 제공하는 것이 중요하다.
75 에서 자세히 다룬다.
핵심 정리