Java 문법

10-1 예외처리(예외 클래스)

개발하는지호 2023. 10. 27. 16:02

예외: 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생되면 프로그램은 곧바로 종료된다는 점에서는 에러와 비슷하다. 그러나 예외는 예외 처리를 통해 프로그램을 종료하지 않고, 정상 실행 상태가 유지되도록 할 수 있다.

 

*자바는 예외가 발생할 가능성이 높은 코드를 컴파일할 때 예외 처리 유무를 확인한다. 만약 예외 처리 코드가 없다면 컴파일이 되지 않는다. 하지만 모든 예외에 대해서 예외 처리 유무를 확인하는 것은 아니다.

 

예외와 예외 클래스

 

일반 예외(exception) : 컴파일 체크 예외라고도 하는데, 실행 시 예외가 바생할 가능성이 높기 때문에 자바 소스를 컴파일하는 과정에서 해당 예외 처리 코드가 있는지 검사한다. 만약 예외 처리 코드가 없다면 컴파일 오류가 발생한다.

 

실행 예외(runtime exception) :  컴파일러 넌 체크 예외라고도 하는데, 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않는다.

 

*자바에서는 예외를 클래스로 관리합니다. JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성한다. 그리고 나서 예외 처리 코드에서 예외 객체를 이용할 수 있도록 해준다. 

 

*모든 예외 클래스는 java.lang.Exception 클래스를 상속받는다.

ex)

java.lang.Exception

일반 예외

java.lang.ClassNotFoundException

java.lang.InterruptedException

...

실행 예외

<부모>

java.lang.RuntimeException 

<자식>

java.lang.NullPointerException

java.lang.ClassCastException

java.lang.NumberFormatException

 

실행 예외

실행 예외는 자바 컴파일러가 체크하지 않기 때문에 오로지 개발자의 경험에 의해서 예외 처리 코드를 작성해야 한다. 만약 개발자가 실행 예외에 대해 예외 처리 코드를 넣지 않았을 경우, 해당 예외가 발생하면 프로그램은 곧바로 종료된다.

 

NullPointerException

객체 참조가 없는 상태, 즉 null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생

 

ArrayIndexOutOfBoundsException

배열에서 인덱스 범위를 초과할 경우 발생하는 실행 예외이다.

 

NumberFormatException

프로그램을 개발하다 보면 문자열로 되어 있는 데이터를 숫자로 변경하는 경우가 자주 발생하는데, 숫자로 변환될 수 없는 문자가 포함되어 있다면 발생하는 실행 예외이다.

 

ClassCastException

타입 변환casting은 상위 클래스와 하위 클래스 간에 발생하고 구현 클래스와 인터페이스 간에도 발생한다. 이러한 관계가 아니라면 클래스는 다른 타입으로 변환할 수 없기 때문에 발생하는 실행 예외이다.

 

*기본 타입에서 발생하는 캐스팅 오류는 컴파일 에러이고

클래스에서 발생하는 캐스팅 오류는 예외이다. 

 

이 둘 차이가 있으므로 개념 한 바퀴 돌고 더 깊은 개념을 이해할 때 정리해보자.