티스토리 뷰

728x90
반응형

표준 예외를 사용하라


  • 숙련된 프로그래머는 미숙한 프로그래머보다 더 많은 코드를 재사용한다고 합니다. 예외도 마찬가지로 재사용하는 것이 좋으며, 자바 라이브러리는 대부분 API에서 쓰기에 충분한 수의 예외를 제공하고 있습니다.

 

💡표준 예외를 사용하면 얻는 이점

  • 다른 개발자가 익히고 사용하기 쉬워집니다. 개발자 입장에서는 낯선 프로그램이라 할지라도 익숙한 표준 예외를 던져준다면 읽기 쉬울 것입니다. 예컨대 NotFoundMyChildrenException보다는 IllegalStateException이 조금 더 익숙할 것입니다.
  • 예외 클래스 수가 적을수록 메모리 사용량도 줄고 클래스를 적재하는 시간도 적어집니다.

 

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

  • 아래 예제 코드에서는 직접적으로 RuntimeException을 발생시키고 있습니다. 하지만 이는 지양해야하는 방법입니다. 이 클래스는 다른 예외들의 상위 클래스로 여러 성격을 포함하고 있는 포괄적인 클래스이기 때문에 적절한 예외를 알리기 힘듭니다.

 

  • 그렇기 때문에 각 상황에따라 커스텀 Exception을 만들어 적절하게 사용하는 것이 좋을 수 있습니다.

 

💡자주 사용되는 표준 예외

예외 주요 쓰임
IllegalArgumentException 허용하지 않는 값이 인수로 전달되었을 경우 사용(단, null은 NPE로 대체)
IllegalStateException 객체가 메서드를 수행하기 적절하지 않은 상태일 경우 사용
IndexOutOfBoundsException 인덱스의 범위를 넘어섰을 때 사용
ConcurrentModificationException 허용하지 않는 동시 수정이 발생했을 때 사용
UnsupportedOperationException 호출한 메서드를 지원하지 않을 때 사용

 

💡IllegalArgumentException vs IllegalStateException

  • 주요 쓰임이 상호 배타적이지 않은 탓에 종종 재사용할 예외를 선택하기 어려울 때도 있습니다.
  • 예를들어 카드 클래스에서 인수로 건넨 수만큼의 카드를 뽑아 나눠주는 메서드를 제공한다고 했을 경우 남아 있는 카드의 수보다 큰 값을 건네면 어떤 예외를 던져야할까요? 여기서 인수의 값이 카드의 개수보다 크다고 생각한다면 IllegalArgumentException을 던지고 카드 개수가 적다고 생각한다면 IllegalStateException을 던집니다. 즉 어떻게 바라볼것이냐?의 차이로 인해 이러한 문제가 발생하는거 같습니다.
  • 인수 값과 무관하게 실패했을 것이라고 바라본다면 IllegalStateException을 던집니다.
  • 인수 값에 따라 실패 또는 성공했을 것이라고 바라본다면 IllegalArgumentException을 던집니다.

 

 

 

 

 

 

728x90
반응형