자바 예외의 원리
프로그램 실행 시 아래와 같은 다양한 오류가 발생할 수 있습니다.
- 파일을 읽는 프로그램을 실행시켰으나 파일을 찾을 수 없는 경우
- 문자열을 숫자로 변환하는 프로그램을 실행했으나 숫자로 변환할 수 없는 문자열인 경우
- 배열의 범위를 벗어나는 경우
이러한 오류들은 코드를 컴파일 할 때는 찾을 수 없으며
프로그램을 실행시켜서 위의 상황에 맞는 경우에만 에러가 발생합니다.
자바는 이러한 오류에 대응하기 위해 '예외 처리' 기능을 제공합니다.
예외처리 가 없을 경우
아래의 코드를 보면 배열의 범위를 벗어나게 입력했다는 것을 알 수 있지만
컴퓨터는 실행하기 전까지 오류가 있다는 것을 알 수 없습니다.
따라서 아래 코드는 정상적으로 컴파일 및 num[4] 위의 코드까지 실행되다가
num[4] 에서 배열이 벗어났다는 오류를 인지 후 ArrayIndexOutOfBoundsException 에러를 반환합니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
public class trycatchTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] num = new int[3];
System.out.println("num 배열의 최대 길이는 3입니다.");
num[4] = 0;
System.out.println("num[4] 에 값을 입력했습니다.");
}
}
|
cs |
try catch 문
이런경우를 대비해서 자바에서는 예외처리를 할 수 있는 try catch 문을 제공합니다.
try catch 를 처리하는 방식은 아래와 같습니다.
1. try 블록 안에서 예외가 발생하면 그 순간에 코드 실행을 중단
2. 발생된 예외종류가 catch 블럭의 ( ) 안에 지정한 예외와 일치하면 그 안의 코드를 실행
3. catch 블록 안의 코드가 모두 실행되면 try catch 블록 다음에 등장하는 코드를 실행
try
try 문 안에 있는 코드들이 에러가 발생하는 경우 catch 문으로 전달합니다.
catch
try 에서 발생한 예외처리를 진행합니다.
참고로 catch 문에서 모든 예외처리를 할 수 있는 것은 아니며
발생한 예외처리 (위의경우 ArrayIndexOutOfBoundException) 을 처리할 수 있게 되어있어야 합니다.
예외처리가 있을 경우 ( try catch 문 )
위의 코드에서 try catch 문으로 예외처리 되도록 변경하였습니다.
try 내의 num[4] 에서 ArrayIndexOutOfBoundsException 에러가 발생했고 catch 문에서 예외처리를 진행합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class trycatchTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int [] num = new int[3];
System.out.println("num 배열의 최대 길이는 3입니다.");
num[4] = 0;
System.out.println("num[4] 에 값을 입력했습니다.");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열 길이가 맞지 않습니다.");
}
}
}
|
cs |
finally 구문
finally 구문은 예외처리가 발생여부를 떠나 무조건 실행하도록 하는 구문입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
public class trycatchTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int [] num = new int[3];
System.out.println("num 배열의 최대 길이는 3입니다.");
num[4] = 0;
System.out.println("num[4] 에 값을 입력했습니다.");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열 길이가 맞지 않습니다.");
} finally {
System.out.println("배열을 다시 선언합니다");
int [] num = new int[5];
num[4] = 0;
System.out.println(num[4]);
}
System.out.println("프로그램을 종료합니다");
}
}
|
cs |
정리
마지막으로 try , catch, finally 구문을 정리하면 다음과 같습니다.
단계 | 설명 |
try | 예외 발생을 조사하는 문장 검사 |
catch | 예외가 발생했을 때 실행시킬 코드 |
finally | 마지막에 반드시 실행시켜야 하는 코드 |
'Computer Language > JAVA' 카테고리의 다른 글
[JAVA] 자바 스레드 synchronized 동기화 방법 (0) | 2021.03.26 |
---|---|
[JAVA] 자바 스레드 사용방법 (1) | 2021.03.25 |
[JAVA] 자바 임포트(import)란 (0) | 2021.03.16 |
[JAVA] 자바 패키지(Package)란? (0) | 2021.03.16 |
[JAVA] 자바 파일 분할, 파일 나누어 코딩하는 방법 (1) | 2021.03.16 |