상황에 부합한다면 항상 표준 예외를 사용하자
더 많은 정보를 제공하길 원한다면 표준 예외를 확장해도 좋지만, 예외는 직렬화 할 수 있다는 사실을 기억하자
| 예외 | 주요쓰임 |
|---|---|
| IllegalArgumentException | 허용하지 않는 값이 인수로 건네졌을 때(null은 따로 NullPointerException으로 처리) |
| IllegalStateException | args가 무엇이든 객체가 메서드를 수행하기에 적절하지 않은 상태일 때 |
| NullPointerException | null을 허용하지 않는 메서드에 null을 건넸을 때 |
| IndexOutOfBoundsException | 인덱스가 범위를 넘어섰을 때 |
| ConcurrentModificationException | 허용하지 않는 동시 수정이 발견됐을 때 |
| UnSupportedOperationException | 호출한 메서드를 지원하지 않을 때 |
All-in-one Catch
— 항상 try 문 안에서 던져질 수 있는 특정 예외들에 해당하는 것들을 캐치하도록 하는 것이 좋다.
이런 방식은 우리가 각 예외타입별 다른 방식으로 예외를 핸들 할 수 있는 가능성을 제공 한다.
아무런 조치를 취할 수 없다면, RuntimeException 을 통해 변환하는게 좋을 것이다.
public void method() throws Exception {
doSomething();
}public void wrapException(String input) throws MyBusinessException {
try {
// do something
} catch (NumberFormatException e) { // set 'e (Throwable)'
throw new MyBusinessException("A message that describes the error.", e, ErrorCode.INVALID_PORT_CONFIGURATION);
}
}