본문 바로가기

JAVA/Effective Java

item 72) 표준 예외를 사용하라.

728x90

자바 라이브러리는 대부분 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