Java & Spring

Check Exception vs Uncheck Exception

ju_young 2023. 11. 10. 14:32
728x90

 

예외 기본 규칙

1. 예외 처리

 

  • 예외를 처리하기위해 try-catch문을 사용

2. 예외 던짐

예외를 처리하지 않고 계속 던지면 main()의 경우 시스템이 종료되며 웹 애플리케이션의 경우 WAS가 예외를 처리하는데 주로 개발자가 지정한 오류 페이지를 보여준다.

Check Exception

  • 체크 예외인 Exception과 그 하위 예외는 모두 컴파일러가 체크한다.
  • 체크 예외는 잡아서 처리하거나 밖으로 던져야한다. 그렇지 않으면 컴파일 에러가 발생한다.
  • 예외를 처리할 수 없을 경우에는 throws 예외를 필수로 선언해주어야 한다.
  • 장점
    • 개발자가 실수로 예외를 누락하지 않도록 컴파일러를 통해 문제를 잡아준다.
  • 단점
    • 개발자가 모든 체크 예외를 반드시 잡거나 던지도록 처리해야한다.
    • 모든 하위 메소드들에 선언한 throws 예외에서 예외가 변경된다면 모두 수정해야하기 때문에 의존관계에 문제가 발생한다.
  • 언제 사용하면 좋을까?
    • 비지니스 로직상 의도적으로 던지는 예외에만 사용 (e.g. 계좌 이체 실패, 로그인 ID, PW 불일치)

Uncheck Exception

  • RuntimeException과 그 하위 예외는 언체크 예외로 분류되며 컴파일러가 체크하지 않는다.
  • throws를 선언하지 않고 생략할 수 있다. 이때 자동으로 예외를 던진다.
  • 장점
    • 신경쓰고 싶지 않은 언체크 예외를 무시할 수 있다.
    • throws 선언을 생략할 수 있다.
    • 의존관계를 신경쓰지 않아도 된다.
  • 단점
    • 개발자가 실수로 예외를 누락할 수 있다. 따라서 문서화(javadoc)을 잘해야한다.

기본적으로 Uncheck Exception을 사용하거나 Check Exception을 Uncheck Exception으로 변환하여 처리한다. 이로 인해 정확한 의미 전달이 가능하고 문제를 파악하기 쉬워진다. 또한 Uncheck Exception으로 변환할때 기존 예외를 포함해주어야한다.

 

[reference]
https://mangkyu.tistory.com/152

728x90

'Java & Spring' 카테고리의 다른 글

Redis의 SpinLock을 사용한 동기화 문제 해결  (0) 2023.12.28
[JAVA] Singleton Pattern (싱글톤 패턴)  (1) 2023.12.02
[Java] LinkedList  (0) 2023.10.20
[Java] HashMap  (1) 2023.10.19
[Java] Set(집합)의 연산  (0) 2023.10.15