finally 키워드
finally 키워드는 try문에서 예외 발생 여부 관계없이 그리고 catch문에서 예외 처리 여부 상관없이 finally문 블록 안에 작성한 소스코드를 실행합니다. 즉, 예외 여부 상관없이 항상 실행됩니다.
finally 키워드 구문
finally문은 두 가지 방법으로 작성할 수 있습니다.
첫 번째 방법은 try-catch-finally입니다. 다음 구문은 try문에서 예외가 발생하고 catch문에서 예외 처리 후 finally문을 실행합니다.
try
{
// 예외가 발생할 수 있는 소스코드를 작성합니다.
}
catch (Exception e)
{
// 예외를 처리하는 소스코드를 작성합니다.
}
finally
{
// 예외 발생 여부와 상관없이 항상 실행되는 소스코드를 작성합니다.
}
두 번째 방법은 try-finally입니다. 다음 구문은 catch문이 존재하지 않으므로 런타임 에러가 발생하면 프로그램이 비정상적으로 종료됩니다.
하지만, finally문이 존재하므로 프로그램이 비정상적으로 종료되더라도 finally문이 실행됩니다.
try
{
// 예외가 발생할 수 있는 소스코드를 작성합니다.
}
finally
{
// 예외 발생 여부와 상관없이 항상 실행되는 소스코드를 작성합니다.
}
finally 키워드 필요성
try문에 할당된 모든 리소스를 finally문에서 정리할 수 있습니다. 예를 들어, 예외가 발생하여 프로그램이 비정상적으로 종료되는 경우 finally 키워드에서 채팅 프로그램을 정상적으로 종료되도록 처리하거나 DataBase 연결을 해제하는 작업을 구현할 수 있습니다.
finally 키워드 예제
다음 예제를 통해 finally문이 어떻게 동작하는지 살펴봅시다. try문에 대해 두 개의 catch문이 존재하고 마지막 catch문 뒤에 finally문이 존재합니다.
class Program
{
static void Main(string[] args)
{
int a, b, c;
try
{
a = int.Parse(Console.ReadLine());
b = int.Parse(Console.ReadLine());
c = a / b;
Console.WriteLine("C VALUE = " + c);
}
catch (DivideByZeroException ex1) // 0으로 나누는 경우
{
Console.WriteLine("0으로 나눌 수 없습니다.");
}
catch (FormatException ex2) // 문자열을 입력하는 경우
{
Console.WriteLine("문자열을 숫자로 변환할 수 없습니다.");
}
finally
{
Console.WriteLine("finally문입니다.");
}
}
}
실행 결과 1. 100과 10 입력(정상)
100
10
C VALUE = 10
finally문입니다.
실행 결과 2. 100과 0 입력(DivideByZeroException 발생)
100
0
0으로 나눌 수 없습니다.
finally문입니다.
실행 결과 3. 100과 hi 입력(FormatException 발생)
100
hi
문자열을 숫자로 변환할 수 없습니다.
finally문입니다.
정리
- finally 키워드는 try-catch문에서 예외 발생 여부 상관없이 항상 실행됩니다.
- try-catch문에서 예외로 인해 프로그램이 비정상적으로 종료되는 경우 finally문에서 리소스를 정리할 수 있습니다.
'C#' 카테고리의 다른 글
[C#]내부 예외 처리(Inner Exception) (0) | 2022.06.26 |
---|---|
[C#]throw문, 사용자 정의 예외 (0) | 2022.06.26 |
[C#]다중 catch문, 다중 예외 처리 (0) | 2022.06.26 |
[C#]예외 처리(Exception Handling) (0) | 2022.06.26 |
[C#]타입 변환 및 타입 캐스팅(Type Conversion and Type Casting) (0) | 2022.06.21 |
댓글