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

Jung Ho Seo·2020년 9월 1일
0

EffectiveJava

목록 보기
26/35
post-thumbnail

Throwable

자바는 문제 상황을 알리는 타입(throwable)으로 검사 예외, 런타임 예외, 에러, 이렇게 세 가지를 제공하는데, 언제 무엇을 사용해야 하는지 헷갈려 하는 프로그래머들이 있다.

검사 예외(Checked Exception)

호출하는 쪽에서 복구하리라 여겨지는 상황이라면 검사 예외를 사용하라

이는 검사 예외와 비검사 예외를 구분하는 기본 규칙이다.

검사 예외는 호출자가 그 예외를 catch로 잡아 처리하거나 더 바깥으로 전파하도록 강제하게 된다. 달리 말하면, API 설계자는 API 사용자에게 검사 예외를 던져주어 그 상황에서 회복해내라고 요구한 것이다. 물론 사용자는 예외를 잡기만 하고 별다른 조취를 취하지 않을 수도 있지만 이는 보통 좋지 않은 생각이다.

비검사 예외(Unchecked Exception)

비검사 throwable은 두 가지로, 바로 런타임 예외와 에러다. 둘 다 동작 측면에서는 다르지 않다. 이 둘은 프로그램에서 잡을 필요가 없거나 혹은 통상적으로는 잡지 말아야 한다. 프로그램에서 비검사 예외나 에러를 던졌다는 것은 복구가 불가능 하거나 더 실행해봐야 득보다는 실이 많다는 뜻이다.

프로그래밍 에러를 나타낼 때는 런타임 예외를 사용하자 런타임 예외의 대부분은 전제조건을 만족하지 못했을 때 발생한다. 전제조건 위배란 단순히 클라이언트가 해당 api의 명세에 기록된 제약을 지키지 못했다는 것이다

복구 가능하다고 믿는다면 검사 예외를, 그렇지 않다면 런타임 예외를 사용하자. 확신하기 어렵다면 아마도 비검사 예외를 선택하는 편이 나을 것이다.

비검사 예외 만들기

Error 클래스를 상속해 하위 클래스를 만드는 일은 자제하기 바란다. 다시 말해 여러분이 구현하는 비검사 throwable은 모두 RuntimeException의 하위 클래스여야 한다

정리

복구할 수 있는 상황이면 검사 예외를, 프로그래밍 오류라면 비검사 예외를 던지자. 확실하지 않다면 비검사 예외를 던지자. 검사 예외도 아니고 런타임 예외도 아닌 throwable은 정의하지도 말자.

profile
책, 글, 개발

0개의 댓글