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