[JAVA] 예외처리(Exception Handling)

2021. 10. 21. 18:25Web/JAVA

728x90

예외처리(Exception Handling)란?

예외란 의도치 않은 결과가 나오는 것을 의미합니다.

사용자의 잘못된 조작, 개발자의 잘못된 코딩으로 인해 발생하는 오류입니다.

 

예외는 에러(Error)와 차이점이 있는데요.

 

에러는 컴퓨터 하드웨어의 고장이나 오작동, 프로그램의 이상,

JAVA JVM 실행에 이상이 생긴 경우 발생해 프로그램 실행이 불가한 상태가 돼

비정상적으로 종료되게 됩니다.

 

예외처리를 하게 되면 프로그램이 실행 불가한 상태가 되어도 

정상 종료되도록 해 줍니다. 

 


try, catch, finally문

예외처리에 사용되는 문법입니다.

 

try문 안으로 예외가 발생할 수 있는 코드를 둘러싸고

 

catch문에서 try문 안에서 발생한 예외를 잡는 기능을 합니다.

 

finally문은 try문 안에서 예외 발생 여부와 상관없이 마지막에 무조건 실행합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
try {
 
    예외를 처리하길 원하는 실행 코드;
 
catch (e1) {
 
    e1 예외가 발생할 경우에 실행될 코드;
 
catch (e2) {
 
    e2 예외가 발생할 경우에 실행될 코드;
 
}
 
finally {
 
    예외 발생 여부와 상관없이 무조건 실행될 코드;
 
}
cs

 


예외 처리를 하지 않은 경우

6번 라인 전까지는 오류를 인지하지 못해 정상 실행되다

8번 라인에서 num배열의 최대 길이를 초과하는 num[4]에 값이 입력 돼 오류를 인지하고

ArrayIndexOutOfBoundsException 에러를 반환합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Exception {
 
    public static void main(String[] args) {
        int [] num = new int[3];
        
        System.out.println("num 배열의 최대값은 3입니다.");
        
        num[4= 0;
        
        System.out.println("num[4]에 값을 입력했습니다.");
    }
 
}
 
cs

 

예외처리를 한 경우

try문으로 예외가 발생할 수 있는 부분을 둘러싸고

catch문을 통해 예외가 발생할 경우 코드를 실행하도록 해 에러가 반환되지 않고

13번 라인의 코드가 실행됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Exception {
 
    public static void main(String[] args) {
        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
public class Exception {
 
    public static void main(String[] args) {
        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