C# 예외 처리란?
예외(Exception)는 프로그램 실행 중에 발생하는 문제 상황을 의미합니다. 예를 들어 0으로 나누기, 존재하지 않는 파일 열기 등이 대표적인 예외 상황입니다. C#에서는 다음 네 가지 키워드를 사용하여 예외를 체계적으로 처리할 수 있습니다.
try
try 블록은 특정 예외가 활성화되는 코드 영역을 지정합니다. 이 블록 안에서 예외가 발생하면, 해당 예외는 대응되는 catch 블록으로 전달됩니다.
catch
catch 키워드는 발생한 예외를 잡아(catch) 처리하는 역할을 합니다. 예외 유형에 따라 여러 개의 catch 블록을 작성할 수 있으며, 각 블록에서 서로 다른 방식으로 예외를 처리할 수 있습니다.
finally
finally 블록은 예외가 발생하든 발생하지 않든 항상 실행되어야 하는 코드를 담습니다. 주로 파일 닫기, 메모리 해제 같은 리소스 정리 작업에 활용됩니다.
throw
throw 키워드는 프로그램에 문제가 나타났을 때 예외를 의도적으로 던져(발생시켜) 호출자에게 알리는 데 사용됩니다.
예제 코드
다음은 C# 프로그램에서 오류를 처리하는 방법을 보여주는 예제입니다. 0으로 나누기를 시도할 때 발생하는 DivideByZeroException을 catch 블록에서 처리합니다.
using System;
namespace MyErrorHandlingApplication {
class DivNumbers {
int result;
DivNumbers() {
result = 0;
}
public void myDivision(int num1, int num2) {
try {
result = num1 / num2;
} catch (DivideByZeroException e) {
Console.WriteLine("Exception Caught: {0}", e);
} finally {
Console.WriteLine("Result: {0}", result);
}
}
static void Main(string[] args) {
DivNumbers d = new DivNumbers();
d.myDivision(5, 0);
Console.ReadKey();
}
}
}
실행 결과
Result: 0
결과 분석
위 예제에서 myDivision(5, 0)을 호출하면 5를 0으로 나누려다 DivideByZeroException이 발생합니다. 이 예외는 catch 블록에서 잡혀 화면에 출력되며, 나눗셈 연산은 실패했기 때문에 변수 result는 생성자에서 초기화된 초기값인 0을 그대로 유지합니다. 마지막으로 finally 블록은 예외 발생 여부와 관계없이 항상 실행되므로 "Result: 0"이 출력됩니다.