티스토리 뷰
개요
최근 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
- java-projects/exception at master · lurutia/java-projects (github.com)
- Java Checked vs Unchecked Exceptions - HowToDoInJava
- Spring 선언적 트랜잭션과 checked exception - 머루의개발블로그 (wonwoo.ml)
- Spring Transaction Exception 상황에서 Rollback 처리하기 (tistory.com)
- Checked vs Unchecked Exceptions in Java - GeeksforGeeks
- Checked Exception을 대하는 자세 - Yun Blog | 기술 블로그 (cheese10yun.github.io)
'프로그래밍 언어 > Java Programming' 카테고리의 다른 글
자바 프로그래밍 Next Step 3장 (0) | 2021.03.17 |
---|---|
자바 프로그래밍 Next Step 2장 (0) | 2021.03.17 |
객체지향 프로그래밍 OOP 5대원칙 SOLID (0) | 2021.02.25 |
파일 확장자 또는 파일명만 추출하기 (0) | 2020.06.05 |
JDBC객체 및 DB 연결 (0) | 2016.12.24 |