예외(Exception)란 프로그램이 실행되는 도중에 발생하는 문제 상황을 의미합니다. 예를 들어 존재하지 않는 파일을 열거나, 0으로 숫자를 나누려 할 때 예외가 발생할 수 있습니다. C#에서는 이러한 예외를 try, catch, finally, throw 네 가지 키워드로 처리하며, 각 키워드의 역할은 다음과 같습니다.
try – 예외 감시 블록
try 블록은 예외가 발생할 가능성이 있는 코드를 감싸는 영역입니다. 이 블록 안에서 특정 예외가 활성화되면, 해당 예외는 곧바로 catch 블록으로 전달됩니다.
catch – 예외 포착
catch 키워드는 발생한 예외를 잡아내어(포착하여) 처리하는 역할을 합니다. 예외 유형별로 여러 개의 catch 블록을 두어 상황에 맞는 대응 로직을 작성할 수 있습니다.
finally – 반드시 실행되는 블록
finally 블록에는 예외가 발생했든 발생하지 않았든 항상 실행되어야 하는 문장들을 작성합니다. 주로 파일 닫기, 리소스 해제 등 마무리 작업에 사용됩니다.
throw – 예외 던지기
throw는 프로그램 실행 중 문제가 나타났을 때 예외를 발생(던지기)시키는 데 사용됩니다. 직접 만든 조건에서 예외를 강제로 발생시켜 호출자에게 알릴 수도 있습니다.
C# 예외 처리 예제 코드
다음은 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();
}
}
}위 코드에서 d.myDivision(5, 0)이 호출되면 분모가 0이므로 try 블록 안에서 DivideByZeroException이 발생합니다. 이 예외는 catch 블록에서 잡혀 메시지가 출력되고, 예외 발생 여부와 무관하게 finally 블록의 결과 출력문이 마지막으로 실행됩니다.
정리
C#의 예외 처리 구조는 try(감시) → catch(처리) → finally(마무리) 흐름으로 이해하면 쉽습니다. throw를 활용하면 개발자가 원하는 시점에 예외를 발생시킬 수 있어, 더 견고하고 안정적인 프로그램을 작성할 수 있습니다.