Spring/SpringDB

언체크 예외 기본 이해

느리지만 꾸준하게 2022. 6. 22. 17:00
  • RuntimeException 과 그 하위 예외는 언체크 예외로 분류된다.

 

  • 언체크 예외는 말 그대로 컴파일러가 예외를 체크하지 않는다는 뜻이다.

 

  • 언체크 예외는 체크 예외와 기본적으로 동일하다. 차이가 있다면 예외를 던지는 throws 를 선언하지 않고,
    생략할 수 있다. 이 경우 자동으로 예외를 던짐

 

 

 

 

 

 

 

체크 예외 vs 언체크 예외

  • 체크 예외: 예외를 잡아서 처리하지 않으면 항상 throws 에 던지는 예외를 선언해야 한다.

 

  • 언체크 예외: 예외를 잡아서 처리하지 않아도 throws 를 생략할 수 있다.

 

 

 

 

 

 

 

언체크 예외를 잡아서 처리하는 코드

try {
	repository.call();
} catch (MyUncheckedException e) {
	//예외 처리 로직
	log.info("error", e);
}
  • 언체크 예외도 필요한 경우 이렇게 잡아서 처리할 수 있다.

 

 

언체크 예외를 밖으로 던지는 코드 - 생략

public void callThrow() {
	repository.call();
}
  • 언체크 예외는 체크 예외와 다르게 throws 예외 를 선언하지 않아도 된다.

 

  • 말 그대로 컴파일러가 이런 부분을 체크하지 않기 때문에 언체크 예외이다.

 

 

 

 

 

 

 

 

언체크 예외를 밖으로 던지는 코드 - 선언

public void callThrow() throws MyUncheckedException {
	repository.call();
}

 

  • 언체크 예외도 throws 예외 를 선언해도 된다. 물론 생략할 수 있다.

 

  • 언체크 예외는 주로 생략하지만, 중요한 예외의 경우 이렇게 선언해두면 해당 코드를 호출하는 개발자가
    이런 예외가 발생한다는 점을 IDE를 통해 좀 더 편리하게 인지할 수 있다.

 

  • (컴파일 시점에 막을 수 있는 것은
    아니고, IDE를 통해서 인지할 수 있는 정도이다.)

 

 

 

 

언체크 예외 장단점

  • 장점: 신경쓰고 싶지 않은 언체크 예외를 무시할 수 있다. 체크 예외의 경우 처리할 수 없는 예외를 밖으로
    던지려면 항상 throws 예외 를 선언해야 하지만, 언체크 예외는 이 부분을 생략할 수 있다. 
  • 언체크 예외는 개발자가 실수로 예외를 누락할 수 있다. 반면에 체크 예외는 컴파일러를 통해 예외
    누락을 잡아준다.

 

 

 

정리 : 체크 예외와 언체크 예외의 차이는 사실 예외를 처리할 수 없을 때 예외를 밖으로 던지는 부분에 있다. 

이 부분을 필수로 선언해야 하는가 생략할 수 있는가의 차이다.

 

 

 

 

 

 

 

 

<출처 김영한:스프링 DB 1편 - 데이터 접근 핵심 원리>

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard

 

스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의

백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의

www.inflearn.com