표준 예외를 재사용한다면 얻는것이 많다. 내가 작성한 API가 다른 사람이 익히고 사용하기 쉬워지고, 많은 프로그래머에게 익숙한 규약을 그대로 따르기 때문이다. 그리고 여러분의 코드 역시 읽기 쉬워진다.
가장 많이 사용되는 예외이다. 호출자가 인수로 부적절한 값을 넘길 때 던지는 예외이다.
사용 예시) 반복 횟수를 지정하는 매개변수에 음수를 건넬 때
대상 객체의 상태가 호출된 메서드를 수행하기에 적합하지 않을 때 주로 사용된다.
사용 예시) 제대로 초기화되지 않은 객체를 사용하려고 할 때
단일 스레드에서 사용하려고 설계한 객체를 여러 스레드가 동시에 수정할 때 던진다.
클라이언트가 요청한 동작을 대상 객체가 지원하지 않을 때 사용된다.
사용 예시) 원소를 넣을수만 있는 List의 구현체에 누군가 remove 메서드를 호출할 때
Exception, RuntimeException, Throwable, Error는 직접 사용하지 말자 이 클래스들은 추상 클래스라고 생각하기를 바란다. 이 예외들은 다른 예외들의 상위 클래스이므로 안정적으로 테스트 하기 어렵다.
상황에 부합한다면 표준 예외를 사용하자, 더 많은 정보를 제공하기를 원한다면 예외를 확장해도 좋지만, 예외는 직렬화 가능하다는 사실을 기억하자