본문 바로가기
코딩취미/C,C++

C#에서 예외 처리를 하는 5가지 방법(try-catch)

by 브링블링 2024. 8. 9.
반응형

C#에서 예외 처리를 하는 5가지 방법(try-catch)

C#은 강력한 예외 처리 메커니즘을 제공하여, 프로그램 실행 중 발생할 수 있는 오류나 예외 상황에 대해 보다 안전하게 대처할 수 있습니다. 이러한 예외 처리의 중심에는 try-catch 문이 있으며, 이 문법을 통해 개발자는 예외가 발생할 수 있는 코드를 보호하고, 예외가 발생했을 때 적절한 조치를 취할 수 있습니다.

 

이번 글에서는 C#에서 예외 처리를 수행하는 다섯 가지 방법을 알아보고, 각각의 방법이 어떠한 상황에서 유용한지에 대해 자세히 설명하겠습니다. 이를 통해 예외 처리의 중요성과 적용 방법을 명확하게 이해할 수 있을 것입니다.

 

C#에서 예외 처리를 하는 5가지 방법

1. 기본 try-catch 문 사용

  • 가장 기본적인 예외 처리 방식으로, try 블록 내에서 코드가 실행되며, 예외가 발생하면 catch 블록이 실행됩니다.
try
{
    // 예외가 발생할 수 있는 코드
}
catch (Exception ex)
{
    // 예외 처리 코드
}

 

2. catch 블록에서 특정 예외 타입 처리

  • 특정 예외 타입에 대해서만 처리하는 방법입니다. 예외의 종류에 따라 서로 다른 처리를 할 수 있습니다.
try
{
    // 예외가 발생할 수 있는 코드
}
catch (ArgumentNullException ex)
{
    // ArgumentNullException에 대한 처리
}
catch (InvalidOperationException ex)
{
    // InvalidOperationException에 대한 처리
}

 

3. finally 블록 사용

  • finally 블록은 예외 발생 여부와 상관없이 항상 실행되는 코드 블록입니다. 주로 리소스를 정리하는 데 사용됩니다.
try
{
    // 예외가 발생할 수 있는 코드
}
catch (Exception ex)
{
    // 예외 처리 코드
}
finally
{
    // 항상 실행되는 코드 (예: 파일 닫기, 연결 해제 등)
}

 

4. 예외 재발생 (rethrow)

  • 예외를 처리한 후 다시 발생시키는 방법입니다. 상위 호출자에게 예외를 전달하여, 더 높은 수준에서 처리할 수 있도록 합니다.
try
{
    // 예외가 발생할 수 있는 코드
}
catch (Exception ex)
{
    // 로깅 등의 작업 수행
    throw; // 예외를 다시 던짐
}

 

5. 사용자 정의 예외 처리

  • 필요에 따라 사용자 정의 예외를 만들어서 예외를 발생시키고 처리할 수 있습니다.
public class CustomException : Exception
{
    public CustomException(string message) : base(message) { }
}

try
{
    throw new CustomException("사용자 정의 예외 발생");
}
catch (CustomException ex)
{
    // 사용자 정의 예외 처리
}

 

반응형

try exception이 필요한 이유와 필요한 상황

상황 필요 이유
외부 리소스 접근
(파일, 네트워크 등)
파일이 존재하지 않거나 네트워크 오류 발생 시 프로그램이 비정상 종료되지 않도록 하기 위해 필요
데이터베이스 접근 데이터베이스 연결 실패나 쿼리 오류 발생 시 프로그램이 안정적으로 오류를 처리하기 위해 필요
사용자 입력 처리 사용자가 잘못된 데이터를 입력했을 때 프로그램이 오류 없이 실행을 계속하기 위해 필요
시스템 리소스 사용 메모리 부족 등 시스템 자원 문제 발생 시 프로그램이 비정상 종료되지 않도록 하기 위해 필요
API 호출 외부 API 호출 시 오류가 발생할 수 있으며, 이를 안전하게 처리하여 프로그램의 안정성을 높이기 위해 필요

 


try exception을 적용한 예제

아래는 파일을 읽는 코드에 try-catch를 적용한 예제입니다.

 

1. 기본 코드

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = "example.txt";
        string content = File.ReadAllText(path);
        Console.WriteLine(content);
    }
}

 

2. 예외 처리 추가

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = "example.txt";
        try
        {
            string content = File.ReadAllText(path);
            Console.WriteLine(content);
        }
        catch (FileNotFoundException ex)
        {
            Console.WriteLine("파일을 찾을 수 없습니다: " + ex.Message);
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine("파일에 접근할 수 없습니다: " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("예기치 않은 오류가 발생했습니다: " + ex.Message);
        }
    }
}

 

3. finally 블록 추가

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = "example.txt";
        StreamReader reader = null;
        try
        {
            reader = new StreamReader(path);
            string content = reader.ReadToEnd();
            Console.WriteLine(content);
        }
        catch (FileNotFoundException ex)
        {
            Console.WriteLine("파일을 찾을 수 없습니다: " + ex.Message);
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine("파일에 접근할 수 없습니다: " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("예기치 않은 오류가 발생했습니다: " + ex.Message);
        }
        finally
        {
            if (reader != null)
                reader.Close(); // 리소스 정리
            Console.WriteLine("리소스가 해제되었습니다.");
        }
    }
}

 

참고할 수 있는 레퍼런스 사이트

  1. Microsoft Docs: C# 예외 처리
  2. Stack Overflow: C# 예외 처리 질문과 답변
반응형