Checked Exception과 UnCheckedException

고승원·2022년 12월 14일
0

CS

목록 보기
4/12

자바는 문제를 알리는 throwable 타입으로 세가지를 제공한다.

  1. CheckedException
  2. RuntimeException
  3. Error

Throwable 클래스를 열어보자

요약하자면 throwable 클래스는 자바의 모든 오류와 예외의 슈퍼클래스이다.

JVM 또는 하위클래스의 throw에 의해 던져질 수 있다.

마찬가지로 catch절의 인자는 이 클래스 또는 하위클래스만 될 수 있다.

에러와 RuntimeException의 하위 클래스를 제외한 Exception은 CheckedException으로 간주한다.

정리하면

UnChekcedEception → RuntimeException + Error

CheckedException → 나머지

CheckedException

  • Exception 하위 클래스중 RuntimeException을 제외한 모든 Exception
  • 컴파일러가 예외처리를 확인하기 때문에 반드시 에러를 처리해야 한다 (try/catch, throw)
  • 예외 발생시 트랜잭션을 rollback하지 않는다.

UnCheckedException

  • RumtimeException의 하위 클래스
  • 에러 처리를 강제하지 않는다.
  • 예외 발생시 트랜잭션을 rollback한다.

예외를 적절히 사용하는법

호출하는 쪽에서 복구를 할 것이라 여겨지면 CheckedException을 사용하라.

  • 이것이 CheckedException, UnCheckedException 를 구분하는 기본 규칙이다.
  • CheckedException을 throw 하면 호출자가 catch로 처리하거나 호출자의 호출자에게 throw하도록 강제하기 때문에, CheckedException을 회복하라고 던져주는 것과 같다.
  • 예외를 잡고 별다른 조취를 취하지 않는 것은 좋지 않은 생각이다.

UnCheckedException은 보통 잡을 필요가 없거나, 보통은 잡지 말아야 한다.

  • 프로그램이 UnCheckedException을 던진 것은 복구가 불가능하거나 더 실행해서 좋을것이 없는 경우이다.
  • 프로그래밍 오류를 나타낼때 사용한다.
    • 크기가 4인 배열이 있다면 index는 0~3이어야 하는데, ArrayIndexOutOfBoundsException이 발생했을 경우는 프로그램 입장에서 복구가 가능한지 구분할 수 없다.
    • 따라서 복구 가능성은 개발자의 판단에 달려있다. 복구가 가능하다 생각하면 checkedException을, 그렇지 않다고 생각하면 RuntimeException을 던져주자.

추가적으로 필요없는 CheckedException의 남발을 조심하자.

  • 예외처리를 상세하게 하면 안정성이 높아진다.
  • 예외를 과하게 사용하면 쓰기 불편한 프로그램이 된다.
  • 따라서 catch 또는 상위 메서드로 throw를 통해 문제를 전파하게 한다.
  • try/catch가 부담스러운 상황에는 optional 또는 if else를 적절히 사용하자.

참고


이펙티브 자바

자바 예외 구분: Checked Exception, Unchecked Exception

profile
봄은 영어로 스프링

0개의 댓글