예외 - 체크 예외 vs 언체크 예외

박영준·2023년 6월 17일
0

Java

목록 보기
85/111

체크 예외

1. 정의

class EX {
	public static void main(String[] args) {
    	throw new Exception();
	}
}

  • Exception클래스를 상속받는 예외 클래스들
    (RuntimeException 클래스를 상속받지 않은 예외 클래스들 (대표적으로 IOException, SQLException 등))

  • 복구 가능성이 있는 예외이므로, 반드시 예외를 처리하는 코드를 함께 작성

  • 예외를 처리하기 위해서는 catch 문으로 잡거나 throws를 통해 메소드 밖으로 던질 수 있다.(상위 메소드로 넘김)
    만약 예외를 처리하지 않으면 컴파일조차 되지 않는다.

  • Transaction 기본 롤백 대상 X
    → 롤백 처리를 하려면 추가 처리가 필요

2. 단점

  • 개발자가 실수로 예외 처리를 누락하지 않도록 컴파일러가 도와주긴 하나,
    개발자가 모든 체크 예외를 처리해주어야 하므로 번거로우며, 신경쓰지 않고 싶은 예외까지 처리해야 한다.
  • 실제로 어플리케이션 개발에서 발생하는 예외들은 복구 불가능한 경우 多
    (예시 : SQLExceptoin과 같은 체크 예외를 catch해도, 쿼리를 수정하여 재배포하지 않는 이상 복구 X)
    → 그래서 실제 개발에서는 대부분 언체크 예외를 사용

언체크 예외

1. 정의

class EX {
	public static void main(String[] args) {
    	throw new RuntimeException();
	}
}

  • RuntimeException 클래스를 상속받는 예외 클래스들은 복구 가능성이 없는 예외들이므로,
    컴파일러가 예외 처리를 강제하지 X
    = "언체크 예외"

  • Error 와 마찬가지로, 에러를 처리하지 않아도 컴파일 에러가 발생 X
    → 즉, 런타임 예외는 예상치 못했던 상황에서 발생하는 것이 아니므로, 굳이 예외 처리를 강제하지 X
    → RuntimeException 의 예시 : NullPointerException, IllegalArgumentException 등...

  • Transaction 롤백 대상 O
    → @Transactional 과 rollbackFor 이 기본 옵션으로 들어가 있음

2. 단점

  • 신경쓰지 않고 싶은 언체크 예외들을 모두 생략 가능하나, 컴파일러가 잡아주지 않으므로 개발자가 실수로 예외를 누락 가능성

주의! 체크 예외 vs 언체크 예외

참고: 트랜잭션 (Transaction) - 롤백 처리

profile
개발자로 거듭나기!

0개의 댓글