오류는 시스템 레벨에서 발생하는 매우 심각하게 비정상적인 상황 → 개발자가 미리 예측하여 처리할 수 없다
예외는 개발자가 구현한 로직에서 발생하는 비정상적인 상황 → 개발자가 어느 부분에서 발생할지 미리 예측할 수 있기 때문에 처리할 수 있는 예외는 명확히 처리하는 것이 좋다
예외 클래스는 Error 와 Exception 이 있다. 모든 예외 클래스는 Throwable 클래스를 상속받으며, Throwable 클래스는 최상위 Object 클래스를 상속받는다.
Error 는 시스템 수준의 심각한 에러를 말한다. Error 클래스는 개발자가 상속받지도, 잡지도(catch) 말라고 한다.
Exception 클래스는 수많은 자식 클래스를 가지고 있다. 그 중 RuntimeException은 컴파일 성공 후 실행 시간에 발생하는 에러로, 모든 Unchecked Exception은 RE 를 상속받고 있다.
→ 모든 Unchecked Exception은 RE의 하위클래스
그렇다면 Checked Exception과 Unchecked Exception은 무엇일까? 이를 나누는 명확한 기준은 예외를 반드시 처리해야 하느냐? 이다. 예외가 발생할 가능성이 있는 메소드에서 반드시 try/catch 문으로 감싸거나 throw로 던지거나 해서 처리해야 하는 예외가 Checked Exception이다.
반면 Unchecked Exception은 대부분 개발자의 부주의로 발생하는 예외로, 미리 예측하지 못하는 상황에서 발생하는 에러가 아니기 때문에 굳이 로직으로 처리할 필요가 없다.
또한 위 그림을 보면 알 수 있듯, 컴파일 시점에서 발생하는 예외는 Checked Exception, 런타임 시점에서 발생하는 예외는 Unchecked Exception 이다.
'Study' 카테고리의 다른 글
Spring JPA ddl-auto 옵션 정리(주의해야 할 점) (0) | 2023.10.04 |
---|---|
스프링 @Transactional의 동작 원리와 스프링 AOP (0) | 2023.09.18 |
추상 클래스와 인터페이스 (0) | 2023.08.14 |
Java 클래스와 상속 (0) | 2023.08.09 |
자바 코드를 JVM으로 실행하는 과정 (0) | 2023.07.31 |