자바 exception에는 checked exception과 unchecked exception 두 가지가 있다.
checked exception
- 메소드 시그니쳐에서 명시되어 있어야 하고 그 예외를 발생시킬 수 있는 메소드를 호출하는 쪽에서 예외에 대한 처리를 필수적으로 해줘야 한다.(try/catch or throw)
- Exception 클래스를 상속받아 만들면 checked exception이 된다.
unchecked exception
- 메소드 시그니쳐에 명시되어 있을 필요는 없고 그 예외를 발생시킬 수 있는 메소드를 호출하는 쪽에서 예외에 대한 처리를 필수적으로 해줄 필요는 없다.
- RuntimeException 클래스를 상속받아 만들면 unchecked exception이 된다.
- unchecked exception은 메소드 시그니쳐에 명시하지 않아도 throws 될 수 있다고 보면 된다.
그렇다면 어떤 경우 checked를 쓰고 어떤 경우는 unchecked를 써야하는 것일까.
일단 언어적으로 강제화되어 있는 부분은 없고 개발자가 만드는대로 사용은 가능하다.
하지만 예외를 던지는 메소드를 호출하는 쪽에서 예외 상황이 발생할 수 있는 조건을 미리 체크할 수 있다면 unchecked,
그렇지 않다면 checked exception으로 처리하는 것이 기준이 되는 것 같다.
예를 들어서, NumberFormatException은 정수형 데이터를 파싱할 때 발생할 수 있는 unchecked exception인데,
파싱 메소드 호출 전에 데이터를 검사함으로써 예외 발생 가능성을 사전에 알 수 있다.
그리고 메소드 내부에서 예외 발생 조건에 대한 검사를 하고 있다면 이는 checked exception으로 던져야 호출하는 쪽에서 인지가 될 것이다.
반면에, IO 관련 처리를 할 때 많이 처리해줘야 하는 IOException은 사전에 예외 발생 여부도 미리 알기 힘들고,
처리 중에 예측 불가능한 에러가 발생할 가능성도 있다.
이런 경우는 명시적으로 예외 처리를 강제할 수 있도록 checked exception으로 던지도록 하는 것 같다.
절대적인 기준이 있는 것은 아니지만, 어느 정도 이런 기준으로 두 가지 예외 종류를 나누어 사용하면 되는 것 같다.
'개발 > 자바' 카테고리의 다른 글
JSON 스키마 (0) | 2017.06.30 |
---|---|
JSON STREAMING API (0) | 2017.06.30 |
FileLock (0) | 2017.01.11 |
Mybatis 쿼리 파라미터에서 jdbcType (0) | 2016.07.08 |
자바 정규표현식 관련 클래스 (0) | 2016.07.02 |