혼공자바] 10-1 예외 클래스
10-1 예외 클래스
자바에서는 컴퓨터의 하드웨어 오동작 또는 공장으로 응용프로그램 실행 오류가 발생하는 것을 에러(error)라고 하며 이 이외의 프로그램 자체에서 발생하는 오류는 예외(exception)이라고 부른다.
예외가 발생되면 프로그램은 곧바로 종료된다는 점에서 에러와 비슷하나 예외 처리(exception handling)을 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할수 있다.
또한 자바는 예외가 발생할 가능성이 높은 코드는 컴파일시 예외처리 유무를 확인하며 처리가 없다면 컴파일 하지않는데 이런 확인을 모든 예외에 다 하는 것은 아니기에 종류를 알아야한다.
예외와 예외 클래스
자바는 예외를 클래스로 관리한다. (모두 java.lang.Exception 클래스를 상속)
JVM은 프로그램 실행하는 도중 예외 발생시 해당 예외 클래스로 객체를 생성하며, 이를 예외 처리 코드에서 이용할 수 있게 한다.
예외를 구별하는 기준은 RuntimeException 클래스를 기준으로 구별해 이 클래스의 하위 클래스가 아니면 일반 예외 클래스에 해당한다.
- 일반 예외(Exception) / 컴파일러 체크 예외
컴파일하는 과정에서 해당 예외 처리 코드가 있는지 확인하고 검사한다. 만약 없다면 컴파일 오류가 뜬다.
- 실행 예외(Runtime Exception) / 컴파일러 넌 체크 예외
실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일 하는 과정에서 검사하지 않는다.
실행 예외
실행 예외는 컴파일러가 체크하지 않기에 오로지 개발자의 경험에 의해서 예외처리 코드를 작성해야 한다.
이를 처리해 주지 않으면 예외가 발생하게 되고 그러면 프로그램은 곧바로 종료된다.
- NullPointerException
가장 빈번하게 발생하는 실행 예외.
객체 참조가 없는 상태, 즉 null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.) 사용했을 때 발생.
- ArrayIndexOutOfBoundsException
배열에서 인덱스 번위를 초과할 경우 발생하는 실행 예외.
사용하기전에 미리 배열 길이를 조사하면 해당 예외 발생을 방지할 수 있다.
- NumberFormatException
문자열로 되어 있는 데이터를 숫자로 변경하는 경우 자주 발생.
숫자로 변환될 수 없는 문자가 포함되어 있다면 발생한다.
- ClassCastException
타입 변환을 할 수 없는 경우 발생하는 실행 예외.
타입 변환은 가능한 케이스는 상위클래스와 하위클래스 간, 인터페이스와 구현클래스 간이며, 다만 처음부터 상위클래스나 인터페이스로 객체가 생성된 경우에도 하위클래스로 구현클래스로 변환하려고 할시 이 예외가 발생한다.
instaceof 연산자를 사용하여 타입변환 전에 변환이 가능한지 확인한다면 이를 방지할 수 있다.