72. 표준 예외를 사용하라

신명철·2022년 4월 27일
0

Effective Java

목록 보기
68/80

표준 예외를 사용해야 하는 이유

자바 라이브러리는 쓰기에 충분한 수의 예외를 제공한다. 표준 예외를 사용하면 얻을 수 있는 가장 큰 이점은 다른 사람이 익히고 사용하기가 쉽다는 점이다. 낯선 예외를 사용하지 않아 읽기 쉽게 된다는 장점도 존재한다. 그리고, 예외 클래스가 적을수록 메모리 사용량이 줄고 클래스를 적재하는 시간도 줄어든다는 장점이 있다.

Exception, RuntimeException, Throwable, Error는 직접 재사용하면 안된다. 이 클래스들은 추상 클래스라고 생각해야 한다. 이 예외들은 다른 예외들의 상위 클래스로, 여러 성격의 예외들을 포괄하는 클래스이므로 안정적으로 테스트할 수 없다.

널리 사용되는 표준 예외

예외주요 쓰임
IllegalArgumentException허용하지 않는 값이 인수로 건네졌을 때 (null은 NPE로 처리)
IllegalStateException객체가 메서드를 수행하기 적절하지 않은 상태일 때
NullPointerExceptionnull을 허용하지 않는 메서드에 null을 건넸을 때
IndexOutOfBoundsException인덱스가 범위를 넘어섰을 때
ConcurrentModificationException허용하지 않는 동시 수정이 발견됐을 때
UnSupportedOperationException호출한 메서드를 지원하지 않을 때

상황에 부합한다면 항상 표준 예외를 재사용하자. 예외의 이름뿐 아니라 예외가 던져지는 맥락도 부합할 때만 재사용한다. 더 많은 정보를 제공하길 원한다면 표준 예외를 확장해도 좋다. 단, 예외는 직렬화할 수 있다는 사실을 기억하자. 직렬화에는 많은 부담이 따르기 때문에 나만의 예외를 새로 만들지 않아야 할 근거로 충분할 수 있기 때문이다.

위 표의 주요 쓰임이 상호 배타적이지 않기 때문에 어떤 것을 사용할 지 선택하기 어려울 때가 있다. 예를 들어서, 카드 덱을 표현하는 객체에서 카드를 뽑아 나눠주는 메서드에 덱에 남아 있는 카드보다 많은 값을 건넸다면 어떤 예외를 던져야 할까? 이런 상황에서의 일반적인 규칙은 이렇다. 인수 값이 무엇이었든 어차피 실패했을 거라면 IllegalStateException을, 그렇지 않으면 IllegalArgumentException을 던지자.

profile
내 머릿속 지우개

0개의 댓글