본문 바로가기
Java

[Java] 예외 클래스

by bkuk 2023. 3. 1.

프로그램에서 오류란?

 

프로그램에서 오류가 발생하는 상황은 두가지이다.

하나는 프로그램 코드 작성 중 실수로 발생하는 컴파일 오류(compile error), 다른 하나는 실행 중인 프로그램이 의도하지 않은 동작을 하거나 프로그램이 중지되는 실행 오류(runtime error)가 있다. 

컴파일 오류는 개발 환경에서 찾을 수 있지만, 실행 오류는 프로그램 실행 중에 발생하기 때문에 예측하기 어려울 뿐더러, 프로그램이 비정상 종료되면서 멈춰 버린다.

실제 서비스를 제공하는 경우 오류가 생기면 서비스가 중지되므로 문제가 심각해지기 때문에 로그(log) 분석을 통해 원인을 찾을 수 있도록 개발 시 고려해야할 사항이다.

 

오류(error)와 예외(exception)

 

실행 오류는 크게 두가지가 있다. JVM(Java Virtual Machine)에서 발생하는 시스템 오류, 다른 하나는 예외이다. 

시스템 오류의 예로는 사용 가능한 동적 메모리가 없는 경우, 스택 메모리의 오버 플로우가 발생한 경우 등을 들 수 있다. 이렇듯 시스템 오류는 프로그램에서 제어할 수 없다.

반면 예외는 프로그램에서 제어할 수 있다. 예를 들어 프로그램에서 파일을 읽어 사용하려는데 파일이 없는 경우, 배열 값을 출력하려는데 배열 요소가 없는 경우 등을 들 수 있다.

아래 그림은 java에서 제공하는 오류에 대한 전체 클래스이다. 오류 클래스는 모두 Throwable 클래스에서 상속 받는다.

 

 

예외 클래스의 종류

 

프로그램에서 처리하는 에외 클래스의 최상위 클래스는 Exception 클래스이다. 아래 계층도에서 IOException 클래스는 입출력에 대한 예외를 처리하고, RuntimeException은 프로그램 실행 중 발생할 수 있는 오류에 대한 예외 처리를 한다.

 

예외를 처리하기 위해서는 try-catch를 사용하여 예외 처리를 한다. 그런데 Exception 하위 클래스 중 RuntimeException은 try-catch문을 사용하여 예외 처리를 하지 않아도 컴파일 오류가 나지 않는다. 예를 들어 RuntimeException 하위 클래스 중 ArithmeticException은 산술 연산 중 발생하는 예외, 즉 '0으로 숫자 나누기'와 같은 경우에 발생하는 예외이다. 

댓글