반응형
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("리소스가 해제되었습니다.");
}
}
}
참고할 수 있는 레퍼런스 사이트
- Microsoft Docs: C# 예외 처리
- 설명: C#에서의 예외 처리에 대한 공식 문서로, 다양한 예제와 상세한 설명이 포함되어 있습니다.
- 링크: https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/try-catch
- Stack Overflow: C# 예외 처리 질문과 답변
- 설명: 개발자들이 예외 처리에 대해 질문하고 답변하는 곳으로, 다양한 사례와 팁을 얻을 수 있습니다.
- 링크: https://stackoverflow.com/questions/tagged/c%23+exception
반응형
'코딩취미 > C,C++' 카테고리의 다른 글
InvokeRequired를 사용하는 이유 (사용해야 할 상황 + 사용하면 안되는 상황) (0) | 2024.08.28 |
---|---|
프로그래밍 goto의 오해와 진실, 구조적 패턴 10가지 (0) | 2024.08.27 |
Null 조건부 연산자 사용방법 정리 : _PopUp?.Close() 코드, ? (물음표)연산자 (0) | 2024.08.08 |
Visual Studio의 개발 역사와 특이점 (0) | 2024.08.02 |
Visual Studio Code 특징과 Professional, Community 비교 + 적합한 /비적합한 개발분야 (0) | 2024.08.01 |