728x90
예외 계층
Error
- 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외.
- 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다
- 상위 예외를 catch로 잡으면 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안된다.
Exception
- 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다.
- 체크 예외와 언체크예외로 나뉜다.
Check Exception
- 체크 예외는 RuntimeException 클래스를 상속받지 않은 예외 클래스들이다. 체크 예외는 복구 가능성이 있는 예외이므로 반드시 예외를 처리하는 코드를 함께 작성해야 한다.
- 예외를 처리하기 위해서는 catch 문으로 잡거나 throws를 통해 메소드 밖으로 던질 수 있다. 만약 예외를 처리하지 않으면 컴파일 에러가 발생한다.
Uncheck Exception (RuntimeException)
- 컴파일러가 체크 하지 않는 언체크 예외이다.
- 복구 가능성이 없는 예외들이므로 컴파일러가 예외처리를 강제하지 않는다.
- 언체크 예외는 Error와 마찬가지로 에러를 처리하지 않아도 컴파일 에러가 발생하지 않는다. 즉, 런타임 예외는 예상치 못했던 상황에서 발생하는 것이 아니므로 굳이 예외 처리를 강제하지 않는다
예외 기본 규칙
예외를 중간에 잡아서 처리하면 애플리케이션 로직이 정상 흐름으로 동작한다.
예외를 처리하지 못하면 호출한 곳으로 예외를 계속 던지게 된다.
예외의 2가지 규칙
- 예외는 잡아서 처리하거나 던져야한다.
- 예외를 잡거나 던질 때 지정한 예외뿐만 아니라 그 예외의 자식들도 함께 처리된다.
예외를 처리하지 못하고 계속 던지면?
→ 자바 main() 쓰레드의 경우 예외 로그를 출력하면서 시스템이 종료
웹 애플리케이션의 경우 여러 사용자의 요청을 처리하기 때문에 하나의 예외 때문에 시스템이 종료되면 안된다.
WAS가 해당 예외를 받아서 처리하는데, 주로 사용자에게 개발자가 지정한 오류 페이지를 보여준다.
728x90
'언어 > JAVA' 카테고리의 다른 글
[JAVA] EOF 사용법 (0) | 2024.04.10 |
---|---|
Optional 올바르게 사용하자 (0) | 2024.03.30 |
Optional<T> 왜 사용하나 (0) | 2024.03.30 |