본문 바로가기
Effective Java

[Effective Java] 아이템72 표준 예외를 사용하라

by byeongoo 2021. 8. 22.

■ 표준 예외를 사용하라

표준 예외를 사용하면 다른 개발자들이 익히고 사용하기 쉬워진다는 장점이 있다. 또한 예외 클래스의 수가 적을수록 메모리 사용량도 줄고 클래스를 적재하는 시간도 적게 걸린다.

 

Exception, Throwable, Error, RuntimeException 은 직접 재사용하지 말자. 이 클래스들은 추상 클래스라고 생각하길 바란다. 이 예외들은 다른 예외들의 상위 클래스이므로 안정적으로 테스트할 수 없다.

 

다음 표는 널리 재사용하는 예외들이다.

IllegalArgumentException 허용되지 않는 값이 인수로 건내졌을때(null이면 NullPointException을 사용)
IllegalStateException 객체가 메소드를 수행하기 적합하지 않은 상태일때
NullPointException null을 허용하지 않는 메소드에 null을 건냈을때
IndexOutOfBoundsException 인덱스 범위가 넘어갔을때
ConcurrentModificationException 허용하지 않은 동시 수정기 발견되었을때
UnsupportedOperationException 호출한 메소드를 지원하지 않을때

 

앞의 표에서 정리한 주요 쓰임이 상호 배타적이지 않기 때문에 예외를 선택하기 힘든 경우들이 있다. 예를 들어서 카드덱에 인수로 건넨 수 만큼 카드를 뽑아서 나눠준다고하자. 이 때 덱에 남아있는 카드 수보다 큰 값을 건네면 어떤 예외를 던져야할까? 인수 값이 무엇이든 어차피 실패했을경우는 IllegalStateException 그렇지 않으면 IllegalArgumentException 을 사용한다.