본문 바로가기

프로그래밍 언어 (プログラミング言語)/JAVA

체크 예외 vs 언체크 예외(런타임 예외)

체크 예외 vs 언체크 예외
차이점 : 언체크 예외를 던질 때, throws 선언을 하지 않는다.



체크 예외의 문제점

1. 체크 예외를 던질 떄마다 throws를 선언해줘야 한다.
-> 체크 예외를 던지는 메서드가 100개가 있으면 100개 전부 throws를 선언해줘야 한다.

2. OCP위반.
-> 예를 들어, 서비스 계층에서 SQLException을 사용하고 있는데, 이 예외는 JDBC 기술에 외존한다. 

만약 JDBC를 사용하다가 JPA로 기술을 변경을 하면, 서비스 계층의SQLExcpeiton을 전~부 일일이 JPAExcpetion으로 변경을 해 줘야 한다. 

즉, 수정에는 closed되어 있지가 않다.  

3. 거의 대부분의 시스템에서 발생하는 예외(DB 서버 연결 등)는 애플리케이션 로직(서비스 계층, 컨트롤러 계층 등)에서 처리할 수가 없는 예외이다.
-> 고로, 결국에는 서블릿까지 예외가 전달이 되게 된다. 
이때, 체크 예외를 throws 선언까지 일일이 선언하며 게다가 OCP까지 위반하며 사용할 이유가 없다. 

4. 어떤 메서드에거 체크 예외가 터지게 되면, 그 메서드를 호출한 곳에서도 전부 Throws를 선언해줘야 하는 귀찮음이 있다.
(그러나, 개발자들이 실수로 예외처리(try-catch, throw)하지 않는 실수를 방지를 할 수가 있다.)

 

결론 : 체크 예외이든 언체크 예외이든 시스템에서 발생하는 예외는 애플리케이션 로직에서 처리하기 보다는, 언체크 예외를 주로 사용하여(정확히는 체크 예외를 런타임 예외로 변환시켜서) 개발자에게 예외가 터졌음을 알려서 개발자가 빨리 대응하게 만드는 것이 정석이다.