[Java] 2. Exception(예외)란?


Exception(예외) 처리와 종류 및 구조



1. 프로그램 오류

프로그램 오류 중에 발생 시점에 따라 컴파일 에러, 런타임 에러논리적 에러로 나눌 수 있는데 프로그래머의 실수로 인한 오류를 논리적 에러이고 컴파일 할때 발생하는 에러를 컴파일 에러, 프로그램 실행 중에 발생하는 에러를 런타임 에러라고 한다.

이 중에 논리적 오류는 프로그래머의 코드오류로 제일 심각한 오류이다.


컴파일에러와 런타임 에러는 해당 포스팅 컴파일에러와 런타임에러 차이 에서 확인이 가능하다.



2. 예외(Exception)

자바에서는 런타임 오류를 에러(Error)예외(Exception)로 2가지로 구분한다.

에러는 메모리 부족(OutOfMemoryError)나 스택오버플로우(StackOverflowError)와 같이 발생하면 프로그램이 복구될 수 없는 심각한 오류를 의미하고
예외는 프로그래머가 예측하여 코드로 막을 수 있는 처리가능한 덜 심각한 오류이다.

예를 들어 메모리가 부족한 경우 프로그래머가 직접 제어할 수 없으므로 이런 경우는 메모리 부족(OutOfMemoryError) 에러가 발생하고 함수 호출이 많아 스택이 쌓일 경우에는 StackOverFlowError가 발생할 수 있습니다.



3. 예외처리의 정의와 목적

예외처리(Exception handling)란? 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이다.


정의 - 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 - 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것



4. 종류

Exception에는 크게 2가지 종류가 있습니다.


RuntimeException(실행예외) - 프로그램 실행시에 발생하는 예외
Exception(일반예외) - 컴파일 시점에 발생하는 예외

컴파일시 예외 검사 대상이 되는 Exception(일반예외)는 예외처리코드(try-catch문)가 강제되고,
반면 프로그램 실행이후 발생하는 RuntimeException(실행예외)는 강제되지 않기에 때문에 프로그래머의 경험에 의해서 예외 처리를 구현한다.


Exception(일반예외) 종류에는 예로 FileNotFoundException, ClassNotFoundException 가 있고, RuntimeException(실행예외) 종류에는 NullPointerException, ClassCastException 이다.



5. Exception 클래스 계층구조

exception_class-s1

위에 계층 구조와 같이 Throwable 클래스 밑으로 Error와 Exception 계층 구조를 이루고 있다.

Exception 에서 RuntimeException은 Unchecked Exception이고, RuntimeException을 제외한 다른 예외클래스들은 Checked Exception으로 분류된다.

Unchecked Exception 과 Checked Exception 에 대한 자세한 설명은 다음 포스팅에 이어서 작성하겠다.