티스토리 뷰

개요

최근 Checked Exception과 Runtime Exception의 차이에 대해서 질문을 받았는데 구체적인 차이를 모르고 있었다가 조사를 해보니 Rollback 전략에 대해서 큰 차이가 있어서 생각보다 신중한 전략이 필요했는데 알지 못했다는 점이 스스로도 아쉬웠습니다.

JAVA에는 두가지 유형의 예외가 있습니다. Checked Exception과 Unchecked Exception 둘의 차이를 표로 비교해보면 아래와 같습니다.

  Checked exception Unchecked Exception
정의 Exception을 상속받은 클래스중 Runtime Exception을 제외한 모든 Exception Runtime Exception 하위 Exception
발생 이유 주로 외부의 영향으로 발생 주로 프로그래머의 실수로 발생
처리 여부 반드시 예외 처리 필요 예외처리 하지 않아도 됨
확인시점 Compile 시점에 에러 확인 Runtime 중
트랜잭션 처리 Rollback 되지 않음 Rollback 처리됨

 

Exception을 처리하는 방법

Checked Exception

컴파일 단계에서 에러가 확인되기 때문에 개발자가 throws 나 try-catch 를 사용하여 에러에 대한 처리를 해주어야 합니다. throws나 try-catch를 강제하는 이유는 에러가 발생했을 때 복구전략을 세워 해결할수 있는 경우가 많기 때문입니다.

(IOException, FileNotFoundException, SQLException 등)

 

Unchecked Exception

반대로 Unchecked Exception은 에러에 대해서 throws나 try-catch를 강제하지 않습니다.

(NullPointerException, IllegalArgumentException 등)

 

 

Rollback되지 않는 Checked Exception

Checked Exception이 발생했을때 적절한 복구전략을 가지고 있어서 해당 Exception에 대한 try-catch와 같은 직접처리를 하고 나머지 코드는 정상적으로 실행되기를 원할수도 있다. (그 즉시 Exception이 던져져 코드가 중단되도 commit이 되는걸 원할 수도 있지만) 하지만 만약 그렇지 않다면 명확하게 unchecked exception을 발생시켜 rollback을 해주고 사용자에게 명확한 문제점을 알려주는것이 내가 생각할때는 좋은 전략인것같다.

 

SQLException

위에서 SQLException은 Checked Exception이지만 실제로 spring에서는 SQLException이 발생했을때는 복구가능한 전략을 세울수 없는경우가 많다고 생각했는지 unchecked exception으로 포장해서 throw해준다.

 

reference

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함