프로그램은 치명적인 오류(Fatal Error)와 마일드 오류(Mild Error)로 구분할 수 있다. 치명적인 오류는 프로그램을 실행하다가 메모리 부족등의 이유로 프로그램을 처리할 수 없어 프로그램이 종료되는 오류를 말한다. 마일드 오류는 예외로 분류되면 컴파일 오류와 달리 프로그램 실행 중에 발생하는 비정상적인 동작을 말한다.
문법적인 오류는 컴파일 시 대부분 수정이 가능하다. 문법 자체에 오류가 있는 프로그램은 실행할 수 없다. 이런 오류는 컴파일러가 코드를 해석할 때 걸러낼 수 있다. 예외 사항은 프로그램이 실행이 되다 발생하는 상황이다. 예외는 확인 예외(Checked Exception)와 Runtime Exception 이 있다.
■ 예외(Exception)
자바에서 문법 오류나 치명적인 오류는 처리 방법을 제시하지 않지만, 예외 중에 확인 예외(Checked Exception)과 런타임 예외(Runtime Exception or Unchecked Exception)에 대해 프로그래머가 직접 처리 방법을 지정할 수 있게 방법을 제공해 준다.
● 확인 예외(Checked Exception)
확인 예외는 파일이 존재하지 않는 경우, 네트워크 연결이 끊어진 경우, 연산이 미리 정의된 범위를 넘어가는 경우 같이 예외 상항에 대해 미리 프로그래머가 정의해야 한다. 예외 상황을 정의하지 않으며 자바는 에러 처리를 해버린다. 이 경우가 try catch 문으로 처리해야 할 부분이다.
● 런타임 예외(Runtime Exception)
런타임 예외는 프로그램 실행 중 발생하는 예외로 null 값을 허용하지 않는 부분에서 null 값이 넘어오는 등 프로그램 상에서 발생할 수 있는 모든 예외를 말다. 런타입 예외는 프로그래머가 처리하지 않아도 되지만 이런 부분을 미리 처리하는 것이 올바른 자바 프로그램을 작성하는 방법이다.
■ 자바에서 예외 처리
자바에서는 프로그램을 실행하다 예외상황을 맞나면 그 지점에서 실행이 중지되고 발생된 예외를 객체로 취급하여 처리한다. 자바 언어의 뛰어난 능력 중에 하나가 예외 상황 처리이다. 즉, 예외 상황이 발생할 경우 프로그래머가 선택하여 예외를 처리할 수 있게 예외 처리 방법을 제공한다.
이런 예외 처리를 위해 try ~ catch 문장을 제공한다. try 문장 안에 프로그램 코드를 실행하다 예외 상황을 만나면 catch 문장을 수행한다. 하지만 예외가 발생하여 catch 구문이 실행되면 큰 과부하가 발생한다. 이러한 과부하는 주로 예외가 발생할 때 스택 정보를 얻어오는 시간에 기인한다. 예외 발생은 설계나 성능을 고려한 테스트의 경우에만 처리하는 것이 바람직하며 정말로 예외적인 상황일 때에만 예외를 발생시켜야 한다.
예외 관련 클래스
예외 관련 클래스는 예외 상황을 뜻하며, 자바에서 미리 정해놓은 예외 클래스이다.
- NoSuchMethodException - 메소드가 존재하지 않을 때
- ClassNotFoundException - 클래스가 존재하지 않을 때
- CloneNotSupportedException - 객체의 복제가 지원되지 않는 상황에서 복제 시도
- IllegalAccessException - 클래스에 대한 부정 접근
- InstantiationException - 추상 클래스나 인터페이스로부터 객체를 생성하려 할 때
- InterruptedException - 쓰레드가 인터럽트 되었을 때
- ArithmeticException - 0으로 나누는 등 산술적인 예외
- NegativeArraySizeException - 배열의 크기를 지정할 때 음수 사용
- RuntimeException - 실행시간 예외가 발생한 경우
- NullPointerException - null 객체의 메소드나 멤버변수에 접근할 때
- IndexOutOfBoundException - 배열이나 스트링의 범위를 벗어난 접근
- SecurityException - 보안을 이유로 메소드를 수행할 수 없을 때
'자바(Java) > JAVA 2SE' 카테고리의 다른 글
java.lang.reflect 패키지 - 클래스와 객체의 정보 취득 (0) | 2009.01.22 |
---|---|
java.util.Vector - 객체 가변 배열 (0) | 2009.01.14 |
데이터베이스에 SQL문을 수행하고 결과 얻기 (0) | 2009.01.13 |
DriverManager 객체와 Connection 객체 (0) | 2009.01.13 |
JDBC를 사용하여 데이터베이스와 연결하는 방법 (0) | 2009.01.12 |