Java ‐ 예외 처리 메커니즘 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 예외 계층
- 자바는 프로그램 실행 중에 발생할 수 있는 예상치 못한 상황, 즉 예외를 처리하기 위한 메커니즘을 제공한다.
- 자바의 예외 처리는 다음 키워드를 사용한다.
try
catch
finally
throw
throws
- Object : 자바에서 예외 역시 객체이다. 모든 객체 최상위 부모는 Object이므로 예외 최상위 부모 역시 Object이다.
- Throwable : 최상위 예외이다. 하위에 Exception과 Error가 있다.
- Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구가 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해선 안 된다.
- Exception : 체크 예외
- 애플리케이션 로직에서 발생할 수 있는 실질적인 최상위 예외이다.
- Exception과 그 하위 예외는 모두 컴파일러가 체크하는 에외이다. 단, RuntimeException은 예외로 한다.
- RuntimeException : 언체크 예외
- 컴파일러가 체크하지 않는 언체크 예외이다.
- RuntimeException과 그 하위 예외는 모두 언체크 에외이다.
- 체크 예외는 발생한 예외를 개발자가 명시적으로 처리해야 한다. 반면 언체크 예외는 발생한 예외를 명시적으로 처리하지 않아도 된다.
📚 체크 예외와 언체크 예외
-
체크 예외
- 체크 예외를 잡겠다 - try ~ catch문
- 체크 예외를 던지겠다 - throws
- 체크 예외 장점 : 개발자가 실수로 예외를 누락하지 않고 컴파일러를 통해 문제를 잡아줄 수 있다.
- 체크 예외 단점 : 하지만 실제로 개발자가 모든 체크 예외를 전부 다 잡거나 던지도록 해야 하기 때문에 너무 번거로운 일이다. 따라서 언체크 예외 사용을 권장한다.
-
언체크 예외
- RuntimeException과 그 하위 예외는 언체크 예외로 분류된다.
- 언체크 예외는 말 그대로 컴파일러가 예외를 체크하지 않는다.
- 언체크 예외 장점 : 신경쓰고 싶지 않은 언체크 예외를 무시할 수 있다. throws를 생략할 수 있다.
- 언체크 예외 단점 : 개발자가 실수로 예외를 누락할 수 있다.
📚 try-with-resources
- 애플리케이션에서 외부 자원을 사용하는 경우 반드시 외부 자원을 해제해야 한다.
- 따라서 finally 구문을 반드시 사용해야 한다.
- try-with-resources 구문을 사용하고자 한다면
AutoCloseable
인터페이스를 구현해야 한다. - 구현하면 자동으로
close()
메서드가 자동으로 호출된다. - try 블럭 안에 명시된 자원은 try 블럭이 끝나면 자동으로
AutoCloseable
인터페이스의close()
메서드를 자동으로 호출한다.