티스토리 뷰

Java

자바 예외처리(Exception Handling)

토마's 2016. 10. 8. 17:00

안녕하세요. 

오늘은 자바에서 중요한 예외 처리에 대해서 간단하게 포스팅 해보려고 합니다. 모든 프로젝트를 진행하다 보면,

완벽하게 프로젝트를 한번에 만드는 사람들은 없다고 생각합니다. 따라서 여러번의 시행 착오와 오류들을 만져보면서

자신을 한 단계 더 성장 시키는 계기가 될 수 있고, 그러한 오류나 예외를 처리하는 것이 매우 중요합니다.

그럼 예외에 대해서 알아보겠습니다.


1) 예외(exception)

프로그램 실행 도중 예기치 못한 상황. 자바에서는 예외도 객체입니다.



Exception의 하위 클래스 (하위 클래스 안에 여러 하위 클래스의 예외 객체 존재)

NoSuchMethodException

메소드가 존재하지 않을 때 

ClassNotFoundException 

클래스가 존재하지 않을 때 

CloneNotSupportedException 

객체의 복제가 지원되지 않는 상황에서의 복제 시도 

IllegalAccessException 

클래스에 대한 부정 접근 

InstantiationException 

추상 클래스나 인터페이스로 부터 객체를 생성하려 할 때

InterruptedException 

스레드가 인터럽트 되었을 때 

IOException

입출력 오류가 발생할 때 

RuntimeException 

실행 시간 예외가 발생할 때 



2) 예외 처리란(Exception Handling)?

자바 메소드에서는 문제가 생기면 예외를 사용하여 자신을 호출한 메소드에 그 사실을 알려줍니다.

자바 예외처리(exception handling) 메커니즘은 실행 중에 생길 수 있는 "예외적인 상황"을 처리할 수 있는 방법입니다.

특정 메소드를 호출할 때 예외가 발생할 수 있다는 것을 알고 그러한 예외를 발생시킨 문제에 미리 대비할 수 있습니다.



3) 예외를 던지는 것?

 메소드를 수행할 때 메소드 내에서 예외가 발생할 수 있음을 나타내는 것입니다. throws 구문을 사용해 외부에 알려줍니다.

public void method() throws 예외객체, [예외객체....] {
    // 내용
}

이러한 메소드를 호출할 때는 호출하는 메소드 내에서 처리하거나 또한 선언해야 합니다. 단, RuntimeException은 처리하지 않아도

아무런 문제를 일으키지 않습니다. 호출하는 메소드 내에서 이러한 메소드를 처리하지 못한다면 컴파일러는 에러메시지를 출력합니다.

예외를 처리하지 않고 그냥 보내지 않는 방법이 있는데 이는 호출하는 메소드에서 예외를 다시 선언해주면 됩니다.

이러한 방법은 자바의 예외처리 메커니즘을 활용하지 못하는 것으로 권장하지 않습니다.



4) 예외를 처리하는 것?

예외가 발생되는 구문 또는 발생할 것으로 생각되는 구문을 try ~ catch 구문을 감싸줍니다.

try {
     // 예외가 발생할 수 있는 구문, 예외를 던진 메소드 호출 부분
     // 이 구문 수행도중 예외가 발생하면 catch문으로 간다.
     // 예외 발생 코드 아래부분은 수행되지 않는다.
} catch(예외 타입 1 매개변수 1) {
     // 예외타입 1의 예외가 발생했을 때 처리하는 구문
     // 예외가 발생하지 않으면 수행되지 않는다.
} catch(예외 타입 2 매개변수 2) {
     // 발생하는 여러 예외에 대해서 여러 catch문을 사용할 수 있다.
     // 작은 예외부터 큰 예외 순으로 코딩한다.
     // 예를들면, Exception예외 보다 NumberFormatException예외가 상단에 위치해야 한다.
     // 그렇지 않으면 Exception에서 다 처리되므로, NumberFormatException은 수행되지 않는다.
} finally {
     // 예외 발생 여부와 상관없이 일단 try문에 진입하면 무조건 실행되는 코드
     // finally{} 는 없어도 상관 없음
}

이처럼 오늘은 예외와 예외처리에 대한 종류 및 간단한 사용법에 대해서 알아봤습니다.

이만 포스팅을 마치겠습니다.