Exception

ymk·2023년 6월 11일
0
post-thumbnail

🚫 예외처리 (Exception Handling)

프로그램이 실행 중일때 오작동을 하거나 비정상적으로 종료되는 경우가 있는데, 이때 원인을 에러 또는 오류라고 한다. 오류가 발생하는 시점에 따라 컴파일 에러(compile-time error)런타임 에러(runtime error) 로 나누어 진다. 말 그대로 컴파일 에러는 캄파일 할 때 발생한 에러이며, 런타임 에러는 프로그램의 실행 도중에 발생한 에러를 말한다. 이외에도 논리적 에러(logical error) 도 있는데, 이것은 컴파일과 실행은 잘 되지만 의도한 것과 다르게 동작하는 것을 말한다. 예를 들어 코딩 테스트를 칠 때 실행은 되지만 문제의 설명과는 다른 output이 나온 것과 같다.

  • 컴파일 에러 - 컴파일 시에 발생하는 에러
  • 런타임 에러 - 실행 시에 발생하는 에러
  • 논리적 에러 - 실행은 되지만, 의도와 다르게 동작하는 것

컴파일 에러는 컴파일러가 모두 걸러주며, 자바에서는 실행 시(runtime) 발생할 수 있는 프로그램 오류를 에러(error)예외(exception), 두 가지로 구분한다.

에러는 메모리 부족(OutOfMemoryError)이나 스택오버플로우(StackOverFlowError)와 같이 한번 발생하면 복구할 수 없고 프로그램을 종료해야하는 심각한 오류다.

예외는 발생하더라도 수습될 수 있는 비교적 덜 심각한 것이다. 즉 프로그래머가 이에 대한 적절한 코드를 미리 잘 작성해 놓으면 프로그램이 비정상적으로 종료하는 것을 막을 수 있다.

런타임 에러 (Runtime error)

  • 에러(Error)- 컴파일 시에 발생하는 에러
  • 예외(Exception) - 실행 시에 발생하는 에러

🔎 예외 클래스의 계층구조

자바에서는 오류(Exception과 Error)를 클래스로 정의하였다. 모든 클래스의 조상은 Object 클래스이므로 Exception과 Error 클래스도 역시 Object 클래스의 자손들이다.

📌 예외클래스 계층도

📌 Exception 클래스와 RuntimeException 클래스 중심의 상속계층도

위 그림을 보면 Exception 클래스는 다음과 같이 두 그룹으로 나누어 진다.
1. Exception 클래스와 그 자손들
2. RuntimeException 클래스와 그 자손들

Exception 클래스들(RuntimeException 제외)은 주로 외부의 영향으로 발생할 수 있는 것들로서, 프로그램의 사용자들의 동작에 의해서 발생하는 경우가 많다. 예를 들어 입력한 데이터 형식이 잘못된것(DataFormatException), 존재하지 않는 파일의 이름을 입력하는것(FileNotFoundException)과 같은 경우에 발생한다.
이 Exception을 Checked Exception이라도 한다. Checked Exception의 특징은 반드시 에러 처리를 해야하는 특징(try/catch or throw)을 가지고 있다.


RuntimeException 클래스들은 주로 프로그래머의 실수에 의해서 발생될 수 있는 예외로 자바의 프로그래밍 요소들과 관계가 깊다. 예를 들면, 배열의 범위를 벗어난다던가(ArrayIndexOutOfBoundsException), 값이 null인 참조변수의 멤버를 호출하려 하는 것(NullPointerException)등 이 있다.
이 Exception을 Unchecked Exception이라도 한다. 이것은 Checked Exception와는 달리 에러 처리를 강제하지 않는다.

예외는 프로그래머가 이에 대한 처리를 미리 해주어야 한다. 이렇게 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것을 예외처리(exception handling) 라고 한다. 예외처리의 목적은 예외의 발생으로 인한 실행 중인 프로그램의 비정상적인 종료를 막고, 정상적인 실행 상태를 유지하는 것이다.


Reference

Java의 정석 - 3rd Edition by. 남궁 성

profile
개발 공부 일지

0개의 댓글