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.
#️⃣ 목차
1️⃣ 예외 계층
Object: 예외도 객체이다. 모든 객체의 최상위 부모는Object이므로 예외의 최상위 부모도Object이다.Throwable: 최상위 예외이다. 하위에Exception과Error가 있다.Error: 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다.catch로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는Throwable예외도 잡으면 안된다.Error예외도 함께 잡을 수 있기 때문이다. 따라서 애플리케이션 로직은Exception부터 필요한 예외로 생각하고 잡으면 된다.Error도 언체크 예외이다.Exception: 체크 예외Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단RuntimeException은 예외로 한다.RuntimeException: 언체크 예외, 런타임 예외RuntimeException과 그 자식 예외는 모두 언체크 예외이다.RuntimeException의 이름을 따라서RuntimeException과 그 하위 언체크 예외를 런타임 예외 라고 많이 부른다.2️⃣ 예외 기본 규칙
예외는 잡아서 처리하거나, 처리할 수 없으면 밖으로 던져야한다.
예외 처리
예외 던짐
예외에 대한 2가지 기본 규칙
Exception을catch로 잡으면 그 하위 예외들도 모두 잡을 수 있다.Exception을throws로 던지면 그 하위 예외들도 모두 던질 수 있다.예외를 처리하지 못하고 계속 던지면 어떻게 될까 ?
main()쓰레드의 경우 예외 로그를 출력하면서 시스템이 종료된다.3️⃣ 체크 예외 기본 이해
Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단RuntimeException은 예외로 한다.체크 예외 전체 코드
Exception을 상속받은 예외는 체크 예외가 된다.
MyCheckedException은Exception을 상속받았기에 체크 예외가 된다.RuntimeException을 상속받으면 언체크 예외가 된다. 자바 언어에서 문법으로 정한 것이다.✅ 예외를 잡아서 처리하는 코드
service.callCatch()에서 예외를 처리했기 때문에 test 메서드까지 예외가 올라오지 않는다.실행 순서
test➡️service.callCatch()➡️repository.call()[예외 발생, 던짐]test➡️service.callCatch()[예외 처리] ➡️repository.call()test[정상 흐름] ➡️service.callCatch()➡️repository.call()repository.call()에서MyUncheckedException예외가 발생하고, 그 예외를Service.callCatch()에서 잡는 것을 확인할 수 있다.실행 결과
catch 는 해당 타입과 그 하위 타입을 모두 잡을 수 있다.
catch에MyCheckedException의 상위 타입인Exception을 적어주어도MyCheckedException을 잡을 수 있다.catch에 예외를 지정하면 해당 예외와 그 하위 타입 예외를 모두 잡아준다.MyCheckedException만 잡고 싶다면catch에MyCheckedException을 적어주어야 한다.✅ 예외를 처리하지 않고, 밖으로 던지는 코드 - 실행 순서
test➡️service.callThrow()➡️repository.call()[예외 발생, 던짐]test➡️service.callThrow()[예외 던짐] ➡️repository.call()test[예외 도착] ➡️service.callThrow()➡️repository.call()체크 예외를 밖으로 던지지 않으면 컴파일 오류 발생한다.
체크 예외를 밖으로 던지는 경우에도 해당 타입과 그 하위 타입을 모두 던질 수 있다.
체크 예외의 장단점
체크 예외는 예외를 잡아서 처리할 수 없을 때, 예외를 밖으로 던지는
throws예외를 필수로 선언해야 한다. 그렇지 않으면 컴파일 오류가 발생한다.4️⃣ 언체크 예외 기본 이해
RuntimeException과 그 하위 예외는 언체크 예외로 분류된다.throws를 선언하지 않고 생략할 수 있다. 이 경우 자동으로 예외를 던진다.체크 예외 vs 언체크 예외
throws에 던지는 예외를 선언해야 한다.throws를 생략할 수 있다.언체크 예외 전체 코드
언체크 예외를 잡아서 처리하는 코드
언체크 예외를 밖으로 던지는 코드에서는 throws 를 생략할 수 있다.
throws예외를 선언해도 된다. 생략도 가능언체크 예외의 장단점
언체크 예외는 예외를 잡아서 처리할 수 없을 때, 예외를 밖으로 던지는
throws예외를 생략할 수 있다.throws를 생략할 수 있기 때문이다.체크 예외와 언체크 예외의 차이는 예외를 처리할 수 없을 때 예외를 밖으로 던지는 부분에 있다. (필수로 선언해야하냐, 생략할 수 있느냐의 차이)
🔗 출처
김영한 - 스프링 DB 1편 - 데이터 접근 핵심 원리
All reactions