Java 예외 처리 - finally

​예외 처리 용도의 try ~ catch 문법에서 finally 기능을 제공한다.
이 기능은 어떤 경우의 예외라도 블록 코드를 호출한다.

try ~ catch ~ finally 문법과 정의

try {
    // 정상적인 흐름
} catch({class type} {param}) {
    // 예외 흐름
} finally {
    // 반드시 호출되는 코드 블록
}
  • try ~ catch ~ finally 구조로 정상, 예외, 마무리 흐름을 제공한다.
  • try 시작 시 finally 블록은 어떤 경우에도 호출된다.

예외 처리에는 정상 흐름과 예외 처리, 예외 던지는 구조가 있다. 여기서 finally 이 어떻게 되는지 정리해보자.

finally 흐름 정리

  • 정상적인 흐름 -> finally
  • 예외 catch -> finally
  • 예외 throw, throws -> finally

finally 용도

fianlly 키워드는 주로 try 에서 연결한 자원을 해제하거나 끊는 요도로 많이 이용한다.

finally 사용

이전의 네트워크 예제에서 많이 사용한 connect(), send(), disconnect() 구조를 떠올려 사용해보자

try {
    client.connect();
    client.send(data);
} catch (NetworkClientException e) {
    System.out.println("[Error] Code: " + e.getErrorCode() + ", Message: " + e.getMessage());
} finally {
    client.disconnect();
}

try ~ catch ~finally 문은 이렇게 사용할 수 있다. connect 예외가 발생되더라도 disconnect() 는 반드시 호출되도록 보장한다.

finally 사용 (try ~ finally)

try {
    client.connect();
    client.send(data);
} finally {
    client.disconnect();
}

예외를 직접 처리할 필요 없다면 이렇게 사용해도 된다. 예외가 밖으로 던져지더라도 finally 코드는 호출을 보장한다.

finally 정리

  • 코드에서 정상 흐름 예외 흐름 코드들을 읽기 편하고 유지보수 가독성이 좋아진다.
  • 사용한 외부 자원을 항상 반납할 수 있도록 한다.