본문 바로가기

Programming Language/C#

[C#] 예외처리(Exception) [ try, catch, finally ]

  • 예외(Exception) 은 프로그램 실행 중에 발생하는 예상치 못한 문제를 나타낸다.
  • 예외 처리는 try, catch, finally 블록을 사용하여 구현된다.
  • 여러 catch 를 사용하는 이유는 각 Exception 유형에 따라 서로 다른 에러 핸들링을 하기 위함이다.

예시코드 1. [ 숫자를 나누는 프로그램에서 예외를 처리하는 방법 ]


using System;

class Program
{
    static void Main()
    {
        try
        {
            DivideNumbers(10, 0);
        }
        catch (DivideByZeroException ex)
        {
            Console.WriteLine($"예외 발생: {ex.Message}");
        }
        finally
        {
            Console.WriteLine("Finally 블록 - 항상 실행됨");
        }
    }

    static void DivideNumbers(int dividend, int divisor)
    {
        if (divisor == 0)
        {
            throw new DivideByZeroException("0으로 나눌 수 없습니다.");
        }

        int result = dividend / divisor;
        Console.WriteLine($"나눈 결과: {result}");
    }
}

예시코드 2. 여러 예외 타입에 대한 **catch** 블록 사용예제


  • 모든 Exception 을 잡고 싶을 때에는 **Exception** 또는 **chtch{…}** 와 같이 하면 된다.
  • **ArgumentException** : 메서드에 전달된 인수(Argument) 가 예상되는 형식과 일치하지 않을때 발생한다. 즉, 인수에 대한 유효성 검사를 통과하지 못할 때 이 예외가 발생합니다.
  • **DivideByZeroException** : 주로 산술 연산에서 나눗샘을 수행할때 0으로 나누려고 할 때 발생하며, 이는 수학적으로 정의되지 않기 때문에 예외로 처리된다.
try
{
    // 예외가 발생할 수 있는 코드
}
catch (DivideByZeroException ex)
{
    Console.WriteLine($"DivideByZeroException 발생: {ex.Message}");
}
catch (ArgumentException ex) 
{
    Console.WriteLine($"ArgumentException 발생: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"기타 예외 발생: {ex.Message}");
}
finally
{
    // 항상 실행되는 코드
}