본문 바로가기
프로그래밍 언어/JAVA

[JAVA] 예외처리 (1) try ~ catch, finally

by 느링 2017. 8. 25.

예외처리란

프로그래밍에서 예외가 발생했다는 말은 프로그램 에러라고 생각하시면 됩니다. 프로그램이 돌다가 이터를 잘못 받거나, 다른 데이터 타입의 자료를 사용한다거나 하는 에러를 "예외"라고 합니다. 

 

자바에서는 이러한 부분을 미연에 방지할 수 있는 방법이 있는데요,

바로 "try ~ catch" 구문 입니다.

 

※ try ~ catch 기본 구조

try {

//예외가 발생할 수 있는 상황

} catch (Exception형 e){

//예외 발생 상황을 e로 정의하여 처리(예외가 발생했을 때 처리하는 문장)

}

 

1. try ~ catch 문

 

<예제 1>

 

의미상의 오류가 있는 소스코드입니다.

result부분에서 에러가 생겼습니다. 이유는 바로 0으로 나눗셈을 하였기 때문입니다.

 

밑에 Consloe창에서 보면 메인스레드에서 "java.lang.ArithmeticException" 예외가 발생하였고

"/"(나눗셈)을 0으로 나눌 수 없다고 나와있습니다.

 

이러한 에러를 처리한 예제 코드를 다시 확인해보겠습니다.

 

<예제 1_2>

 

<예제 1_2>의 코드를 보시면 "try ~ catch" 구문을 사용하였습니다.

"try"구문에서 "try"라는 예약어와 중괄호{ }를 사용하여 그 안에 오류가 나는 소스를 담아둡니다.

 

"try" 바디부분에서는 에러를 감지하는 역을 합니다.

만약 "try"에서 에러를 감지했다면 에러와 관련된 "catch"로 넘겨서 예외 처리를 해주게 됩니다.

 

이러한 과정을 바로 "예외 처리를 한다."라고 말합니다.

 

** 다시 정리를 해보자면 **

① "try"구문에서 에러가 나면 "try"의 남은 소스를 더 이상 진행하지 않고 "catch"구문으로 가서 예외 처리를 해줍니다. 그 후 남은 코드를 수행합니다.

② 정상 동작시, "try"의 코드를 다 진행하고, 남은 코드를 실행하게 됩니다.

 

2. 2개 이상의 catch문

더 많은 예외 처리가 필요할 시에는 관련 예외를 처리하는 catch문을 더 명시해주시면 됩니다.

 

※ 2개 이산의 catch문 기본 구조

try {

//예외가 발생할 수 있는 상황

}catch (예외클래스 e){

//예외 발생 상황 1을 e로 정의하여 처리

}catch (예외클래스 e){

//예외 발생 상황 2를 e로 정의하여 처리

}

<예제 2>

 

<예제 2>의 코드를 보시면 catch문이 하나 더 늘어났습니다.

"ArrayIndexOutOfBoundsException" 관련 예외 처리 부분이 추가되었음을 보실 수 있습니다.

보시다시피 10개짜리 배열을 만들었는데 11번째 배열을 사용하려다 보니 발생하는 에러입니다.

 

"try"부분에서 이러한 배열에 관련된 에러가 발생했을 시, 컴파일러는 2개의 "catch"중에 "ArrayIndexOutOfBoundsException"예외 처리 "catch"문으로 분기하여 처리하게 됩니다.

 

 

** 자주 사용되는 Exception형 클래스 **

ArithmeticException 0으로 나눌 때 발생

NegativeArraySizeException → 배열의 크기가 음수일 때 발생

NullPointerException → 객체를 생성하기 전에 사용할 때 발생

ArrayIndexOutOfBoundsException → 배열의 인덱스가 범위를 벗어났을 때 발생

 

3. 반드시 실행해야 하는 finally문

finally문은 예외 발생 여부와 상관없이 항상 실행이 됩니다.

 

"try"는 예외가 발생 할 가능성이 있는 코드를 넣어서 에러를 감지하고,

"catch"는 발생한 에러를 예외 처리를 하고

"finally"는 에러가 발생하거나 안하거나 반드시 실행해야 하는 부분입니다.

 

※ finally문 기본 구조

try {

//예외가 발생할 수 있는 상황

} catch (예외클래스 e){

//예외 발생 상황을 e로 정의하여 처리

} finally {

//항상 실행 됨

}

<예제 3>

 

 

 

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

[JAVA] 예외처리 (2) throws  (0) 2017.09.05
[JAVA] 추상 클래스(abstract)  (0) 2017.08.28
[JAVA] 인터페이스(interface)  (0) 2017.08.25
[JAVA] getter/setter 메소드  (0) 2017.08.25
[JAVA] instanceof 연산자  (1) 2017.08.24