View

반응형

코드를 재사용하듯 예외도 재사용하는 것이 좋다. 자바 라이브러리는 대부분 API에서 충분한 수의 예외를 제공하고 있다. 그러니 가능한 표준 예외를 재사용하자.

 

표준 예외의 장점

1. 다른 사람이 익히고 사용하기 쉬워진다.

표준 예외를 사용하면 이미 많은 사람들에게 익숙해진 규약을 그대로 따르기 때문에 다른 사람들이 익히고 사용하기 쉬워진다.

 

2. 읽기 쉬워진다.

낯선 예외보다는 익숙한 예외를 사용하므로 읽기 쉬워지고 예외를 빠르게 파악할 수 있다.

 

3. 메모리 사용량과 클래스 적재 시간이 줄어든다.

표준 예외를 사용하면 예외 클래스를 별도로 만들지 않아도 된다. 따라서 메모리 사용량과 클래스 적재 시간이 줄어든다.

 

가장 많이 사용되는 표준 예외

NullPointerException

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

 

IndexOutOfBoundsException

  • 인덱스의 범위를 넘어섰을 때 발생하는 예외

 

IllegalArgumentException

  • 호출자가 부적절한 값을 인수로 넘길 때 던지는 예외
  • 관례상 null이 들어오면 IllegalArgumentException보다는 NullPointerException을 던진다.
  • 시퀀스의 범위를 넘는 값이 들어오면 IllegalArgumentException보다는 IndexOutOfBoundsException을 던진다.

 

IllegalStateException

  • 대상 객체의 상태가 호출된 메서드 수행에 적합하지 않을 때 던지는 예외
  • ex) 초기화되지 않은 객체를 사용하려 할 때

 

ConcurrentModificationException

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

 

UnsupportedOperationException

  • 클라이언트가 호출한 메서드를 지원하지 않을 때 발생하는 예외
  • 대부분 자신이 정의한 메서드를 모두 지원하기 때문에 흔히 쓰이는 예외는 아니다.
  • ex) add만 가능한 List의 구현 객체에 remove 요청을 할 경우 발생

 

다른 상황에 재사용할 수 있는 예외

ArithmeticException

  • 복소수나 유리수를 다루는 객체를 다룰 때 사용할 수 있는 예외
  • ex) 10 / 0과 같은 연산을 수행하려는 경우 발생

 

NumberFormatException

  • 복소수나 유리수를 다루는 객체를 다룰 때 사용할 수 있는 예외
  • ex) Integer 파라미터 자리에 String이 오는 경우 발생

 

예외 재사용 시 주의 사항

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

이 클래스들은 추상 클래스라고 생각해야 한다. 즉, 여러 성격의 예외들을 포괄하고 있기 때문에 안정적으로 테스트할 수 없고 정확한 예외를 넘기기 어렵다.

 

예외의 이름뿐 아니라 예외가 던져지는 맥락이 부합할 때만 예외를 재사용하자.

상황에 부합한다면 항상 표준 예외를 재사용하는 것이 좋다. 다만, 예외 이름과 예외 상황이 부합할 때만 표준 예외를 재사용해야 한다.

 

예외는 직렬화할 수 있다.

예외에서 다 많은 정보를 제공하길 원한다면 표준 예외를 확장해도 좋다. 단, 예외는 직렬화할 수 있다는 점을 고려하자. 직렬화에는 많은 부담이 따르니 나만의 예외가 꼭 필요한지 생각해보자.

반응형
Share Link

인기 글

최신 글

전체 방문자

Today
Yesterday