이펙티브 자바, 쉽게 정리하기 - item 72. 표준 예외를 사용하라
표준 예외를 사용해야 하는 이유
- 표준이기 때문에 다른 개발자가 내 코드에서 예외의 의미를 이해하기 쉬워진다.
- 클래스를 적게 만들어 성능상의 이득도 있다.
- 자바 라이브러리에서 충분한 수의 예외를 제공해줘서 일반적인 경우 표준 예외로 전부 처리가 가능하다.
- 직렬화에도 용이하다.
표준 예외 중 자주 쓰이는 것들
IllegalArgumentException
- 이름 그대로 잘못된 인수를 넘겼을 때 던져주는 예외이다.
- ex) 사람의 나이 설정에 음수를 넘겼을 때
- 관례적으로
null
은NullPointerException
을 이용한다.
- 관례적으로
IllegalStateException
- 객체의 상태가 메서드 수행에 적합하지 않을 때
- 객체 초기화 자체가 제대로 되지 않은채로 메서드를 수행한다면
IllegalStateException
을 던질 수 있다.
NullPointerException
null
을 허용하지 않는 메서드에null
을 건넸을 때
IndexOutOfBoundsException
- 인덱스의 범위를 넘어섰을 때
ConcurrentModificationException
- 허용되지 않는 동시 수정이 발견됐을 때
- 사실 동시 수정을 확실히 검출할 수 있는 안정된 방법은 없어서 이 예외는 문제가 생길 가능성을 알려주는 정도의 역할로 쓰인다.
UnsupportedOperationException
- 지원되지 않는 메서드를 실행하려 할 때
- 보통 인터페이스에서 모든 메서드를 구현할 필요가 없을 때, 지원하지 않는 메서드에서 던진다.
재사용하면 안되는 것들
Exception
,RuntimeException
,Throwable
,Error
는 직접 재사용하지 말자.- 다른 예외들의 상위 클래스라 여러 성격의 예외를 포괄해서 정확히 어떤 예외인지 알기 힘들 때가 있다.
- 표준 예외를 확장한 예외를 만드는 것은 좋다.
- 단, 예외는 직렬화할 수 있으므로 많은 부담이 따를 수 있다. (12장, item 85-90 에서 나온다고 함)
- 필드들이 직렬화될 수 있는지 확인해야 함
serialVersionUID
를 명시적으로 정의해야 함
- 단, 예외는 직렬화할 수 있으므로 많은 부담이 따를 수 있다. (12장, item 85-90 에서 나온다고 함)
표준 예외를 사용할 때의 주의점
- 항상 API 문서를 읽고 정확히 어떠한 상황에서 사용되는 것인지 다시 한번 인지하자.
예외 사용의 어려움
- 예외들이 상호 배타적이지 않다.
- 같은 상황에서 여러가지 예외가 쓰여도 사실 틀린 것은 아니다.
- 상황을 조금이라도 더 명확하게 설명해줄 수 있는 예외를 사용하자.
반응형
'Java > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바, 쉽게 정리하기 - item 71. 필요 없는 검사 예외(checked error) 사용은 피하라 (0) | 2023.06.29 |
---|---|
이펙티브 자바, 쉽게 정리하기 - item 70. 복구할 수 있는 상황에는 검사 예외를 프로그래밍 오류에는 런타임(비검사) 예외를 사용하라 (0) | 2023.06.29 |
이펙티브 자바, 쉽게 정리하기 - item 69. 예외는 진짜 예외 상황에만 사용하라 (0) | 2023.06.28 |
이펙티브 자바, 쉽게 정리하기 - item 68. 일반적으로 통용되는 명명 규칙을 따르라 (0) | 2023.06.28 |
이펙티브 자바, 쉽게 정리하기 - item 67. 최적화는 신중히 하라 (0) | 2023.06.27 |