학습
C# 에러 처리 심화
C# 에러 처리 심화 — 중급
에러 처리 심화
1. 도입 (왜 배워야 하는가)
에러 처리는 소프트웨어 개발에서 매우 중요한 부분입니다. 실제로 프로그램이 예상치 못한 상황에 직면했을 때, 적절한 에러 처리를 하지 않으면 프로그램이 비정상적으로 종료되거나 잘못된 결과를 반환할 수 있습니다. 예를 들어, 쇼핑몰 애플리케이션에서 사용자가 결제 정보를 입력할 때, 네트워크 문제로 인해 결제가 실패할 수 있습니다. 이때 적절한 에러 처리가 없다면 사용자에게 혼란을 줄 수 있으며, 결과적으로 비즈니스 손실로 이어질 수 있습니다.
따라서 에러 처리 기법을 배우는 것은 안정적인 소프트웨어를 개발하기 위해 필수적입니다. 에러 처리를 제대로 하지 않으면 디버깅이 어려워지고, 유지 보수 비용이 증가하며, 사용자 경험이 저하될 수 있습니다.
2. 핵심 개념 설명
에러 처리의 핵심 개념은 크게 세 가지로 나눌 수 있습니다: 예외(Exception), 예외 처리(Exception Handling), 사용자 정의 예외(Custom Exception).
| 개념 | 정의 |
|---|---|
| 예외 (Exception) | 프로그램 실행 중 발생하는 오류를 나타내는 객체입니다. 일반적으로 시스템에서 발생하는 오류를 관리합니다. |
| 예외 처리 (Exception Handling) | 프로그램에서 예외가 발생했을 때, 이를 어떻게 처리할지를 정의하는 방법입니다. try-catch 블록을 사용하여 구현합니다. |
| 사용자 정의 예외 (Custom Exception) | 특정 조건에서 발생할 수 있는 예외를 직접 정의하여 사용할 수 있는 방법입니다. 이는 코드의 가독성을 높이고, 유지 보수를 용이하게 합니다. |
비유
예외는 마치 도로에서의 사고와 같습니다. 사고가 발생했을 때, 이를 처리하는 방법(예: 경찰 호출, 응급차 요청 등)이 바로 예외 처리입니다. 특정 상황에서 사고가 자주 발생하는 경우, 이를 사전에 대비하는 것이 사용자 정의 예외와 같습니다.
3. 기본 코드 예제
기본적인 예외 처리 구조를 보여주는 코드입니다.
using System;
class Program
{
static void Main()
{
try
{
int numerator = 10;
int denominator = 0;
int result = numerator / denominator; // 여기서 예외 발생
Console.WriteLine($"결과: {result}");
}
catch (DivideByZeroException ex)
{
Console.WriteLine("0으로 나눌 수 없습니다!"); // 예외 처리
}
}
}
실행 결과
0으로 나눌 수 없습니다!
코드 한 줄씩 동작 설명
try블록 시작: 예외가 발생할 수 있는 코드를 작성합니다.int result = numerator / denominator;: 0으로 나누기를 시도하여DivideByZeroException예외가 발생합니다.catch블록 시작: 예외가 발생하면 이 블록으로 넘어갑니다.Console.WriteLine("0으로 나눌 수 없습니다!");: 예외에 대한 메시지를 출력합니다.- 잘못된 코드: 예외 발생 시 아무런 처리를 하지 않으면 문제의 원인을 찾기 어려워집니다.
- 올바른 코드: 예외를 로그에 기록하거나 사용자에게 적절한 메시지를 표시해야 합니다.
- 잘못된 코드: 예외가 발생한 종류에 맞는 catch 블록을 사용해야 합니다.
- 올바른 코드: 발생할 수 있는 예외에 맞는 catch 블록을 사용해야 합니다.
- 에러 처리는 소프트웨어의 안정성을 높이는 중요한 요소입니다.
- 예외 처리 구조인 try-catch 블록을 활용하여 오류를 관리합니다.
- 사용자 정의 예외를 통해 코드의 가독성과 유지 보수를 향상시킬 수 있습니다.
- 다음에 학습하면 좋은 주제: 비동기 프로그래밍에서의 예외 처리, 로그 기록 및 에러 모니터링 기법.
4. 실전 활용 예제
예제 1: 파일 입출력에서의 예외 처리
쇼핑몰에서 사용자 데이터 파일을 읽어올 때 발생할 수 있는 예외를 처리하는 예제입니다.
using System;
using System.IO;
class Program
{
static void Main()
{
try
{
string[] lines = File.ReadAllLines("users.txt"); // 파일 읽기
foreach (string line in lines)
{
Console.WriteLine(line); // 사용자 목록 출력
}
}
catch (FileNotFoundException ex)
{
Console.WriteLine("파일을 찾을 수 없습니다!"); // 예외 처리
}
}
}
예제 2: 데이터베이스 연결에서의 예외 처리
쇼핑몰의 데이터베이스에 연결할 때 발생할 수 있는 예외를 처리하는 예제입니다.
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
try
{
using (SqlConnection connection = new SqlConnection("ConnectionString"))
{
connection.Open(); // 데이터베이스 연결
// 데이터베이스 작업 수행
}
}
catch (SqlException ex)
{
Console.WriteLine("데이터베이스에 연결할 수 없습니다!"); // 예외 처리
}
}
}
5. 흔한 실수와 주의사항
실수 1: catch 블록에서 예외를 무시하기
catch (Exception ex)
{
// 아무것도 하지 않음
}
실수 2: 잘못된 예외 타입 사용
catch (ArgumentOutOfRangeException ex)
{
// 잘못된 예외 타입
}