Java/예외처리

오류와 예외, 예외 클래스(checked, unchecked)

재성스 2023. 9. 14. 11:14
반응형

프로그램 오류 

프로그램 실행 중 어떤 원인에 의해서 예기치 않은 결과가 발생하거나 비정상적으로 종료되는 결과를 프로그램 오류 또는 에러라고 표현한다. 프로그램 오류는 크게 아래 3가지로 구분될 수 있다.
 

종류 설명
컴파일 에러 컴파일 시에 발생하는 에러 
런타임 에러 실행 시에 발생하는 에러
논리적 에러 실행은 되지만, 프로그래머 의도와 다르게 동작하는 것

 

컴파일의 동작 흐름

자바에서 소스코드를 컴파일하는 과정은 프로그래밍의 기본이다. 컴파일러는 소스코드(.java)를 검사하여 오타, 문법 오류, 자료형 불일치 등의 기본적인 오류를 확인하고 보고해준다. 이를 통해 개발자는 코드를 수정하여 컴파일을 성공적으로 완료할 수 있으며, 성공적인 컴파일 후에는 클래스 파일(.class)이 생성되어, 파일이 실행된다.
 
그러나 주의할 점은 컴파일 에러가 없다고해서 프로그램 실행환경에서 에러 없이 작동하는 것은 아니다. 컴파일러는 소스코드의 기본적인 사항만 검토할 뿐, 프로그램 실행 중 발생하는 잠재적 오류는 예측할 수 없다. 이러한 에러를 런타임 에러라고 말한다.
 
런타임 에러는 크게 '에러(error)'와 '예외(exception)'로 나뉜다.

종류 설명
에러 심각한 오류가 발생했을 때를 에러라고 표현한다. 

프로그램 코드에 의해 복구할 수 없는 심각한 오류라고도 함.

아래와 같은 경우가 에러에 해당 될 수 있다.
    - 메모리 부족 (OutOfMemoryError)
    - 스택오버플로우(StackOverFlowError)
예외 프로그램 코드에 의해 수습될 수 있는 오류라고 표현.
(덜 심각한 오류

예외 클래스의 계층 구조

자바에서는 프로그램 동작 중 발생할 수 있는 오류(Exception과 Error)를 클래스 파일로 정의 하였다. 

*참고* 모든 클래스의 조상은 'Object클래스'이므로 Exception과 Error 클래스 역시 Object 클래스의 자손이다.

예외클래스 계층도

모든 예외의 최고 조상은 Exception클래스이며, 상속계층도를 Exception클래스로부터 도식화하면 아래 그림과 같다.

Exception 클래스의 상속 계층도

Exception클래스는 예외 종류와 처리 방법에 따라서, Checked 예외와 UnChecked 예외로 나눌 수 있다.
 

Checked예외

  • 컴파일 시점에 확인되는 예외를 Checked 예외라고 하며, 컴파일러가 해당 예외를 처리하는 코드를 작성하도록 강제한다.
  • 주로, 입출력(I/O)작업, 파일 조작, 네트워크 통신과 관련된 작업에서 발생한다.
  • RuntimeException을 제외한 모든 Exception 클래스는 Checked 예외이므로, 예외처리가 필수이다.

Unchecked 예외

  • Checked와 반대로 컴파일러가 해당 예외 처리하는 것을 강제하지 않는다.
  • 즉, 예외처리가 없어도 컴파일이 가능한 것이다.
  • 주로 프로그램의 오류나 논리적인 문제, 실행 중의 예측 불가한 상황 등에서 발생한다.
  • runtimeException과 그 하위 클래스들은 Unchecked에 해당한다.
반응형