표준 예외를 사용해야 하는 이유
- 내가 작성한 코드가 다른 사람이 익히고 사용하기 쉬운 코드가 된다.
- 예외 클래스 수가 적을수록 메모리 사용량도 줄고 클래스를 적재하는 시간도 적게 걸린다.
자주 사용되는 표준 예외
- IllegalArgumentException
- 호출자가 인수로 부적절한 값을 넘길 때 사용한다.
- e.g ) 반복 횟수를 지정하는 매개변수에 음수를 건내는 경우
- IllegalStateException
- 대상 객체의 상태가 호출된 메서드를 수행하기에 적합하지 않을 때 사용한다.
- e.g ) 제대로 초기화되지 않은 객체를 사용하려고 하는 경우
메서드가 던지는 모든 예외를 잘못된 인수나 상태라고 뭉뚱그릴 수도 있겠지만, 특수한 경우에는 더 구체적인 예외를 사용하는 것이 좋다.
- NullPointException
- null 값을 허용하지 않는 메서드에 null을 보내는 경우
- IllegalArgumentException, IndexOutOfBoundsException
- 어떤 시퀸스의 허용 범위를 넘는 값을 건네는 경우
- ConcurrentModificationException
- 단일 스레드에서 사용하려고 설계한 객체를 여러 스레드가 동시에 수정하려 할 때 던진다.
- UnsupportedOperationException
- 구현하려는 인터페이스의 메서드 일부를 구현할 수 없는 경우
- 원소를 넣을 수만 있는 List구현체에 누군가 remove 메서드를 호출하는 경우
Exception, RuntimeException, Throwable, Error는 직접 재사용하지 말자.
이 클래스들은 추상 클래스라고 생각하는게 좋다. 다른 예외들의 상위 클래스이므로, 여러 성격의 예외들을 포괄하고 있어 안정적으로 테스트하기 어렵다. 더 많은 예외를 제공하고 싶다면 표준 예외를 확장해도 좋다. 단, 예외는 직렬화할 수 있다는 사실을 기억하자. 이 사실만으로 나만의 예외를 만들지 않아야 할 충분한 근거가 된다.