기존 프로그래밍 언어에서는 프로그램에서 에러가 발생하면 에러를 적절히 처리하기가 상당히 어려웠다.
이는 언어 차원에서 에러를 처리할 수 있는 방법을 제공하지 않았기 때문이다.

에러는 여러 종류로 나눌 수 있다. 






여기서 문법적인 에러는 컴파일시 대부분 수정이 가능하다. 실행에러는 컴파일은 수행되었으나 실행시에 문제가 되는 경우로
논리적인 에러, 시스템에러, 예외 사항의 발생이다.
이중 논리적인 에러는 프로그래머가 코드를 잘못 작성해서 생기는 경우이며, 시스템적인 에러는 프로그래머의 의지와는
상관없이 발생하는 것이므로 프로그래머가 처리할 수 있는 방법은 없으며, 마지막으로 이제 다뤄볼 예외 사항이 발생하는 
경우이다.
예외사항은 정상적으로 프로그램이 동작중에 발생할 수 있는 여러가지 사항들이며 자바는 언어차원에서 이런 예외적인
사항의 처리를 지원하기 때문에 탄탄한 프로그램을 작성할 수 있다.


자바에서는 실행 시 발생할 수 있는 오류(Exception과 Error)를 클래스로 정의하였다. 
모든 클래스의 최상위 클래스는 Object클래스이므로 Exception과 Error클래스 역시 Object클래스의 하위클래스들이다. 

모든 예외의 최상위클래스는 Exception클래스이며, 상속계층도를 Exception클래스부터 도식화하면 다음과 같다. 





RuntimeException클래스들은 주로 프로그래머의 실수에 의해서 발생될 수 있는 예외들로서 자바의 프로그래밍 요소들과 관계가 깊다. 예를 들면, 배열의 범위를 벗어난다던가(IndexOutOfBoundsException), 값이 null인 참조변수의 멤버를 호출하려 했다던가(NullPointerException), 클래스간의 형변환을 잘못했다던가(ClassCastException), 정수를 0으로 나누려 했다던가(Arithmetic- Exception)하는 경우에 발생하는 예외들이다. 

RuntimeException클래스들 중의 하나인 ArithmeticException을 try-catch문으로 처리하는 경우도 있지만, 사실 try-catch문을 사용하기보다는 0으로 나누지 않도록 프로그램을 변경하는 것이 올바른 처리방법이다. 
이처럼 RuntimeException예외들이 발생할 가능성이 있는 코드들은 try-catch문을 사용하기 보다는 프로그래머들이 보다 주의 깊게 작성하여 예외가 발생하지 않도록 해야 할 것이다. 

그 외의 Exception클래스들은 주로 외부의 영향으로 발생할 수 있는 것들로서, 프로그램의 사용자들의 동작에 의해서 발생하는 경우가 많다. 예를 들면, 존재하지 않는 파일을 처리하려한다던지(FileNotFoundException), 실수로 클래스의 이름을 잘못 적었다던가(ClassNotFoundException), 입력한 데이터의 형식이 잘못되었다던가(DataFormatException) 하는 경우에 발생하는 예외들이다. 
이런 종류의 예외들은 반드시 처리를 해주어야 한다. 


RuntimeException클래스들 - 프로그래머의 실수로 발생하는 예외 
그 외의 클래스들 - 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외 

RuntimeException클래스들 그룹에 속하는 예외가 발생할 가능성이 있는 코드에는 예외처리를 해주지 않아도 컴파일 시에 문제가 되지 않지만, 그 외의 Exception클래스들 그룹에 속하는 예외가 발생할 가능성이 있는 예외는 반드시 처리를 해주어야 하며, 그렇지 않으면 컴파일시에 에러가 발생한다. 


 
Posted by finewoo
,