[Exception]checked Exception vs unchecked Exception 본문

우아한테크코스 4기

[Exception]checked Exception vs unchecked Exception

giron 2022. 4. 25. 21:46
728x90

우테코 강의 시간에 차이점에 대해 알아봤었는데 다 까먹고...매번 볼때마다 다시 찾아보는 것 같아서 정리해두려고 한다.🙂

자바에는 크게 두 가지 Exception 종류가 있다.

checked Exception과 unchecked Exception이다.

exception

checked Exception

  • checked Exception은 RuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스들이다.
  • Compile Exception으로도 불리며 반드시 예외 처리를 해줘야 한다.
  • 주로 예외를 활용해서 다른 작업을 할 때 사용된다.
  • 예시로 IOException, SQLException이 있다.
  • 예외 발생시 트랜잭션이 롤백 해주지 않는다.

 

unchecked Exception

  • RuntimeException의 하위 클래스들이다.
  • checked Exception과 달리 반드시 예외 처리를 해주지 않아도 된다.
  • 예외를 통한 기댓값이 없다.
  • 예시로 NullPointException, IllegalArgumentException이 있다.

그렇다면 무엇을 사용해야 할까?

Checked Exception을 처리하기 위해서는 throws를 이용해서 호출받는 메서드에서 호출하는 메서드로 예외를 던진다고 정리할 수 있다. 이 "던짐"은 해당 예외를 처리할 수 있는 메서드까지 던져지게 될 것이다. 그렇다면 내부의 예외가 외부로 알려지면서 캡슐화가 깨질수도 있다. 또한 이런 무분별한 throws의 활용은 코드의 가독성을 떨어트림과 더불어 어떤 메서드의 어떤 부분에서 예외가 발생했는지 알기 어렵게 만드는 주원인이 된다.

 

따라서 checked Exception을 잡아 아래와 같이 unchecked Exception으로 변환해주는 작업을 해주면 좋다.

 public static String exception(File file) {
        String filePath = file.getPath();
        try {
            if (filePath.isEmpty()) {
                throw new Exception();
            }
        } catch (Exception e) {
            throw new IllegalStateException("경로가 비어있습니다");
        }

        return filePath;
    }

또한 트랜잭션의 롤백을 checked Exception까지 적용하기 위해서는 @Transcational(rollbackFor = Exception.class) 와 같이 설정해줘야한다. checked Exception은 예상된 예외이며, unchecked Exception은 예상치 못한 예외이기 때문이다.

Reference

https://devlog-wjdrbs96.tistory.com/351

 

[Java] Checked Exception vs Unchecked Exception 정리

체크 예외와 언체크 예외(Checked, Unchecked Exception) 자바의 예외는 크게 3가지로 나눌 수 있습니다. 체크 예외(Checked Exception) 에러(Error) 언체크 예외(Unchecked Exception) 자바에서 에러 , 예외 관련..

devlog-wjdrbs96.tistory.com

https://velog.io/@kdhyo/JavaTransactional-Annotation-%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-26her30h

 

[Java]@Transactional Annotation 알고 쓰자

초반 @Transactional 어노테이션에 대해 자세히 알아보지 않고,막연히 롤백때 사용한다고 하여 SQL C,U,D 를 할 때마다 메소드 위에 붙여서 사용하곤 하였다.하지만, 내 코드를 보신 선임께서 단지 @Tran

velog.io

https://toneyparky.tistory.com/40

728x90

'우아한테크코스 4기' 카테고리의 다른 글

리눅스 명령어와 권한 설정 chmod  (0) 2022.06.01
Junit5 테스트 동작 방식과 빈 주입  (0) 2022.05.10
우테코 Lv1 강의 정리  (0) 2022.04.12
우아한 한 달 생활기  (0) 2022.03.28
[git] cherry-pick  (0) 2022.03.02
Comments