Replies: 2 comments
|
이건 예전에 제가 정리했던 내용인데 다른분들 참고 하셔도될듯합니다 ㅎㅎ |
0 replies
|
제일 빨리 하셨네요 ㅎㅎ 수고하셨습니당~~ |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
예외 계층
스프링이 제공하는 예외 추상화를 이해하기 위해선, 자바 기본 예외에 대한 이해가 필요함.
체크예외, 언체크 예외에 대해 다시한번 짚어볼텐데, 그 이유는! 복습 + 실무에 필요한 체크 예외 언체크 예외의 차이와 활용 방안에 대해서 알아보자.
자바 예외의 기본이 탄탄해야 그 위에 쌓아 올릴 수 있는것들이 있음.
스프링에서 왜 이런식으로 예외를 다루지? (서비스 계층에서 SQLException 제거 이유 및 방법) + 실무에서 언제 체크, 언체크 예외를 사용할지?
예외도 객체이기 때문에 최상위 부모는 Object
예외의 최상위는 Throwable
Error: 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다. 예외를 처리하기 보단 그냥 둬야함.- Throwable 을 Try catch 로 잡으면 안되는데 Error 를 예외로 잡기 때문. 결국 개발자는 Exception 부터 필요한 예외로 생각하고 잡자.
- 참고로
Error도 언체크 예외이다.Exception: 체크 예외- 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다.
-
Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단RuntimeException은 예 외로 한다.RuntimeException: 언체크 예외, 런타임 예외 (Exception의 모든 자식은 체크 예외이지만, 이 것만 체크 예외임)- 컴파일러가 체크 하지 않는 언체크 예외이다.
-
RuntimeException과 그 자식 예외는 모두 언체크 예외이다.-
RuntimeException의 이름을 따라서RuntimeException과 그 하위 언체크 예외를 런타임 예외라 고 많이 부른다. 여기서도 앞으로는 런타임 예외로 종종 부르겠다.예외 기본 규칙
예외는 폭탄돌리기같다. 잡아서 처리하거나, 처리할수 없으면 밖으로 던저야한다.
예외에 대해서는 2가지 기본 규칙을 기억하자.
Exception을catch로 잡으면 그 하위 예외들도 모두 잡을 수 있다.Exception을throws로 던지면 그 하위 예외들도 모두 던질 수 있다.참고: 예외를 처리하지 못하고 계속 던지면 어떻게 될까?
main()쓰레드의 경우 예외 로그를 출력하면서 시스템이 종료된다.체크 예외 기본 이해
Exception 과 하위 예외는 모두 컴파일러가 체크하는 체크 예외, 단 RuntimeException 은 예외
체크 예외는 잡아서 처리하거나, 밖으로 던지도록 선언 해야함. 안그럼 컴파일 오류 발생.
컴파일러가 체크하는 체크예외란 도대체 뭐지? 에 대해 코드로 설명.
RuntimeException 을 상속받으면 언체크 예외.
예외의 기본 기능 중 오류 메시지 보관 기능 사용함. 생성자를 통해 기능 사용.
예외를 잡아서 처리하는 코드
test -> service.callCatch() -> repository.call()-> 예외 발생!
-> service.callCatch() 예외 처리함. -> test 정상 종료
예외 잡는 코드
catch 에 Exception 을 적어도 잡아줌.
실행 결과
log.info("예외 처리, message={}", e.getMessage(), e);여기서마지막에있는e부 분이다.예외를 밖으로 던지는 경우
servuce.callThrow() 에서 예외를 던졌기 때문에 테스트 메서드까지 예외가 올라온다.
test -> service.callCatch() -> repository.call()-> 예외 발생!
-> service.callCatch() 예외 던짐. -> test 예외 도착
예외를 밖으로 던지는 코드
Unhandled exception: hello.jdbc.exception.basic.CheckedTest.MyCheckedExceptionthrows를 지정해서 예외를 밖으로 던진다는 선언을 필수로 해주어야 한다.던질때도 잡을때와 마찬가지로 Exception 을 던질 수 있음.
체크 예외의 장단점
체크 예외는 예외를 잡아서 처리할 수 없을 때, 예외를 밖으로 던지는
throws 예외를 필수로 선언해야 한다. 그렇지 않으면 컴파일 오류가 발생한다. 이것 때문에 장점과 단점이 동시에 존재한다.나는 신경쓰고싶지 않은 에러 (서비스에서 다룰 수 없는 에러)를 전부 throws 애 적어줘야함.
All reactions