1. 예외와 예외 클래스

 PC 하드웨어의 오작동 또는 고장으로 인해 응용프로그램 실행 오류가 발생하는 것을 자바에서는 에러(error)라고 합니다. 에러는 JVM 실행에 문제가 생겼다는 것이므로 JVM 위에서 실행되는 프로그램을 아무리 견고하게 만드러도 결국 실행 불능이 됩니다.

 자바에서는 에러 이외에 예외(Exception)라는 오류가 있습니다. 예외란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말합니다.(대부분 개발자의 fault 이긴 하지만)

 예외가 발생되면 프로그램은 곧바로 종료된다는 점에서는 에러와 동일하지만, 예외는 예외 처리(Exception Handling)를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있습니다.

 예외는 일반 예외와 실행 예외가 존재합니다. 

 

일반 예외
컴파일러 체크 예외라고도 하는데, 자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사하기 때문입니다.

실행 예외
컴파일하는 과정에서 예외 처리 코드를 검사하지 않은 예외를 말합니다. 컴파일 시 예외 처리를 확인하는 차이일 뿐, 두 가지 예외는 모두 예외 처리가 필요합니다. 

 자바에서는 예외를 클래스로 관리합니다.

JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성합니다. 그리고 나서

예외 처리 코드에서 예외 객체를 이용할 수 있도록 해줍니다.

모든 예외 클래스들은 다음과 같이 java.lang.Exception 클래스를 상속받습니다.

 

 

 

일반 예외와 실행 예외 클래스를 구별하는 방법

일반 예외는 Exception을 상속받지만 RuntimeException을 상속받지 않는 클래스들이고,

실행 예외는 RuntimeException을 상속받는 클래스들입니다. 

 

 

 

 

 

2. 실행 예외

실행 예외는 자바 컴파일러가 체크를 하지 않기 때문에 오로지 개발자의 경험에 의해서 예외 처리 코드를 삽입해야 합니다.


1) NullPointerException

 이 예외는 객체 참조가 없는 상태, 즉 null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생합니다. 객체가 없는 상태에서 객체를 사용하려 했으니 예외가 발생하는 것입니다.

- 코드 -

- 결과 -

- 설명 -

프로그램에서 예외가 발생하면 예외 메세지가 이클립스 Console 뷰에 출력되면서 프로그램이 종료됩니다.

 

 

 

 


2) ArrayIndexOutOfBoundsException
배열에서 인덱스 범위를 초과해서 사용할 경우 실행 예외인 java.lang.ArrayIndexOutOfBoundsException이 발생합니다. 

- 코드 -

- 결과 -

- 설명 -

위의 예제를 실행하면 파라미터를 주지 않았기에 args[0], args[1]과 같이 인덱스를 사용 할 수 없습니다.


 

 

 

3) NumberFormatException

프로그램을 개발하다보면 문자열로 되어있는 데이터를 숫자로 변경하는 경우가 있습니다.

(문자 -> 숫자)

이 메서드들은 파라미터인 문자열이 숫자로 변환될 수 있다면 숫자를 리턴하지만, 숫자로 변환될 수 없는 문자가 포함되어 있다면 java.lang.NumberFormatException을 발생시킵니다.

- 코드 -

- 결과 -

- 설명 -

a100 이라는 변수는 숫자로 변환될 수 없기에 위와같은 예외를 발생시키는 것 입니다.


 

 

4) ClassCastExceoption

타입 변환(Casting)은 상위 클래스와 하위 클래스 간에 발생하고 구현 클래스와 인터페이스 간에도 발생합니다. 이러한 관계가 아니면 클래스는 다른 클래스로 타입 변환할 수 없습니다. 

- 코드 -

- 결과 -

- 설명 -

라인 7를 보시면 Cat 객체를 파라미터로 주어서 Dog로 변환하려 했기에 예외가 발생하는 것 입니다.