예외란 에러가 어떻게 다른지도 생각해보자.
예외(Exception)란 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름을 어긋나는 것을 말한다.
그리고 자바에서 예외는 개발자가 직접 처리할 수 있기 때문에 예외 상황을 미리 예측하여 핸들링할 수 있다.
한편, 에러(Error)는 시스템에 무엇인가 비정상적인 상황이 발생한 경우에 사용된다.
주로 자바 가상머신에서 발생시키는 것이며 예외와 반대로 이를 애플리케이션 코드에서 잡으려고 하면 안 된다.
Checked Exception
UnChecked Exception
RuntimeException
은 Exception 클래스의 서브 클래스
->RuntimeException
과 이를 상속한 클래스를 조금 특별하게 취급
- 기본적으로 Checked Exception은 복구가 가능하다는 메커니즘을 가지고 있다.
예를 들어, 특정 이미지 파일을 찾아서 전송해 주는 함수에서 이미지를 찾지 못했을 경우 기본 이미지를 전송한다는 복구 전략을 가질 수 있다.
=> 정리하자면, 복구가 가능하니 Rollback은 진행하지 않는다는 의미
예외를 처리하는 방법에는 예외 복구, 예외 처리 회피, 예외 전환 방법이 있다
1) 예외 복구 전략이 명확하고 복구가 가능하다?
=> Checked Excetpion을 try-catch로 잡아서 예외를 복구하자
2) 복구가 불가능한 Checked Exception이 발생하면?
=> 더 구체적인 Unchecked Exception을 발생시키고 예외에 대한 메시지를 명확하게 전달하자!
🤪 무책임하게 상위 메서드에 throw로 예외를 던지는 것은 상위 메서드의 책임이 증가하기 때문에 좋지 않은 방법
steady-coding님의 글을 참조하여 작성하였ㅅ브니다.