Java/예외처리
오류와 예외, 예외 클래스(checked, unchecked)
재성스
2023. 9. 14. 11:14
반응형
프로그램 오류
프로그램 실행 중 어떤 원인에 의해서 예기치 않은 결과가 발생하거나 비정상적으로 종료되는 결과를 프로그램 오류 또는 에러라고 표현한다. 프로그램 오류는 크게 아래 3가지로 구분될 수 있다.
종류 | 설명 |
컴파일 에러 | 컴파일 시에 발생하는 에러 |
런타임 에러 | 실행 시에 발생하는 에러 |
논리적 에러 | 실행은 되지만, 프로그래머 의도와 다르게 동작하는 것 |
컴파일의 동작 흐름
자바에서 소스코드를 컴파일하는 과정은 프로그래밍의 기본이다. 컴파일러는 소스코드(.java)를 검사하여 오타, 문법 오류, 자료형 불일치 등의 기본적인 오류를 확인하고 보고해준다. 이를 통해 개발자는 코드를 수정하여 컴파일을 성공적으로 완료할 수 있으며, 성공적인 컴파일 후에는 클래스 파일(.class)이 생성되어, 파일이 실행된다.
그러나 주의할 점은 컴파일 에러가 없다고해서 프로그램 실행환경에서 에러 없이 작동하는 것은 아니다. 컴파일러는 소스코드의 기본적인 사항만 검토할 뿐, 프로그램 실행 중 발생하는 잠재적 오류는 예측할 수 없다. 이러한 에러를 런타임 에러라고 말한다.
런타임 에러는 크게 '에러(error)'와 '예외(exception)'로 나뉜다.
종류 | 설명 |
에러 | 심각한 오류가 발생했을 때를 에러라고 표현한다. 프로그램 코드에 의해 복구할 수 없는 심각한 오류라고도 함. 아래와 같은 경우가 에러에 해당 될 수 있다. - 메모리 부족 (OutOfMemoryError) - 스택오버플로우(StackOverFlowError) |
예외 | 프로그램 코드에 의해 수습될 수 있는 오류라고 표현. (덜 심각한 오류 |
예외 클래스의 계층 구조
자바에서는 프로그램 동작 중 발생할 수 있는 오류(Exception과 Error)를 클래스 파일로 정의 하였다.
*참고* 모든 클래스의 조상은 'Object클래스'이므로 Exception과 Error 클래스 역시 Object 클래스의 자손이다. |
모든 예외의 최고 조상은 Exception클래스이며, 상속계층도를 Exception클래스로부터 도식화하면 아래 그림과 같다.
Exception클래스는 예외 종류와 처리 방법에 따라서, Checked 예외와 UnChecked 예외로 나눌 수 있다.
Checked예외
- 컴파일 시점에 확인되는 예외를 Checked 예외라고 하며, 컴파일러가 해당 예외를 처리하는 코드를 작성하도록 강제한다.
- 주로, 입출력(I/O)작업, 파일 조작, 네트워크 통신과 관련된 작업에서 발생한다.
- RuntimeException을 제외한 모든 Exception 클래스는 Checked 예외이므로, 예외처리가 필수이다.
Unchecked 예외
- Checked와 반대로 컴파일러가 해당 예외 처리하는 것을 강제하지 않는다.
- 즉, 예외처리가 없어도 컴파일이 가능한 것이다.
- 주로 프로그램의 오류나 논리적인 문제, 실행 중의 예측 불가한 상황 등에서 발생한다.
- runtimeException과 그 하위 클래스들은 Unchecked에 해당한다.
반응형