■ 표준 예외를 사용하라
표준 예외를 사용하면 다른 개발자들이 익히고 사용하기 쉬워진다는 장점이 있다. 또한 예외 클래스의 수가 적을수록 메모리 사용량도 줄고 클래스를 적재하는 시간도 적게 걸린다.
Exception, Throwable, Error, RuntimeException 은 직접 재사용하지 말자. 이 클래스들은 추상 클래스라고 생각하길 바란다. 이 예외들은 다른 예외들의 상위 클래스이므로 안정적으로 테스트할 수 없다.
다음 표는 널리 재사용하는 예외들이다.
IllegalArgumentException | 허용되지 않는 값이 인수로 건내졌을때(null이면 NullPointException을 사용) |
IllegalStateException | 객체가 메소드를 수행하기 적합하지 않은 상태일때 |
NullPointException | null을 허용하지 않는 메소드에 null을 건냈을때 |
IndexOutOfBoundsException | 인덱스 범위가 넘어갔을때 |
ConcurrentModificationException | 허용하지 않은 동시 수정기 발견되었을때 |
UnsupportedOperationException | 호출한 메소드를 지원하지 않을때 |
앞의 표에서 정리한 주요 쓰임이 상호 배타적이지 않기 때문에 예외를 선택하기 힘든 경우들이 있다. 예를 들어서 카드덱에 인수로 건넨 수 만큼 카드를 뽑아서 나눠준다고하자. 이 때 덱에 남아있는 카드 수보다 큰 값을 건네면 어떤 예외를 던져야할까? 인수 값이 무엇이든 어차피 실패했을경우는 IllegalStateException 그렇지 않으면 IllegalArgumentException 을 사용한다.
'Effective Java' 카테고리의 다른 글
[Effective Java] 아이템73 추상화 수준에 맞는 예외를 던지라 (0) | 2021.08.22 |
---|---|
[Effective Java] 아이템71 필요 없는 검사 예외 사용은 피하라 (0) | 2021.08.22 |
[Effective Java] 아이템70 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 (0) | 2021.08.22 |
[Effective Java] 아이템69 예외는 진짜 예외 상황에만 사용하라 (0) | 2021.08.22 |
[Effective Java] 아이템68 일반적으로 통용되는 명명 규칙을 따르라 (0) | 2021.08.01 |