C# 예외 처리: Exception과 finally를 언제 사용해야 할까
C# 예외 처리에서 Exception, catch, finally의 역할과 사용 기준을 실제 코드로 설명합니다. 오래된 예제의 의미는 살리되 현재 기준에서 잘못 적용하기 쉬운 부분을 함께 고쳤어요. 아래 순서대로 확인하면 단순한 화면 복사보다 실제 판단에 도움이 됩니다.

Exception으로 받으면 무엇이 달라질까
System.Exception은 대부분의 일반적인 .NET 예외가 이어받는 기본 형식이에요. 그래서 catch (Exception ex)는 여러 오류를 한곳에서 받을 수 있습니다. 편해 보이지만, 복구 방법이 다른 오류까지 같은 방식으로 처리하게 된다는 문제가 생겨요.
파일이 없을 때는 경로를 다시 확인할 수 있지만, 메모리 부족이나 프로그램 상태 훼손은 같은 안내문으로 넘길 일이 아닙니다. 예상 가능한 예외는 FileNotFoundException, FormatException처럼 구체적으로 받고, 가장 바깥 경계에서 기록이 필요할 때만 Exception을 마지막에 두는 편이 읽기 쉽습니다.
finally는 성공과 실패에 상관없이 실행된다
finally는 try 블록이 정상 종료되거나 예외가 발생해도 실행됩니다. 파일, 네트워크 연결, 잠금처럼 반드시 돌려놓아야 하는 자원을 정리할 때 쓰는 이유예요. 다만 최신 C#에서는 IDisposable 자원에 using을 적용하면 정리 의도가 더 분명해집니다.
try
{
int number = int.Parse(input);
Console.WriteLine(number);
}
catch (FormatException)
{
Console.WriteLine("숫자 형식을 확인하세요.");
}
finally
{
Console.WriteLine("입력 처리가 끝났습니다.");
}
예외를 잡은 뒤 조용히 버리지 않는다
빈 catch 블록은 오류를 숨겨 다음 문제를 더 찾기 어렵게 만들어요. 사용자에게 이해할 수 있는 메시지를 보여주고, 운영 환경에서는 원래 예외와 스택 정보를 기록해야 합니다. 다시 던질 필요가 있다면 throw;를 사용해야 기존 호출 위치가 보존됩니다. throw ex;는 추적 정보를 바꿀 수 있어 피하는 편이 안전해요.
오류 메시지보다 예외 형식을 먼저 본다
사용자에게 보여 주는 문장은 상황에 맞게 바뀔 수 있지만, 프로그램의 분기 기준은 예외 형식이어야 합니다. 메시지 문자열을 비교해 처리하면 운영체제 언어와 .NET 버전에 따라 문장이 달라졌을 때 로직이 깨질 수 있어요. catch 필터가 필요하다면 예외의 속성이나 명확한 조건을 사용합니다.
정리 코드 안에서 또 다른 예외가 발생하면 원래 오류가 가려질 수도 있습니다. finally에는 실패 가능성이 낮은 해제 작업만 두고, 기록과 사용자 안내를 분리하세요. 테스트할 때는 정상 입력, 예상 가능한 오류, 예상하지 못한 오류 세 경로에서 정리 작업이 모두 실행되는지 확인합니다.
예제를 직접 확인하는 순서
코드를 그대로 읽는 데서 끝내지 말고 작은 콘솔 프로젝트에 옮겨 정상 입력과 잘못된 입력을 각각 실행해 보세요. 컴파일 오류와 실행 중 예외는 원인이 다릅니다. 경고가 표시되면 무시하지 말고 사용 중인 .NET과 C# 언어 버전도 확인합니다.
예제의 이름과 출력 문장은 바꿔도 핵심 형식과 호출 구조는 유지해야 해요. 한 줄씩 수정하면서 결과가 왜 달라지는지 기록하면 문법을 외우는 것보다 오래 남습니다. 운영 코드에 적용하기 전에는 null, 빈 값, 예상 범위를 벗어난 값도 별도 테스트로 확인하세요.
자주 묻는 질문
기존 글의 게시일과 URL은 바뀌나요?
아니요. 이 글은 기존 게시물을 보완한 것이며 원래 공개 URL을 유지합니다.
화면이 글과 다르면 어떻게 하나요?
서비스 화면과 메뉴는 바뀔 수 있으므로 글의 원리와 공식 문서를 먼저 확인하고 현재 화면에서 같은 기능명을 찾으세요.
한 번 설정하면 다시 확인하지 않아도 되나요?
버전·정책·환경이 바뀔 수 있습니다. 업데이트나 스킨 변경 뒤에는 핵심 동작을 다시 점검하는 편이 안전합니다.
공식 자료
이 글은 기존 게시물의 URL과 기록 가치를 유지하면서 현재 독자가 실행할 수 있도록 내용을 다시 확인해 보완했습니다.
댓글
댓글 쓰기