Skip to content

checked exception과 unchecked exception의 차이? #3

Open

Description

@jun108059
No description provided.

Activity

  1. lsj8367 commented on Sep 7, 2022

    @lsj8367
    Contributor

    제가 이걸 공부한 개념으로 정리하면
    checked exception은 Exception을 포함하고 RuntimeException을 상속받지 않은 클래스들 입니다.
    unchecked exception은 RuntimeException을 상속한 클래스들입니다.

    checked exception은 throws를 이용하여 던지게 선언하면 반드시 사용하는 곳에서 아무 조치도 하지않으면 컴파일 에러가 발생하고 try~catch나 throws로 더 상위의 메소드에 던지거나 둘중 하나를 무조건 처리 해야합니다.

    반대로 unchecked exception은 throws를 해도 컴파일 에러로 잡히지 않습니다.
    그런데 throws를 해주는건 명시적으로 ~~~한 에러를 던진다. 라는 의미로 가독성을 높이는 것이라고 볼 수 있을것 같습니다.

    spring 에서는 @Transactional의 기본값으로 checked exception이면 rollback을 하지 않고,
    unchecked exception이면 rollback을 수행하는데,

    이는 고정적인 개념이 아니라, 어디까지나 기본값이고 개발자가 원하면 어노테이션 안의 rollbackFor나, noRollbackFor 등을 통해 checked exception을 rollback하게 변경하거나 unchecked exception을 rollback하지 않게 바꿀 수 있습니다.

    로 정리가 됩니다.

    틀린 부분이 많을 것 같은데 지적해주시면 환영입니다. 🙏

  2. gnoyes-mik commented on Sep 7, 2022

    @gnoyes-mik
    Member

    승재님 의견처럼 _spring 에서는 @transactional의 기본값으로 checked exception이면 rollback을 하지 않고,
    unchecked exception이면 rollback을 수행하는데, ~~~_ 에 저도 같은 생각입니다

    관련 정보에 대해서 더 찾아봤었었는데 Spring에서 최초에 @transactional 을 구현할 때 EJB 스펙을 참고해서 만들다 보니 기본값을 저렇게 설정했다고 알고있어요 ㅎㅎ

    또, 추가적으로 CheckedException을 Handling하는 방법에 대해서 개인적인 견해를 덧붙이자면 CheckedException이 발생하는 부분이 있는 경우 최대한 구체적인 UncheckedException을 발생시키는 것이 좋은 방향이라고 생각합니다

    혹시 제가 잘못 알고있는 정보가 있으면 피드백 주시면 감사하겠습니다🙂

  3. youngreal commented on Sep 7, 2022

    @youngreal
    Member

    두분이 설명을 잘해주신것 같아서 저도 이전에 공부했던 트랜잭션 롤백 내용 올려보겠습니다
    Unchecked Exception 롤백 연습코드

    자바의 check exception, uncheck excpeption 왜그렇게 설계된걸까?
    오라클 문서

    설계 의도

    • checked exception은 메서드를 호출하는사람이 메서드가 던질수있는 예외에대해 인식하게끔 하고, 대처(복구)할수있게끔 의도함
    • unchecked exception의 발생원인은 너무나 다양하고 모든메서드에 예외를 추가하면 명확성이 떨어지기때문에 꼭잡지 않아도 되게끔 의도함
    • 문서결론 : 예외를 복구할수있는경우 checked exception, 예외를 복구할수없는경우 unchecked exception을 사용해라
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions