지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 스트림
오류란?
프로그램에서 오류가 발생하는 상황은 두 가지다. 하나는 프로그램 코드 작성 중 실수로 발생하는 컴파일 오류(compile erroe)이고, 다른 하나는 실행 중인 프로그램이 의도하지 않은 동작을 하거나 프로그램이 중지되는 실행 오류(runtime error)이다. 실행 오류 중 프로그램을 잘못 구현하여 의도한 바와 다르게 실행되어 생기는 오류를 버그(bug)라고 한다. 컴파일 오류는 개발 환경에서 대부분 원인을 알 수 있다. 발생한 컴파일 오류를 모두 수정해야 프로그램이 정상적으로 실행되므로, 문법적으로 오류가 있다는 것을 바로 알 수 있다. 하지만 프로그램 실행 중에 발생하는 오류는 예측하기 어려운 경우가 많고, 프로그램이 비정상 종료되며 갑자기 멈춘다. 실행 중에 오류가 생기면 그 상황을 재현하여 테스트해야 하는데. 실제 시스템이나 서비스가 운영 중인 경우에는 이가 쉽지 않아 로그(log) 분석을 통해 원인을 찾을 수 있도록 프로그램을 개발할 때 로그를 정확하게 남기는 것이 중요하다.
오류와 예외
실행 오류는 크게 두 가지가 있는데, 하나는 자바 가상 머신에서 발생하는 시스템 오류(error)이고 다른 하나는 예외(exception)이다. 시스템 오류는 프로그램에저 제어할 수 없지만 '예외'는 프로그램에서 제어할 수 있다. 자바에서 제공하는 오류에 대한 전체 클래스를 간단히 나타내면 아래와 같다.

오류 클래스는 모두 Throwable 클래스에서 상속받는다. Error 클래스의 하위 클래스는 시스템에서 발생하는 오류를 다루며 프로그램에서 제어하지 않는다. Exception 클래스와 그 하위 클래스는 예외를 프로그램에서 제어한다.
예외 클래스의 종류
프로그램에서 처리하는 예외 클래스는 Exception 클래스다. Exception 클래스의 내용을 살펴보면 아래와 같다.
class Exception
java.lang.Object
java.lang.Throwable
java.lang.Exception
아래 그림은 Exception 하위 클래스 중 사용 빈도가 높은 클래스 위주로 계층도를 표현한 것이다.

Exception 클래스 하위에는 이 외에도 많은 클래스가 있다. 계층도에서 IOException 클래스는 입출력에 대한 예외를 처리하고, RuntimeException 클래스는 프로그램 실행 중 발생할 수 있는 오류에 대한 예외를 처리한다.
이클립스 같은 개발 환경에서는 예외가 발생하면 대부분 처리하라는 컴파일 오류 메시지를 띄운다. 그러므로 다음에 배울 try-catch문을 사용해 예외 처리를 해야한다고 한다. 그런데 Exception 하위 클래스 중 RuntimeException은 try-catch문을 사용하여 예외 처리를 하지 않아도 컴파일 오류가 나지 않는다고 한다. 예로 RuntimeException 하위 클래스 중 ArithmeticException은 산술 연산 중 발생할 수 있는 예외, 즉 '0으로 숫자 나누기'와 같은 경우에 발생하는 예외이다. 이러한 컴파일러에 의해 체크되지 않는 예외는 프로그래머가 알아서 처리해야 한다고 한다.
참고 서적 : 자바 프로그래밍 입문 - 박은종
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
JAVA 입문 - 예외 처리 미루기 (0) | 2022.06.11 |
---|---|
JAVA 입문 - 예외 처리하기 (0) | 2022.06.11 |
JAVA 입문 - 스트림 (0) | 2022.06.10 |
JAVA 입문 - 람다식 (0) | 2022.06.09 |
JAVA 입문 - 내부 클래스 (0) | 2022.06.08 |