본문 바로가기
Programming

C# 예외 처리

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 12. 14.
반응형

예외 처리

try, catch, finally

   C#에서는 예외 처리 메커니즘을 사용하여 프로그램의 비정상적인 상황을 처리할 수 있습니다. 예외는 `try`, `catch`, `finally` 구문을 사용하여 처리합니다.

예외 처리 구조

- `try`: 예외가 발생할 수 있는 코드 블록을 작성합니다. - `catch`: 예외가 발생했을 때 그 예외를 처리합니다. - `finally`: 예외 발생 여부와 관계없이 항상 실행되는 블록입니다.


try
{
    int result = 10 / 0;  // 0으로 나누기
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("예외 발생: " + ex.Message);
}
finally
{
    Console.WriteLine("이 코드는 예외 발생 여부와 상관없이 실행됩니다.");
}

위 코드에서 0으로 나누기 예외가 발생하지만, `catch`에서 예외를 처리하고 `finally` 블록이 항상 실행됩니다.

예외 클래스 상속 및 사용자 정의 예외

   C#에서는 기본 예외 클래스인 `Exception`을 상속하여 사용자 정의 예외를 만들 수 있습니다. 이를 통해 애플리케이션에서 발생하는 특정한 예외를 처리할 수 있습니다.

사용자 정의 예외 클래스


public class InvalidAgeException : Exception
{
    public InvalidAgeException(string message) : base(message) { }
}

class Program
{
    static void Main()
    {
        try
        {
            throw new InvalidAgeException("나이가 유효하지 않습니다.");
        }
        catch (InvalidAgeException ex)
        {
            Console.WriteLine("사용자 정의 예외 발생: " + ex.Message);
        }
    }
}

위 코드에서는 `InvalidAgeException`이라는 사용자 정의 예외를 만들고, 이를 `throw`를 사용하여 발생시켰습니다. 사용자 정의 예외를 사용하면 프로그램에서 더 구체적인 예외 처리가 가능합니다.

예외의 전파

   예외는 발생한 지점에서 즉시 처리하지 않으면 호출자에게 전파됩니다. 예외를 처리하지 않으면 프로그램의 상위 수준으로 전파되어, `catch`가 있는 곳에서 처리될 때까지 전달됩니다.

예외 전파 예제


public class Program
{
    static void Main()
    {
        try
        {
            Method1();
        }
        catch (Exception ex)
        {
            Console.WriteLine("예외 처리: " + ex.Message);
        }
    }

    static void Method1()
    {
        Method2();
    }

    static void Method2()
    {
        throw new Exception("예외가 Method2에서 발생");
    }
}

`Method2`에서 예외가 발생하고, 이 예외는 `Method1`을 거쳐 `Main` 메서드로 전파되어 최종적으로 `catch`에서 처리됩니다.

 

반응형

'Programming' 카테고리의 다른 글

C# 모듈화와 테스트  (65) 2025.12.16
C# 파일 입출력  (31) 2025.12.15
C# NET Core  (0) 2025.12.13
C# WPF/WinForms UI 프로그래밍  (0) 2025.12.12
C# LINQ(Language Integrated Query)  (0) 2025.12.11