일단, 프로그램에서 발생하는 오류에 대해 구분할 필요가 있습니다.

프로그램을 구현하기 위해 코드 작성 중 발생하는 문법적 오류를 컴파일 에러라고 합니다. 이 컴파일 에러는 개발자 대부분 IDE를 사용하고 있기 때문에 자동으로 탐지가 됩니다.

그리고 실행 중인 프로그램이 의도 하지 않은 동작을 하거나 프로그램이 중지 되는 오류를 런타임 에러라고 합니다. 이 런타임 에러같은 경우는 비정상적으로 종료될 수 있기 때문에 시스템의 심각한 장애를 발생할 수 있습니다.

프로그램의 비정상적인 종료를 방지하고 시스템의 원활한 실행이 되도록 예외 처리를 해줘야 할 필요가 있습니다. 또한 실행 오류가 발생한 경우 오류의 과정을 재현하는 것은 현실적으로 힘들기 때문에 오류가 발생한 경우 log를 남겨서 추후 log 분석을 통해 그 원인을 파악하여 에러를 수정하는 것이 중요합니다.

그래서 예외라는 것은 무엇일까요?
위에서 설명했듯이 실행 시간에 발생할 수 있는 에러를 뜻하며, 개발자들이 처리할 수 있는 에러를 의미합니다.

여기서 시스템 오류는 가상 머신에서 발생하며 프로그래머가 처리 할 수 없는 오류입니다.

예외(Exception)

자바에서는 예외를 하나의 객체로 취급합니다.
즉, 모든 예외는 자료형이 Throwable 클래스 또는 그 서브 클래스들 중에 하나로부터 확장된 클래스의 객체입니다.

Throwable 하위에는 ErrorException 클래스가 서브 클래스로 존재합니다.

일반적으로 Throwable의 서브 클래스인 Exception을 확장하여 새로운 예외 클래스를 만들어서 사용합니다.

Error 클래스는 정상적인 응용 프로그램에서는 수용할 수 없는 심각한 에러를 나타냅니다. 이러한 에러는 개발자들이 처리할 필요가 없고, 애초에 처리될 수도 없는 에러입니다.

반면에, Exception 클래스는 정상적인 응용 프로그램의 실행에서 발생 가능한 예외를 의미하며, 개발자들이 처리할 수 있습니다.

Exception의 서브 클래스에는 입출력 예외 처리에 관한 IOExceptionRuntimeException 등등 존재하며, RuntimeException프로그램이 정상적으로 실행되는 동안 발생할 수 있는 예외로 다음과 같은 예외가 있습니다.

  • ArithmeticException : 정수를 0 으로 나눈 경우 발생합니다.

  • ArrayIndexOutOfBoundsException : 배열의 크기를 넘어선 위치를 참조하려는 경우에 발생합니다.

  • NegativeArraySizeException : 배열의 크기를 음수로 지정하였을 때 발생하는 경우에 발생합니다.

  • NullPointerException : null을 사용하여 객체를 참조할 때 발생하는 예외입니다.

이상으로 자바에서 의미하는 예외에 대해서 간단히 알아봤습니다.

profile
꾸준함으로 성장하는 개발자 지망생

1개의 댓글