IT/JAVA

[JAVA의 예외 처리] Try-Catch-Finally 구문!

FintechPark 2021. 4. 30. 18:00

JAVA에서는 항상 열 받게 예외가 발생한다. 컴퓨터는 도전 정신이 없어서 이상한 반항을 많이 한다. 예를 들어...

 


  • "아닛! 절 왜 0으로 나눠요!"

 

  • "여기 메모리 넣을 곳이 없는데 숫자를 어떻게 넣어요!"

 

  • "이거 길이 모른다고(Null)이라 해놓고 왜 길이 얼만지 물어봐요?!"

 


 

이런 질문을 하는 것으로 보아 컴퓨터는 미필임에 분명하다. 해보려고 하지도 않고... 따라서 이러한 컴퓨터가 이상하다는 낌새를 채고 "오류다!"라고 생각할 때 즉시 대처할 수 있는 방안을 개발자들은 개발해냈다. 바로 Try-Catch-Finally 구문이다!


 

Try 속에서 오류가 발생한다면?

Catch에서 그 오류에 대한 대처를 하고

Finally로 Try-Catch를 끝내고 무조건 실행한다.

 


 

 

Try - Catch - Finally 예시 1


 

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    public static void main(String[] args) {
            
    //오류일 때    
    try {    
        System.out.println(" *** Start Program ***");
        
        //0 divide 에러
        int a = 123/0;
        
        
        //null point exception - 에러
        //NullPointerException() - jvm이 오류 객체를 생성하여 인지
        //try로 오류 부분 인지
        String s = null;
        s.length(); 
                
        
        //Array Index 에러
        int[] arr = new int[4];
        arr[4= 30;
        
        System.out.println("===============");
        System.out.println("Error Not Found");
        System.out.println("===============");
    }
    
    //에러가 발생 시 에러를 무시하고 캐치 밑 구문 실행
    
    //Null 관련 오류는 여기서 무시 후 캐치 실행
    catch(NullPointerException e1) { 
        System.out.println("===============");
        System.out.println("Error: Null Error");
        System.out.println("Reason: " + e1.getMessage());
        System.out.println("===============");
    }
    
    //ArrayIndex 관련 오류는 여기서 무시 후 캐치 실행
    catch(ArrayIndexOutOfBoundsException e2) {
        System.out.println("===============");
        System.out.println("Error: Bad Index");
        System.out.println("Reason: " + e2.getMessage());
        System.out.println("===============");
    }
    
    //나머지 모든 에러 관련 오류는 여기서 무시 후 캐치 실행
    catch(Exception e3) {
        System.out.println("===============");
        System.out.println("Error: Just Error");
        System.out.println("Reason: " + e3.getMessage());
        System.out.println("===============");
    }
    
    
    //try-catch를 빠져나오며 무조건 실행
    finally {
        System.out.println("@@@ try-catch 탈출! @@@");
    }
    
    
    //프로그램의 마지막
    System.out.println(" *** End Program *** ");
    }
cs

 

그 결과


 

예시 1의 결과: 0으로 나누기 오류 발생 시 결과


Null 길이 계산 오류 발생 시 결과


Array Index 오류 발생 시 결과


Try 구문 속에 예외(오류)가 많다면, 가장 먼저 발생한 오류 구문만 Catch로 잡아준다. 예를 들어 위 코드의 결과는 123/0에서 0으로 나누기 에러가 가장 먼저 발생하여 그 에러만 Exception e3으로 잡아준 것이다.

 

 

catch(NullPointerException e1)

catch(ArrayIndexOutOfBoundsException e2)

 

이렇게 에러를 지정해주면 그 에러만 잡지만, 

 

catch(Exception e3)

 

이렇게 특정 에러가 아닌 발생한 모든 에러를 잡아줄 수도 있다. (e1, e2, e3는 임의로 내가 설정했다.)

 

위 3가지 결과들은 내가 Try 오류의 순서들을 바꿔주며 실행시킨 결과다. 코린이 관점에서 작성해봤는데 잘 이해가 되었으면 한다. JAVA 기본 중의 기본은 바로 이 예외처리라고 생각한다.

'IT > JAVA' 카테고리의 다른 글

[JAVA] 정규식이란? 자주 사용하는 정규식  (0) 2021.03.05