자바 예외는 기본 문법이지만, 애플리케이션에서 활용하기 위해 한번 더 자세하고 집고 넘어가려고 한다.

최상위 오브젝트에 실질적 예외의 가장 부모인 Throwable(던져~) 가 있다. Error, Exception으로 나누는데,
Error는 메모리 부족이나 시스템 오류와 같이 애플리케이션에선 잡을 수 없는 심각한 오류들이다!
사실 우리는 Exception 오류를 보면 된다. 지금까지 그래왔듯이!
강조하고 싶은 점은 그림처럼 체크예외, 언체크예외(런타임 예외) 로 나뉜다.
어떤 예외 클래스를 만들었는데 그 예외 클래스를 체크예외로 만들고 싶다면 Exception 클래스를 상속받고, 언체크예외로 만들고 싶다면 RuntimeException을 상속받게 하면 된다! → 문법임!
체크예외는 컴파일러가 잡아준다!
언체크예외(런타임 예외)는 컴파일러가 체크하지 않는다!
우리는 이점을 이용해서 예외를 활용해볼거다!!
체크 예외의 장단점
체크 예외는 예외를 잡아서 처리할 수 없을 때, 예외를 밖으로 던지는 “throw 예외”를 필수로 선언해야 한다. 그렇지 않으면 컴파일 오류가 발생한다. 이것 때문에 장단점이 존재하는데,,,,
장점 : 개발자가 실수로 예외를 누락하지 않도록 컴파일러를 통해 문제를 잡아주는 훌륭한 안전 장치이다.
단점 : 하지만 개발자가 모든 체크 예외를 반드시 잡거나 던지도록 처리해야하는 강제성이 생기기 때문에, 너무 번거로운 일이 된다. 크게 신경 쓰고 싶지 않은 예외까지 챙겨줘야 한다. 추가로 의존관계에 따른 예외들도 챙겨줘야 한다는 단점이 있다.
예를 들자면 DB 커넥션 장애는 컨트롤러 밖으로 예외가 던져져서 필터나 인터셉터에서 받아서(RestControllerAdvice) 화면에 “죄송합니다 고객님 서버오류입니다” 를 보여주는 즉 공통으로 처리하는 설계(세부 내용은 에러로그를 남겨서 문자나 슬랙으로 문자가 오게끔 설정을 해놔야함!!)를 해야하는데! 서비스~ 레포지토리~dto~ 등등 많은 곳에서 예외를 던지게끔 설계해야 거기까지 갈 것 이다..! 매우 귀찮은 상황 발생!