자바 (Java)/요약

Chpt 8. 예외 - 주제 1. 프로그램 오류의 종류

학듄 2023. 11. 1. 12:36
728x90

어떠한 이유로 프로그램이 오동작하거나 종료되기도 한다. 이러한 이유를 바로 프로그램 오류라고 한다. 프로그램 오류에는 다음과 같은 종류가 있다.

 

[그림 1]

 

모든 런타임 에러는 클래스이며 다음과 같은 상속 계층도를 갖는다.

 

[그림 2]

 

[참고 1] 사용자 정의 예외 클래스

 

다음과 같은 방법으로 사용자 정의 예외 클래스를 만들 수도 있다.

 

(1) 상속 받을 예외 클래스를 extends 키워드를 통해 상속 받는다.
(2) 예외 클래스의 생성자 안에 생성자 super를 추가해 예외 메시지를 설정할 수 있게 만든다.

 

참고로 선택적 처리가 가능한 RuntimeException 예외 클래스를 주로 상속 받는다.

 

오류의 분류 기준에는 네 가지가 있다.

 

1.  오류 발생 시점

 

오류 발생 시점에 따라 컴파일 도중에 발생하는 컴파일 에러, 실행 도중에 발생하는 런타임 에러, 그 외 의도와 다르게 동작하는 논리적 에러가 있다. 논리적 에러로는 남은 체력이 음수로 표현되는 예가 있다.

 

  에러 발생 시점 프로그램 실행 가능 여부 비정상 종료
컴파일 에러 컴파일 시 X -
런타임 에러 실행 시 O O
논리적 에러 실행 시 O X (의도와 다르게 동작)

 

[참고 1] 소스코드 (*.java) → 컴파일러가 컴파일  → 클래스 파일 (*.class)

 

[참고 2] 컴파일러는 구문체크, 번역, 최적화(예) int i = 5 + 3  8)와 같은 작업을 한다.

 

2. 오류의 심각성

 

복구할 수 없는 오류를 제외하고 코드 변경으로 막을 수 있는 오류는 사전에 방지해야 하기에 런타임 도중에 발생할 수 있는 오류를 심각성에 따라 에러와 예외로 분류했다.

 

  프로그램 코드 변경으로 수습 가능 여부 심각성
에러 (Error) O 심각
예외 (Exception) X 미약

 

3. 실수의 주체

 

발생하는 원인의 주체가 누구냐에 따라 Exception 클래스와 그 자손들, RuntimeException 클래스와 그 자손들로 나누어진다. 

 

  발생 원인 컴파일러의 예외 체크 여부 예외 처리 필수 여부
Exception 클래스들
= checked 예외
사용자의 실수 O O
RuntimeException 클래스들
= unchecked 예외
프로그래머의 실수 X X

 

RuntimeException 클래스는 프로그래머의 실수이기 때문에 컴파일러가 예외 처리를 강제하지 않는다. 예를 들어  RuntimeException의 예외 처리를 강제하면 IndexOutOfBoundsException이 발생할 수 있는 모든 지점, 배열을 참조할 때 전부 예외처리를 해주어야 한다. 예외 처리에 대해서는 다음 주제를 참고하자.

반응형