자바 예외 처리

개발새발log·2022년 8월 3일
0

예외에는

  • Checked exception
  • Unchecked exception (= Runtime exception)

이 있으며,

예외의 기본 규칙은

  • 잡아서 처리하거나
  • 던진다

이때, 지정한 예외의 하위 자식까지 포함

체크 예외 vs. 런타임 예외

근본적인 차이는;

  • 체크 예외는 예외를 잡아서 처리하거나, 던지거나 둘 중 하나를 필수로 선택해야 하지만,
  • 런타임 예외는 throws를 선언하지 않고 생략이 가능하다 (명시할 의무 없음)

👉 체크 예외는 일일이 개발자가 잡아줘야 해서 번거롭다는 단점이, 언체크 예외는 반대로 덜 번거롭지만 개발자가 예외를 누락할 수 있다는 단점 존재

그렇다면 언제 뭘 써야 하는가?

<< 예외 사용 전략 >>

  • 기본적으로 런타임 예외를 사용하고
  • 체크 예외는 비즈니스 로직상 의도적으로 던질 때 사용하자
    ex. 계좌 이체 실패, 로그인 ID/PW 불일치 등

왜 런타임 예외를 기본으로?

  1. SQLException, ConnenctionException과 같이 시스템 레벨에서 올라온 예외는 복구가 불가능하기 때문에 애플리케이션 로직에서 처리할 방법이 없다

  2. 의존 관계에 대한 문제:
    구체적인 클래스에 의존하여 변경에 대한 파급 효과가 크다

XXX() throws SQLException, ConnenctionException{ ... }

Q. 그러면 그냥 Exception을 throw하는 걸로 퉁치면 안되?
A. 그러면 예외 처리하는 의미가 없다. 중요한 체크 예외를 다 놓칠 수 있음.
(-> 안티 패턴에 해당한다고 함)

XXX() throws Exception{ ... }
> 지양할 것

런타임 예외 활용하기

  • 예외 전환
try{
	runSQL();
} catch(SQLException e){
	throw new RuntimeSQLException(e);
    // -> 이때 본래 exception을 꼭 스택 트레이스에 포함하기!
}
  • 런타임 예외를 활용함으로써;
    - 대부분 복구불가능한 예외들을 그냥 둘 수 있으며,
    - 의존 관계에 대한 문제를 해결할 수 있다
profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글