프로그램이 오작동하거나 비정상적 종료가 되는 경우,
이 원인을 에러 또는 오류라고 한다.
컴파일 시에 발생하는 에러
실행 시에 발생하는 에러
실행은 되지만, 의도와 다르게 동작하는 것
자바에서는 프로그램의 실행 도중 발생할 수 있는 모든 경우의 수를 고려하여 발생할 수 있는 프로그램 오류를
'에러(error)'와 '예외(exception)'으로 구분하였다.
프로그램 코드에 의해서 수습될 수 없는 심각한 오류
메모리 부족(OutOfMemoryError)이나 스택오버플로우(StackOverflowError)와 같이 일단 발생하면 심각한 오류다.
프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
발생하더라도 수습될 수 있는 비교적 덜 심각한 오류다.
자바에서는 실행 시 발생할 수 있는 오류(Exception과 Error)를 클래스로 정의하였다.
예외 클래스는 2가지 그룹으로 나눠질 수 있다.
Exception 클래스와 그 자손들
(RuntimeException 클래스와 그 자손들 제외)
= Exception클래스들
RuntimeException 클래스와 그 자손들
= RuntimeException클래스들
사용자들의 실수와 같은 외적인 요인에 의해 발생하는 예외
Exception클래스들은 주로 외부의 영향으로 발생할 수 있는 것들로, 사용자들의 동작에 의해 발생하는 경우가 많다.
예를 들어,
존재하지 않는 파일의 이름 입력(FileNotFoundException),
실수로 클래스의 이름을 잘못 입력(ClassNotFoundException),
입력한 데이터 형식이 잘못된 경우(DataFormatException)에 발생한다.
프로그래머의 실수로 발생하는 예외
RuntimeException클래스들은 주로 프로그래머의 실수에 의해 발생될 수 있는 예외로 자바의 프로그래밍 요소들과 관계가 깊다.
예를 들어,
배열의 범위를 벗어남(ArrayIndexOutOfBoundsException),
값이 null인 참조변수의 멤버를 호출(NullPointerException),
클래스간의 형변환 잘못함(ClassCastException),
정수를 0으로 나누는 경우(ArithmeticException)에 발생한다.