[Effective Java] 58. 복구 가능 상태에는 checked exception을 사용하고 프로그래밍 오류는 runtime exception을 이용하라

1 분 소요

자바는 크게 Checked Exception과 Unchecked Exception으로 나뉜다. 그리고 Unchecked Exception은 Runtime Exception과 Error로 나뉜다.

  1. Checked Exception
  2. Runtime Exception
  3. Error

언제 어떠한 예외를 사용해야 하는지 명확한 규칙이 있는것은 아니지만 참고할만한 일반적인 규칙은 있다.

1. Checked Exception

Checked Exception를 던지는 메서드를 사용하는 경우 받드시 try-catch문을 사용해야 한다.

Checked Exception은 호출하는 곳에서 복구할 것으로 여겨지는 상황에 대해서 사용한다.
api를 만드는 입장에서 checked exception을 발생시킨다는 것은 상태를 복구할 권한을 client에게 준다는 것이다.

만약 커스텀 Checked Exception을 만들고자 할때는 Exception 을 상속받아 만든다. 그리고 Checked Exception을 만들 경우 사용자측이 복구에 사용할 수 있는 정보를 알 수 있도록 정보 제공 메서드도 같이 만들어 주는 것이 좋다.

2. Unchecked Exception

Unchecked Exception를 던지는 메서드를 사용하는 경우 try-catch문을 사용하지 않아도 된다.

Unchecked Exception은 Runtime Exception과 Error 두가지가 있고 둘다 동작 방식은 같다.

프로그램이 이러한 Exception을 던진다는 것은 복구가 불가능한 상태 또는 복구해봐야 득보다 실이 더 많은 상태라는 것이다.

2.1. Runtime Exception

프로그래밍 오류를 표현할때는 Runtime Exception으로 표현하자.

Runtime 예외란 보통 선행조건을 위반을 나타낸다. 즉, 어떤 메서드를 사용할때 사용자가 메서드 api에 기술된 규약을 지키지 않았다는 것이다.

NullPointException이나 배열 첨자가 넘어갔을때 발생하는 ArrayIndexOutOfBoundsException 등도 이러한 것으로 볼 수 있다.

만약 커스텀 Runtime Exception을 만들고자 할 경우 RuntimeException을 상속받아 만든다.

2.2 Error

자바 명세에 있는것은 아니지만 보통 Error는 JVM에서의 문제가 발생했을때 더 이상 프로그램을 실행할 수 없는 상태임을 말한다.

이 관습이 거의 보편적이라 사용자는 Error를 상속받는 class를 새로 만들지 않는 것이 좋다.

댓글남기기