예외 기본 규칙
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