자바 예외 처리 이유?
프로그래밍 실행 시 다양한 오류가 발생할 수 있다.
대표적으로는
- 파일 읽는 프로그램을 실행했지만 파일을 찾지 못하는 경우
- 문자열을 숫자로 변환하는 프로그램을 실행했을 때 변환할 수 없는 문자열일 경우
- 배열 범위를 넘어설 경우
이러한 오류는 컴파일 때 모르고 넘어갈 수 있지만, 실제 운영에서 예외 처리 없이 프로그램을 만들 시 에러코드가 사용자에게 그대로 노출되는 경우가 발생하곤 한다.
자바에선 이런 오류에 대응하기 위해서 예외처리라는 기능을 제공한다.
예외처리
만약 예외처리가 없는 경우 어떻게 되는지 보겠다.
public class testException {
public static void main(String[] args){
String[] temp = new String[2];
System.out.println("temp 사이즈는 : " +temp.length);
System.out.println("temp의 3번째 값" + temp[2]);
}
}
없는 값이라며 ArrayIndexOutOfBoundsException 에러를 발생시킨다.
실제 운영되고 있는 프로그램에서 발생한다면 프로그램이 강제로 종료되게 될 것입니다. (또는 에러 페이지를 보여주겠죠)
이런 에러 값을 잡기 위해서 예외처리가 필요하다.
Try / Catch
public class testException {
public static void main(String[] args){
String[] temp = new String[2];
System.out.println("temp 사이즈는 : " +temp.length);
try {
System.out.println("temp의 3번째 값" + temp[2]);
} catch (Exception e){
e.printStackTrace();
}
}
}
언뜻 보기엔 달라진 게 없는 것처럼 보일 수 있다.
여기서 설명을 조금 담겠다.
try
try 문 안에 코드들이 에러 발생 시 catch 부분으로 넘어가게 된다.
catch
try에서 발생한 예외를 처리하게 된다.
그럼 catch로 잡아냈다고 해도 에러를 발생시키고 종료시키는 게 끝일까?
그걸 위해서 finally라는 명령어가 존재한다.
finally
마지막에 반드시 실행시킴.
try / catch / finally
public class testException {
public static void main(String[] args){
try {
String[] temp = new String[2];
System.out.println("temp 사이즈는 : " +temp.length);
temp[2] = "테스트";
System.out.println("temp의 3번째 값 : " + temp[2]);
} catch (ArrayIndexOutOfBoundsException e){
System.out.println("에러발생");
} finally {
System.out.println("재선언 하겠습니다.");
String[] temp = new String[3];
temp[2] = "테스트";
System.out.println("재선언한 temp의 3번째 값 ? : " + temp[2]);
}
}
}
이렇게 예외 처리 함으로써 프로그램을 정상적으로 종료시킨 부분이 있다.
예외처리에 대해서는 자주 사용하기도 하고, 많이 사용한다.
다음엔 throws에 대해서 정리하겠다.