이 있으며,
이때, 지정한 예외의 하위 자식까지 포함
근본적인 차이는;
👉 체크 예외는 일일이 개발자가 잡아줘야 해서 번거롭다는 단점이, 언체크 예외는 반대로 덜 번거롭지만 개발자가 예외를 누락할 수 있다는 단점 존재
<< 예외 사용 전략 >>
SQLException, ConnenctionException과 같이 시스템 레벨에서 올라온 예외는 복구가 불가능하기 때문에 애플리케이션 로직에서 처리할 방법이 없다
의존 관계에 대한 문제:
구체적인 클래스에 의존하여 변경에 대한 파급 효과가 크다
XXX() throws SQLException, ConnenctionException{ ... }
Q. 그러면 그냥 Exception을 throw하는 걸로 퉁치면 안되?
A. 그러면 예외 처리하는 의미가 없다. 중요한 체크 예외를 다 놓칠 수 있음.
(-> 안티 패턴에 해당한다고 함)
XXX() throws Exception{ ... }
> 지양할 것
try{
runSQL();
} catch(SQLException e){
throw new RuntimeSQLException(e);
// -> 이때 본래 exception을 꼭 스택 트레이스에 포함하기!
}