컴퓨터프로그래밍/JAVA

Java - 35.예외 처리 개요

zelkova 2011. 8. 8. 11:43

자바는 오류를 크게 문법적 오류와 예외로 구분한다.

1.문법적오류
우리가 만드는 자바 프로그램은 자바 문법에 입각해 작성된다. 그러나 의도적이든 실수이든간에 자바 문법을 지키지 않고 코드를 작성한다면 이는 컴파일러에 의해 오류가 체크되어 프로그램의 실행 자체가 되지 않는다.

이러한 오류를 문법적 오류(syntax error)또는 컴파일 오류(compile error)라고 한다. 이렇게 컴파일러에 의해 오류가 체크되면 해당 프로그램은 실행 자체가 되지 않는다.

문법적 오류가 발생하는 경우는 자바의 문법 체계를 위반했을 경우나 선언되지 않은 클래스, 메서드, 변수 또는 필드등을 접근(호출)했을 경우가 있다.

문법적 실행오류
 문법적 실행오류가 발생하는 프로그램은 실행조차 되지 않아 답답하지만 컴파일러가 오류 내용을 표시해주므로 오류를 수정하는 작업(디버깅)이 수월한 편이다. 그러나 프로그램은 실행되는데 예기치 않게 오류가 발생하는 경우가 있다. 이것을 우리는 실행 오류(runtime error)라고 하는데 이때 발생하는 오류를 예외(exception)라고 한다.

실행 오류가 발생하는 대표적인 예
-나누기 연산을 할 때 분모가 0인 경우
-레퍼런스 타입의 변수에 접근했는데 해당 레퍼런스 타입값이 ㅇ벗어 해당 레퍼런스에 의해 접근하고 자하는 실체가 없는 경우
-원격의 네트워크로 데이터를 전송하고자 할 때 원격지와 연결이 되지 않은 상태에서 데이터를 송신 또는 수신하고자 할 경우
-데이터베이스에 데이터를 접근하고자 하는데 데이터베이스에서 접속이 되어 있지 않은 경우

2.예외 처리 구문
위와같이 여러 에러들을 살펴보았다 문법적 구문같은 경우는 컴파일할때 고쳐주면 되지만 실행오류가 발생하는 경우는 유동적이라 잘 실행되더라도 예외가떠서 프로그램에 이상이 오게된다. 이런 인간의 실수를 줄여주기 위해서 예외처리가 사용된다.

문법1 - 예외 처리 구분
try{
 //예외가 발생할 소지가 있는 구문
}
catch(예외객체명 인스턴스변수명)
{
  //예외가 발생할 경우 처리할 명령문
}

문법2 - 복합 예외 처리 구분
 catch는 예외 개수만큼 늘려서 예외 처리가 가능하다.
try{
 //예외가 발생할 소지가 있는 구문
}
catch(예외객체명 인스턴스변수명)
{
  //예외가 발생할 경우 처리할 명령문
}
catch(예외객체명 인스턴스변수명)
{
  //예외가 발생할 경우 처리할 명령문
}
catch(예외객체명 인스턴스변수명)
{
  //예외가 발생할 경우 처리할 명령문
}

문법3 - finally 예외 처리 구문
finally 블록은 catch블록을 실행한뒤에 실행되는 구문이다. 복합 예외 처리구문에서 중복된 예외처리구문이 있을경우 finally 구문을 사용하여 중복을 제거하는 구문이다. 별도의 매개인자가 없음에 유의하면서 사용하자.
try{
 //예외가 발생할 소지가 있는 구문
}
catch(예외객체명 인스턴스변수명)
{
  //예외가 발생할 경우 처리할 명령문
}
finally
{
}

반응형