본문 바로가기

Java

예외 처리(Exception Handling)(1) - 프로그램 오류, 예외 클래스의 계층 구조

1) 프로그램 오류

- 프로그램 오류에는 3가지가 존재합니다.

(1) 컴파일 에러: 컴파일 할 때 발생하는 에러를 의미합니다. 

(2) 런타임 에러: 실행 할 때 발생하는 에러를 의미합니다. 

(3) 논리적 에러: 작성 의도와 다르게 동작하는 에러를 의미합니다. 

 

- 자바 컴파일러는 기본적으로 

   (1) 구문 체크

   (2) 번역

   (3) 최적화

   (4) 생략된 코드 추가(ex) extends Object)와 같은 작업을 합니다. 

 

- 컴파일 타임에는 프로그램의 모든 것을 체크할 수 없고, 기본적인 것만 체크합니다.

  컴파일할 때 문제가 없었다고 해서, 실행에 문제가 없는 것이 아닙니다. 

  실행 중에는 많은 복잡한 일들이 일어나고, 그 때 발생하는 에러를 런타임 에러라고 합니다. 

 

- 논리적 에러는 프로그램이 중단되지는 않지만, 내가 원하는대로 동작하지 않는 것입니다. 

  예를 들어, 재고 관리 프로그램에서 재고의 수가 음수가 되는 것이 논리적 에러입니다. 

 

2) 런타임 에러의 분류 

- 자바에서는 런타임 에러를 2가지로 분류하는데, 하나는 에러(error), 다른 하나는 예외(exception)입니다.

  에러는 심각한 오류를 의미하고, 예외는 다소 미약한 오류를 의미합니다. 

  에러 중 대표적인 것으로는 OOME(Out Of Memory Error)가 있습니다. 

 

 

3) 예외처리의 목적

- 예외처리의 목적은 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것입니다.

 

 

4) 예외 클래스의 계층 구조

- 예외 클래스의 계층 구조를 그림으로 나타내면 다음과 같습니다. 

 - 예외 클래스는 크게 Exception과 Error로 분류됩니다. 

    Exception 클래스도 크게 두 부분으로 나누어집니다.

    아래 그림 중 윗 부분은 Exception 클래스들로서, 주로 사용자의 실수와 같은 외적인 요인에 의해 발생하며,

    아래 부분은 RuntimeException 클래스들로서, 주로 프로그래머의 실수에 의해 발생합니다. 

 

참고

남궁성 자바의 정석