Replies: 1 comment
|
지은님도 빨리하셨네요 ..👍 수고하셨습니다 ㅎㅎㅎ |
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.
예외 계층
스프링이 제공하는 예외 추상화 이해를 위해 자바 기본 예외에 대한 이해가 필요하다.
실무에 필요한 체크 예외와 언체크 예외의 차이와 활용방안에 대해서도 알아보자
예외 계층 그림
Object: 예외도 객체이다. 모든 객체의 최상위 부모는Object이므로 예외의 최상위 부모도Object이다.Throwable: 최상위 예외이다. 하위에Exception과Error가 있다.Error: 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다.catch로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는Throwable예외도 잡으면 안되는데, 앞서 이야기한Error예외도 함께 잡을 수 있기 때문이다. 애플리케이션 로직은 이런 이유로Exception부터 필요한 예외로 생각하고 잡으면 된다.Error도 언체크 예외이다.Exception: 체크 예외Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크예외이다. 단RuntimeException은 예외로 한다.RuntimeException: 언체크 예외, 런타임 예외RuntimeException과 그 자식 예외는 모두 언체크 예외이다.RuntimeException의 이름을 따라서RuntimeException과 그 하위 언체크 예외를 런타임 예외라고 많이 부른다.예외 기본 규칙
예외는 폭탄돌리기와 같다. 잡아서 처리하거나 처리할 수 없다면 밖으로 던져야 한다.

예외에 대해서는 2가지 기본 규칙을 기억하자
Exception을catch로 잡으면 그 하위 예외들도 모두 잡을 수 있다.Exception을throws로 던지면 그 하위 예외들도 모두 던질 수 있다.참고: 예외를 처리하지 못하고 계속 던지면 어떻게 될까
체크 예외 기본 이해
Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단RuntimeException은 예외로 한다.체크 예외 전체 코드
Exception을 상속받은 예외는 체크 예외가 된다.
MyCheckedException는Exception을 상속받았다.Exception을 상속받으면 체크예외가 된다.RuntimeException을 상속받으면 언체크 예외가 된다. 이런 규칙은 자바 언어에서 문법으로 정한 것이다.먼저 예외를 잡아서 처리하는 코드를 실행
service.callCatch()에서 예외를 처리했기 때문에 테스트 메서드까지 예외가 올라오지 않는다.실행 순서를 분석하면
Repository.call()에서MyUncheckedException예외가 발생하고 그 예외를Service.callCatch()에서 잡는 것을 확인할 수 있다.실행결과
log.info(”예외 처리, message ={}”, e.getMessage(), e);체크 예외를 잡아서 처리하는 코드
catch(...)를 사용해서 예외를 잡으면 된다.MyCheckedException예외를 잡아서 처리한다.catch는 해당 타입과 그 하위 타입을 모두 잡을 수 있다.
catch에MyCheckedException의 상위 타입인Exception을 적어주어도MyCheckedException을 잡을 수 있다.catch에 예외를 지정하면 해당 예외와 그 하위 타입 예외르 모두 잡아준다.MyCheckedException만 잡고 싶다면catch에MyCheckedException을 적어주어야 한다.밖으로 던지는 코드를 살펴보자.
service.callThrow()에서 예외를 처리하지 않고 밖으로 던졌기 때문에 예외가 테스트 메서드까지 올라온다.MyCheckedException예외가 던져지면 성공으로 처리한다.실행순서 분석
체크 예외를 밖으로 던지는 코드
method() throws예외를 사용해서 밖으로 던질 예외를 필수로 지정해주어야 한다. 여기서는 MyCheckedException 을 밖으로 던지도록 지정해주었다.체크 예외를 밖으로 던지지 않으면 컴파일 오류 발생
Unhandled exceptioin: hello.jdbc.exception.basic.CheckedTest.MyCheckedException참고로 체크예외를 밖으로 던지는 경우에도 해당 타입과 그 하위 타입을 모두 던질 수 있다.
Unhandled exception: hello.jdbc.exception.basic.CheckedTest.MyCheckedException참고로 체크 예외를 밖으로 던지는 경우에도 해당 타입과 그 하위 타입을 모두 던질 수 있다.
체크 예외의 장단점
체크 예외는 예외를 잡아서 처리할 수 없을때 예외를 밖으로 던지는 throws 예외를 필수로 선언해야 한다. 그렇지 않으면 컴파일 오류가 발생한다. 이것때문에 장점과 단점이 동시에 존재한다.
All reactions