diff --git "a/10\354\236\245/\354\225\204\354\235\264\355\205\234_72/\355\221\234\354\244\200_\354\230\210\354\231\270\353\245\274_\354\202\254\354\232\251\355\225\230\353\235\274.md" "b/10\354\236\245/\354\225\204\354\235\264\355\205\234_72/\355\221\234\354\244\200_\354\230\210\354\231\270\353\245\274_\354\202\254\354\232\251\355\225\230\353\235\274.md" new file mode 100644 index 0000000..944ad79 --- /dev/null +++ "b/10\354\236\245/\354\225\204\354\235\264\355\205\234_72/\355\221\234\354\244\200_\354\230\210\354\231\270\353\245\274_\354\202\254\354\232\251\355\225\230\353\235\274.md" @@ -0,0 +1,54 @@ +# 아이템 72. 표준 예외를 사용하라 + +### 숙련된 프로그래머는 많은 코드를 재사용한다. + +- 예외도 마찬가지로 재사용하면 좋음 +- 표준 예외를 사용하면 다른 사람이 익히고 사용하기 쉬워짐 +- 메모리 사용량이 줄고 클래스를 적재하는 시간도 적게 걸림 + +### 많이 사용하는 표준 예외 + +- `IllegalArgumentException` + - 호출자가 인수로 부적절한 값을 넘김 + - 예) 반복 횟수를 음수로 넘김 +- `IllegalStateException` + - 대상 객체의 상태가 호출된 메서드를 수행하기에 적합하지 않음 + - 예) 초기화되지 않은 객체를 사용하려고 함 +- `NullPointerException` + - null 값을 허용하지 않는 메서드에 null을 건넴 +- `IndexOutOfBoundsException` + - 허용 범위를 넘는 값을 건넴 +- `ConcurrentModificationException` + - 단일 스레드에서 사용하려고 설계한 객체를 여러 스레드가 동시에 수정하려 함 + - 동시 수정을 확실히 검출하기는 힘듦. 이 예외는 경고 역할을 함. +- `UnsupportedOperationException` + - 클라이언트가 요청한 동작을 대상 객체가 지원하지 않을 때 + - 구현하려는 인터페이스의 메서드 일부를 구현할 수 없을 때 + - 예) 원소 추가만 할 수 있는 List의 구현체가 있는데 누군가가 remove 메서드를 호출 + +### ⚠️ 추상 클래스 역할을 하는 표준 예외 + +- `Exception`, `RuntimeException`, `Throwable`, `Error`는 직접 재사용하지 말자 +- 추상 클래스라고 생각하자. + +### 특수 상황에 사용할 수 있는 표준 예외 + +- `ArithmeticException` or `NumberFormatException` + - 예) 유리수나 복소수를 다루는 객체 + +### 기준이 모호해서 어떤 예외를 사용할 지 모르겠어요 🤔 + +- 예외의 주요 쓰임이 상호 배타적이지 않다. +- 예) 덱에서 n장의 카드 뽑기를 요청했는데, 남은 카드 수가 더 적을 때 + - 트레: 인수의 값이 너무 크니까 `IllegalArgumentException`을 써야지! + - 우주: 덱이 카드가 너무 적은 상태니까 `IllegalStateException`을 써야지! +- 일반적으로는 + - 인수 값이 무엇이었든 어차피 실패 → `IllegalStateException` + - 특정 인수 값 때문에 실패 → `IllegalArgumentException` + +# 결론 + +- 상황에 부합한다면 표준 예외를 사용하자. + - 가독성이 좋아지고 성능도 좋아지고 직렬화를 신경쓰지 않아도 된다. + - 단, API 문서를 참고해 어떤 상황에 예외가 던져지는지 파악하고, 맥락이 부합해야 한다. +- 그렇지만 스프링을 사용하는 우리는…?