자바 라이브러리는 대부분 API에서 사용하기 좋은 예외를 제공한다.
- 코드 재사용 측면에서 좋다. 예외도 마찬가지.
- 내 API를 다른 사랑미 사용하기 더 쉽다.(이미 익숙한 규약을 따르기 때문)
- 예외 클래스가 적을 수록 메모리 사용량도 줄어든다.
주로 사용하는 예외들
- 가능하다면 더 특수한 예외를 따로 구분해서 사용하라
IllegalArgumentException
- 인수로 부적절한 값을 넘길때 발생하는 예외 ex ) 반복횟수에 음수를 건넨 경우
IllegalStateException
- 대상 객체의 상태가 메서드를 수행하는데 적합하지 않은 경우 ex) 초기화 되지 않은 객체를 사용하여 한 경우
NullPointerException
- Null 값을 허용하지않은 메서드에 null를 건넨 경우
ConcurrentModificationException
- 단일 스레드에서 사용하라고 만든 객체를 여러 스레드에서 동시에 수정하려고 한 경우 ex) Iterator가 동작중인 Collection을 수정하려고 할 때
UnsupportedOpertationException
- 객체차 클라이언트가 요청한 동작을 지원하지 않을 때 ex) list 에서 remove 메서드 호출
List<String> strList = Arrays.asList(new String[] {"A","B","C","D","E"});
strList.removeIf(data -> data.equals("A"));
주의 사항
Exception, RuntimeException, Throwable, Error를 직접 재사용하지 마라
- 추상 클래스라고 생각하라(여러 예외 성격을 포함하는 클래스)
예외는 직렬화 할 수 없다.
예외는 상호배타적이지 않다. 상황에 따라 적절한 예외를 선택하라.
인수값이 무엇이었든 어차피 실패했을 경우 IllegalStateException
인수값이 중요했다면 IllegalArguementException
'JAVA > Effective Java' 카테고리의 다른 글
item 73) 추상화 수준에 맞는 예외를 던지라 (0) | 2021.04.10 |
---|---|
item74) 메서드가 던지는 모든 예외를 문서화해라 (0) | 2021.04.10 |
item 71) 필요 없는 검사 예외 사용은 피하라 (0) | 2021.04.04 |
item 62) 다른 타입이 적절하다면 문자열 사용을 피하라 (0) | 2021.03.27 |
item 61) 박싱된 기본 타입보다 기본 타입을 사용하라 (0) | 2021.03.27 |