본문 바로가기

Study

Java 예외처리

 

오류는 시스템 레벨에서 발생하는 매우 심각하게 비정상적인 상황 → 개발자가 미리 예측하여 처리할 수 없다

예외는 개발자가 구현한 로직에서 발생하는 비정상적인 상황 → 개발자가 어느 부분에서 발생할지 미리 예측할 수 있기 때문에 처리할 수 있는 예외는 명확히 처리하는 것이 좋다

 

예외 클래스는  Error 와 Exception 이 있다. 모든 예외 클래스는 Throwable 클래스를 상속받으며, Throwable 클래스는 최상위 Object 클래스를 상속받는다. 

Error 는 시스템 수준의 심각한 에러를 말한다. Error 클래스는 개발자가 상속받지도, 잡지도(catch) 말라고 한다.

 

Java의 예외 계층 관계도

 

Exception 클래스는 수많은 자식 클래스를 가지고 있다. 그 중 RuntimeException은 컴파일 성공 후 실행 시간에 발생하는 에러로, 모든 Unchecked Exception은 RE 를 상속받고 있다.

→ 모든 Unchecked Exception은 RE의 하위클래스

 

그렇다면 Checked Exception과 Unchecked Exception은 무엇일까? 이를 나누는 명확한 기준은 예외를 반드시 처리해야 하느냐? 이다. 예외가 발생할 가능성이 있는 메소드에서 반드시 try/catch 문으로 감싸거나 throw로 던지거나 해서 처리해야 하는 예외가 Checked Exception이다. 

반면 Unchecked Exception은 대부분 개발자의 부주의로 발생하는 예외로, 미리 예측하지 못하는 상황에서 발생하는 에러가 아니기 때문에 굳이 로직으로 처리할 필요가 없다. 

또한 위 그림을 보면 알 수 있듯, 컴파일 시점에서 발생하는 예외는 Checked Exception, 런타임 시점에서 발생하는 예외는 Unchecked Exception 이다.