표준 예외를 사용하라

이진호·2022년 9월 15일
0

Effective Java

목록 보기
9/11
post-thumbnail

Item 72. 표준 예외를 사용하라

표준 예외를 재사용할 때의 장점

  • 다른 프로그래머에게 이미 익숙해진 규약을 사용하기 때문에 다른 사람들이 익히고 사용하기 편해짐.
  • 낮선 예외를 사용하지 않게 되어 읽기 쉬워짐.
  • 예외 클래스 수가 적어지므로 메모리 사용량이 줄고, 클래스를 적재하는 시간도 적어짐.

널리 사용되는 예외들

IllegalArgumentException

  • Item 49
  • 호출자가 인수로 부적절한 값을 넘길 때 던지는 예외.
  • null은 따로 NullPointerException으로 처리

IllegalStateException

  • 객체가 호출된 메서드를 수행하기에 적절하지 않은 상태일 때 던지는 예외.
  • 인수 값이 무엇이었든 어짜피 실패했을 경우엔 IllegalStateException를, 그렇지 않은 경우엔 IllegalArgumentException를 사용.

NullPointerException

  • null을 허용하지 않는 메서드에 null을 건넸을 때 던지는 예외.

IndexOutOfBoundsException

  • 어떤 인덱스의 허용 범위를 넘어섰을 때 던지는 예외.

ConcurrentModificationException

  • 단일 스레드에서 사용하려고 설계한 객체를 여러 스레드가 동시에 수정하려 할 때 던지는 예외.
  • 사실 동시 수정을 확실히 검출할 수 있는 안정된 방법은 없으므로, 이 예외는 문제가 생길 가능성을 알려주는 역할로만 쓰임.

UnsupportedOperationException

  • 클라이언트가 요청한 동작을 대상 객체가 지원하지 않을 때 던지는 예외.
  • 보통은 구현하려는 인터페이스의 메서드 일부를 구현할 수 없을 때 사용.

Exception, RuntimeException, Throwable, Error는 직접 재사용하지 말자.

  • 이 클래스들은 추상 클래스로 취급 권장.
  • 다른 예외들의 상위 클래스, 즉 여러 성격의 예외들을 포괄하는 클래스이므로 안정적으로 테스트 할 수 없다.

상황에 부합한다면 항상 표준 예외를 재사용하자.

  • 이때 API 문서를 참고해 그 예외가 어떤 상황에서 던져지는지 꼭 확인해야 함.
  • 예외의 이름뿐만 아니라 예외가 던져지는 맥락도 부합할 때만 재사용해야 함.
  • 더 많은 정보를 제공하기 원한다면 표준 예외를 확장해도 좋음.
  • 단 예외는 직렬화할 수 있으므로 많은 부담이 될 수 있음.

출처

0개의 댓글