[Java] Checked Exception, Unchecked Exception

링딩·2023년 4월 14일
0

Computer Science

목록 보기
30/49




Checked Exception, Unchecked Exception


1. 예외(Exception)란?

예외란 에러가 어떻게 다른지도 생각해보자.

예외(Exception)란 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름을 어긋나는 것을 말한다.
그리고 자바에서 예외는 개발자가 직접 처리할 수 있기 때문에 예외 상황을 미리 예측하여 핸들링할 수 있다.

한편, 에러(Error)는 시스템에 무엇인가 비정상적인 상황이 발생한 경우에 사용된다.
주로 자바 가상머신에서 발생시키는 것이며 예외와 반대로 이를 애플리케이션 코드에서 잡으려고 하면 안 된다.



2. 예외 종류

  • Checked Exception
    • RuntimeException을 상속하지 ❌ 클래스
  • UnChecked Exception
    • RuntimeException을 상속하는 클래스

  • RuntimeException은 Exception 클래스의 서브 클래스
    -> RuntimeException과 이를 상속한 클래스를 조금 특별하게 취급



🔎 Checked Exception vs UnChecked Exception


🤔 Checked Exception이 Rollback되지 않는 이유?

A.

  • 기본적으로 Checked Exception은 복구가 가능하다는 메커니즘을 가지고 있다.
    예를 들어, 특정 이미지 파일을 찾아서 전송해 주는 함수에서 이미지를 찾지 못했을 경우 기본 이미지를 전송한다는 복구 전략을 가질 수 있다.
    => 정리하자면, 복구가 가능하니 Rollback은 진행하지 않는다는 의미



3. 예외 처리

예외를 처리하는 방법에는 예외 복구, 예외 처리 회피, 예외 전환 방법이 있다


📕 예외 복구

  • 예외 상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 방법
  • 예외를 잡아서 일정 시간, 조건만큼 대기하고 다시 재시도를 반복한다.
  • 최대 재시도 횟수를 넘기게 되는 경우 예외를 발생시킨다.

📕 예외처리 회피

  • 예외 처리를 직접 담당하지 않고 호출한 쪽으로 던져 회피하는 방법
  • 그래도 예외 처리의 필요성이 있다면 어느 정도는 처리하고 던지는 것이 좋다.
  • 긴밀하게 역할을 분담하고 있는 관가 아니라면 예외를 그냥 던지는 것은 무책임하다.

📕 예외 전환

  • 예외 회피와 비슷하게 메서드 밖으로 예외를 던지지만, 그냥 던지지 않고 적절한 예외로 전환해서 넘기는 방법
  • 조금 더 명확한 의미로 전달되기 위해 적합한 의미를 가진 예외로 변경한다.
  • 예외 처리를 단순하게 만들기 위해 포장(wrap) 할 수도 있다.

Q. 올바른 예외 처리 방식은 무엇인가요?

1) 예외 복구 전략이 명확하고 복구가 가능하다?
=> Checked Excetpion을 try-catch로 잡아서 예외를 복구하자

2) 복구가 불가능한 Checked Exception이 발생하면?
=> 더 구체적인 Unchecked Exception을 발생시키고 예외에 대한 메시지를 명확하게 전달하자!

🤪 무책임하게 상위 메서드에 throw로 예외를 던지는 것은 상위 메서드의 책임이 증가하기 때문에 좋지 않은 방법



출처

steady-coding님의 글을 참조하여 작성하였ㅅ브니다.

profile
초짜 백엔드 개린이

0개의 댓글