article thumbnail image
Published 2020. 4. 28. 16:29

finally는 try 구문에서 예외가 발생하는 것과 상관없이 언제나 실행되는 로직이다.

예제를 조금 변경해보자.

 

package org.opentutorials.javatutorials.exception;
 
class A{
    private int[] arr = new int[3];
    A(){
        arr[0]=0;
        arr[1]=10;
        arr[2]=20;
    }
    public void z(int first, int second){
        try {
            System.out.println(arr[first] / arr[second]);
        } catch(ArrayIndexOutOfBoundsException e){
            System.out.println("ArrayIndexOutOfBoundsException");
        } catch(ArithmeticException e){
            System.out.println("ArithmeticException");
        } catch(Exception e){
            System.out.println("Exception");
        } finally {
            System.out.println("finally");
        }
    }
}
 
public class ExceptionDemo1 {
    public static void main(String[] args) {
        A a = new A();
        a.z(10, 0);
        a.z(1, 0);
        a.z(2, 1);
    }
}

 

차이점은 아래와 같다.

 

 

실행결과는 다음과 같다.

 

 

예외와 상관없이 try 내의 구문이 실행되면 finally가 실행되고 있다.

 

그럼 finally는 언제 사용하는 것일까? 어떤 작업의 경우는 예외와는 상관없이 반드시 끝내줘야 하는 작업이 있을 수 있다. 하지면 지금 우리의 상황에서는 그런 사례를 살펴보는 것이 오히려 부담이 될 수 있을 것 같다. 그래서 여기서는 케이스를 설명만 하고 예제를 만들지는 않겠다.

 

예를 들어 데이터베이스를 사용한다면 데이터베이스 서버에 접속해야 한다. 이때 데이터베이스 서버와 여러분이 작성한 에플리케이션은 서로 접속상태를 유지하게 되는데 데이터베이스를 제어하는 과정에서 예외가 발생해서 더 이상 후속 작업을 수행하는 것이 불가능한 경우가 있을 수 있다. 예외가 발생했다고 데이터베이스 접속을 끊지 않으면 데이터베이스와 연결 상태를 유지하게 되고 급기야 데이터베이스는 더 이상 접속을 수용할 수 없는 상태에 빠질 수 있다. 접속을 끊는 작업은 예외 발생여부와 상관없기 때문에 finally에서 처리하기에 좋은 작업이라고 할 수 있다. 말하자면 finally는 작업의 뒷정리를 담당한다고 볼 수 있다.

'📌 java > java' 카테고리의 다른 글

java - throw & throws  (0) 2020.04.28
java - 예외의 강제  (0) 2020.04.28
java - 좀 더 다양한 exception들  (0) 2020.04.28
java - exception 발생에 대한 처리  (0) 2020.04.28
java - try, catch  (0) 2020.04.10
복사했습니다!