프로그램이 실행 중 어떤 원인에 의해서 오작동하거나 비정상적으로 종료되는 경우를 에러 또는 오류라고 한다. 이 오류가 발생하는 시점에 따라 '컴파일 에러'와 '런타임 에러'로 구분된다.
'컴파일 에러'는 컴파일 시에 발생하는 에러이고, '런타임 에러'는 프로그램 실행 중에 발생하는 오류이다. 이 외에도 '논리적 에러'도 있는데 컴파일, 실행 다 되지만 의도한바로 실행되지 않는경우를 뜻한다.
컴파일 에러
컴파일 시에 발생하는 에러
런타임 에러
실행 시에 발생하는 에러
논리적 에러
실행은 되지만, 의도와 다르게 동작하는 것
프로그램을 실행하려고 하면 가장먼저 컴파일러가 소스코드를 컴파일한다. 컴파일 도중 오타나 잘못된 구문, 자료형 체크 등의 기본적인 검사를 수행하여 오류가 있는지 알려주고, 오류가 있다면 실행되지 않고 고쳐야 한다. 컴파일러가 실행중에 일어나는 오류까지는 잡을 수 없으므로 실행중에 런타임 에러가 발생할 수 있다. 이를 방지하기 위해서는 실행 도중 발생할 수 있는 모든 경우의 수를 고려하여 이에 대한 대비를 하는 것이 필요하다.
자바에서는 실행 시 발생할 수 있는 프로그램 오류를 '에러(error)'와 '예외(exception)', 두 가지로 구분하였다.
에러(error)
프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외(exception)
프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
에러는 메모리 부족(OutOfMemoryError)나 스택오버플로우(StackOverflowError)와 같이 일단 발생하면 복구할 수 없는 심각한 오류이고, 예외는 발생하더라도 수습될 수 있는 비교적 덜 심각한 것이다.