C#

예외가 뭐길래? C# try-catch-finally 한 번에 정리

록's 2025. 4. 30. 09:24
728x90
반응형

C# 예외 처리(Exception Handling)란?

프로그래밍을 하다 보면 예상하지 못한 오류가 발생할 수 있습니다.
예를 들어, 파일이 없거나, 0으로 나누거나, 배열의 범위를 벗어난 값을 접근할 때 등 다양한 상황에서 예외(Exception)가 발생합니다.
C#에서는 이런 예외 상황을 안전하게 처리하기 위해 try-catch-finally 구문을 사용합니다.

1. 기본 구조

try 
{ 
// 예외가 발생할 수 있는 코드 
} 
catch (Exception ex) 
{
// 예외가 발생했을 때 실행할 코드 
} 
finally 
{ 
// 예외 발생 여부와 상관없이 항상 실행되는 코드 (선택) 
}
  • try 블록: 예외가 발생할 수 있는 코드를 작성합니다.
  • catch 블록: 예외가 발생했을 때 실행할 코드를 작성합니다.
    Exception ex는 발생한 예외 정보를 담고 있습니다.
  • finally 블록: 예외 발생 여부와 관계없이 항상 실행됩니다. (자원 해제 등)

2. 예제: 0으로 나누기

try
{
    int a = 10;
    int b = 0;
    int result = a / b; // 여기서 예외 발생
    Console.WriteLine(result);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("0으로 나눌 수 없습니다.");
    Console.WriteLine("예외 메시지: " + ex.Message);
}
finally
{
    Console.WriteLine("프로그램 종료");
}

실행 결과:

0으로 나눌 수 없습니다.
예외 메시지: 0으로 나눌 수 없습니다.
프로그램 종료

3. 여러 종류의 예외 처리

여러 종류의 예외가 발생할 수 있으므로, 여러 개의 catch 블록을 사용할 수 있습니다.

try
{
    // 예외 발생 가능 코드
}
catch (DivideByZeroException ex)
{
    // 0으로 나눌 때
}
catch (IndexOutOfRangeException ex)
{
    // 배열 인덱스 범위 벗어날 때
}
catch (Exception ex)
{
    // 그 외 모든 예외
}

4. 사용자 정의 예외

특정 상황에서 직접 예외를 발생시키고 싶을 때는 throw 키워드를 사용합니다.

 

if (age < 0)
{
    throw new ArgumentException("나이는 0보다 작을 수 없습니다.");
}

5. 실무에서의 예외 처리 팁

  • 불필요하게 모든 예외를 무시하지 마세요.!!
    catch (Exception ex) {}처럼 예외를 무시하면 문제의 원인을 찾기 어렵습니다.
  • 구체적인 예외를 먼저 처리하세요.!!
    예를 들어, DivideByZeroException, NullReferenceException 등 구체적인 예외부터 처리하고, 마지막에 Exception으로 모든 예외를 포괄하세요.
  • finally 블록을 활용해 자원 해제!!
    파일, 데이터베이스 연결 등은 finally에서 안전하게 닫아주세요.
  • 로그를 남기세요.!!
    예외 발생 시 로그를 남기면, 나중에 문제를 추적하기 쉽습니다.

마무리

예외 처리는 프로그램의 안정성과 신뢰성을 높이는 데 필수적인 요소입니다.
try-catch-finally 구조와 다양한 예외 처리 방법을 익혀두면, 실무에서 발생하는 다양한 오류 상황에 유연하게 대처할 수 있습니다.

728x90
반응형