자바의 예외 구조와 예외 처리
목차
- Throwable 의 상속 구조
- 예외(Exception) 와 에러(Error)
- 체크 예외(Checked Exception) 와 언체크 예외(Unchecked Exception)
- 예외 처리 방법
Throwable 의 상속 구조
예외와 에러의 상속 구조에 대한 참고 이미지 출처 : https://programmers.io/blog/java-exceptions-hierarchy-handling-and-throwing-exceptions/
예외와 에러의 최상위 클래스는 Throwable 클래스 입니다.
그 하위로 예외(Exception)와 에러(Error)가 있습니다.
이하 설명에서는 위의 이미지를 참고하여 설명하겠습니다.
예외(Exception) 와 에러(Error)
- 에러(Error) 에러는 개발자가 처리할 수 없고 프로그램을 중단시킬 수있는 심각한 오류입니다.
코드로 해결할 수 없는 수준의 문제이기 때문에 에러는 별도의 처리를 하지 않습니다. - 예외(Exception) 코드에 의해 작성하는 오류입니다.
개발자는 이에 대비하고 적절한 조치를 취할 수 있기 때문에 예외처리를 필요로 합니다.
체크 예외(Checked Exception) 와 언체크 예외(Unchecked Exception)
- 체크 예외(Checked Exception) 컴파일 단계에서 확인하고 예외 처리를 필요로 합니다.
체크 예외는 RuntimeException 을 상속받지 않는 예외입니다.
참고 이미지에서는 파란색으로 되어있는 예외 클래스가 이에 해당합니다. - 언체크 예외(Unchecked Exception) 개발자가 예외 처리를 하지 않아도 되는 예외 입니다.
컴파일 단계에서는 이를 알 수 없고 서비스 실행 중에 발생합니다.
대표적으로 IllegalArgumentException, NullPointerException 등이 있습니다. 개발자가 예측할 수 있다면 적절한 조치를 취하여 문제의 원인을 파악하고 적절한 오류 메세지를 전달하도록 하는 것이 좋습니다.
예외 처리 방법
- 예외 복구
- 예외 회피
- 예외 전환
예외 복구
발생한 예외를 복구해서 프로그램을 정상화 시키는 방법 입니다.
예를 들어 네트워크 연결을 시도해서 실패하면 몇 번 더 시도해보는 것도 이에 해당 합니다.
예외 회피
예외 처리를 자신을 호출한 쪽으로 던지는 방법 입니다.
throws 문으로 선언해서 사용합니다.
예외 회피 방법을 사용하는 메서드를 호출하는 쪽에서는 해당 메서드를 호출할 때 try-catch 를 사용하거나 본인도 throws를 선언하여 예외 회피를 해야합니다.
예외 전환
발생한 예외를 보다 구체적이고 적절한 예외로 전환해서 던지는 방법 입니다.
보다 구체적인 내용을 가지는 커스텀 예외 클래스를 던지는 것도 하나의 방법입니다.
그리고 상위 클래스로 단순화 하여 던지는 것도 하나의 방법입니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.