Item 70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라
1. 들어가기
Java에서 문제 상황을 알리는 타입(Throwable)으로 검사 예외, 런타임 예외, 에러가 있습니다.
이번 포스트에서는 검사 예외, 런타임 예외, 에러가 무엇이고 언제 사용해야 하는지 알아보겠습니다.
2. 검사 예외 (Checked Exception)
검사 예외는 코드에서 try-catch 문으로 처리해야 하는 예외입니다.
IOException, SQLException
이 검사 예외는 호출하는 쪽에서 복구하리라 여겨지는 상황에서 사용해야 하는데 달리 말하면 API 설계자는 사용자에게 검사 예외를 던져주어 그 상황을 복구하라는 요구를 하는 것입니다.
그리그 복구를 위하여 필요한 메서드도 함께 제공해야 합니다.
3. 비검사 예외 (Unchecked Exception)
비검사 예외는 RuntimeException를 상속 받은 클래스로 컴파일 때 체크되지 않고 Runtime 시에 발생하는 예외입니다.
NullPointerException, IndexOutOfBoundsException
보통, 프로그래밍 오류를 나타낼 때 사용합니다. 그 예로 배열 인덱스를 벗어나는 경우가 이에 해당됩니다.
4. 에러 (Error)
에러는 Error를 상속 받은 클래스로 JVM 자원 부족, 불변식 깨짐 등 더 이상 프로그램을 수행할 수 없는 경우에 사용합니다.
ThreadDeath, VirtualMachineError
주의해야 할 점은 Error 클래스를 상속해 하위 클래스를 만드는 일은 하지 말아야 합니다.
즉, 우리가 만드는 비검사 Throwable은 모두 RuntimeException의 하위 클래스인 비검사 예외여야 합니다.
5. 검사 예외 VS 비검사 예외
에러는 사용하지 않는다고 생각하면 그럼 검사 예외와 비검사 예외는 언제 사용해야 할까요?
해당 고민은 API 설계자의 판단에 달려있는데 복구 가능하다고 생각하면 검사 예외를, 불가능하다면 비검사 예외를 사용합니다.
확신하기 어렵다면 비검사 예외를 선택하는 편이 낫습니다. (Item 71)
📕 개인 기록용 블로그입니다.
😊 오타나 잘못된 정보가 있을 경우 댓글이나 메일로 말씀해주시면 바로 수정하겠습니다! 😊
댓글남기기