Skip to content

Latest commit

 

History

History
28 lines (17 loc) · 3.05 KB

File metadata and controls

28 lines (17 loc) · 3.05 KB

아이템 72 표준 예외를 사용하라

예외는 재사용하는 것이 좋으며 자바 라이브러리는 대부분 API에서 쓰기에 충분한 수의 예외를 제공한다

표준 예외를 사용하면 이득이 많다 우리의 API가 다른 사람이 익히고 사용하기 쉬워지고, 이미 많은 프로그래머들에게 익숙해진 규약을 그대로 따르고, 예외 클래스 수가 적을수록 메모리 사용량도 줄고 클래스를 적재하는 시간도 적게 걸린다 가장 많이 재사용되는 예외는 IllegalArgumentException이다 호출자가 인수로 부적절한 값을 넘길 때 던지는 예외다 그리고 Exception, RuntimeException, Throwable, Error는 직접 재사용하지 말자 이 클래스들은 추상 클래스이기 때문이다

  • IllegalArgumentException: 허용하지 않는 값이 인수로 건네졌을때 (null은 따로 NPE처리)
  • IllegalStateException: 객체의 상태가 호출된 메서드를 수행하기에 적절하지 않을 때
  • NullPointerException: null 값을 허용하지 않는 메서드에 null을 건냈을 때
  • IndexOutOfBoundsException: 인덱스가 범위를 넘어섰을 때
  • ConcurrentModificationException: 허용하지 않는 동시 수정이 발견되었을 때
  • UnsupportedOperationException: 호출한 메서드를 지원하지 않을 때

이정도가 흔히 재사용되는 예외다

하지만 더 많은 정보를 제공하길 원한다면 표준 예외를 확장해도 좋다, 예외는 직렬화가 가능하다 12장

인수값이 무엇이든 어차피 실패했을 거라면 IlliegalStatueException, 그렇지 않으면 IllegalArgumentException을 던지자

여기까지 책이였고 우리는 표준 예외를 사용하지 않고 커스텀 예외를 사용한다 왜? 커스텀을 해야 프론트가 어떤 예외인지 제대로 알 수 있고 명확성 및 유지보수성이 올라간다 각각의 예외 상황에 대해 별도의 예외 클래스를 만드는 것은 시스템의 오류를 더 명확하게 표현하고, 에러 처리를 더욱 체계적으로 관리할 수 있게 하기 때문이다. 이는 유지보수성을 향상시키는 장점을 제공한다고 생각한다

그렇다면 “예외 클래스 수가 적을수록 메모리 사용량도 줄고 클래스를 적재하는 시간도 적게 걸린다” 이 부분은 어떨까?

클래스 적재: 자바에서 클래스는 처음 사용될 때 메모리에 적재된다 예외 클래스가 많다고 해서 필요 없을 때 모든 클래스가 메모리에 적재되는 것은 아니다. 예외 상황이 발생했을 때만 해당 예외 클래스가 JVM에 로드되므로, 사용되지 않는 예외 클래스가 시스템 성능에 미치는 영향은 미미하다

메모리 사용량: 예외 클래스 자체가 크게 복잡하거나 메모리를 많이 사용하는 구조가 아닌 이상, 각 예외 클래스가 사용하는 메모리 양은 매우 작다. 예외 인스턴스는 일반적으로 발생한 상황을 처리하고 나면 곧바로 가비지 컬렉션의 대상이 된다

고로 그냥 하던대로 하자