학습
C# 예외 처리 기본
C# 예외 처리 기본 — 초급
예외 처리 기본
1. 도입 (왜 배워야 하는가)
C#에서 예외 처리는 프로그램의 안정성과 신뢰성을 높이는 중요한 요소입니다. 실무에서는 예외가 발생할 수 있는 다양한 상황이 존재하며, 이를 적절히 처리하지 않으면 프로그램이 갑자기 종료되거나 예상치 못한 결과를 초래할 수 있습니다. 예를 들어, 사용자로부터 입력을 받을 때 잘못된 데이터가 입력되면 프로그램이 중단될 수 있습니다. 이러한 문제를 예방하기 위해 예외 처리 기법을 배워야 합니다.
예외 처리를 모르면 프로그램이 사용자의 실수를 처리하지 못하고, 이로 인해 불편함을 초래하거나, 데이터 손실, 심지어는 시스템 전체의 오류를 발생시킬 수 있습니다. 따라서, 예외 처리는 소프트웨어 개발에서 반드시 익혀야 할 필수적인 기술입니다.
2. 핵심 개념 설명
예외 처리란 프로그램 실행 중 발생할 수 있는 오류를 관리하고, 프로그램의 흐름을 통제하는 기법입니다. 주요 개념은 다음과 같습니다:
- 예외 (Exception): 프로그램 실행 중 발생할 수 있는 오류의 객체입니다. 예를 들어, 파일을 찾을 수 없거나, 배열의 범위를 초과하는 경우 등이 있습니다.
- try 블록: 예외가 발생할 수 있는 코드를 감싸는 블록으로, 이 안에서 오류가 발생하면 catch 블록으로 제어가 넘어갑니다.
- catch 블록: try 블록에서 발생한 예외를 처리하는 블록입니다. 발생한 예외에 대해 적절한 조치를 취할 수 있습니다.
- finally 블록: 예외 발생 여부와 관계없이 항상 실행되는 블록입니다. 주로 자원 해제와 같은 정리 작업에 사용됩니다.
try블록 내에서 사용자로부터 입력을 받습니다.- 사용자가 숫자가 아닌 값을 입력하면
Convert.ToInt32메서드에서FormatException이 발생합니다. catch블록이 실행되며 오류 메시지를 출력합니다.finally블록이 실행되어 프로그램 종료 메시지를 출력합니다.- 잘못된 코드
- 올바른 코드
- 잘못된 코드
- 올바른 코드
- 예외 처리는 프로그램의 안정성을 높여준다.
try,catch,finally블록을 통해 예외를 관리한다.- 실무에서 자주 발생하는 예외 처리 패턴을 익히는 것이 중요하다.
| 용어 | 설명 |
|---|---|
| Exception | 프로그램 실행 중 발생할 수 있는 오류 객체 |
| try | 예외가 발생할 가능성이 있는 코드 블록 |
| catch | 예외를 처리하는 코드 블록 |
| finally | 항상 실행되는 코드 블록 |
3. 기본 코드 예제
using System;
class Program
{
static void Main()
{
try
{
Console.WriteLine("숫자를 입력하세요: ");
int number = Convert.ToInt32(Console.ReadLine()); // 사용자 입력을 정수로 변환
Console.WriteLine($"입력한 숫자는: {number}");
}
catch (FormatException ex) // 형식 예외 처리
{
Console.WriteLine("잘못된 형식입니다. 숫자를 입력하세요."); // 오류 메시지 출력
}
finally
{
Console.WriteLine("프로그램이 종료됩니다."); // 항상 실행되는 메시지
}
}
}
실행 결과
숫자를 입력하세요:
abc
잘못된 형식입니다. 숫자를 입력하세요.
프로그램이 종료됩니다.
4. 실전 활용 예제
예제 1: 파일 읽기
쇼핑몰에서 제품 정보를 파일에서 읽어오는 경우, 파일이 존재하지 않거나 읽기 권한이 없을 때 예외가 발생할 수 있습니다.
try
{
string content = System.IO.File.ReadAllText("products.txt");
Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException ex)
{
Console.WriteLine("파일을 찾을 수 없습니다.");
}
예제 2: 데이터베이스 연결
사용자가 잘못된 데이터베이스 연결 정보를 제공했을 때 예외를 처리하는 방법입니다.
try
{
// 데이터베이스 연결 코드
}
catch (System.Data.SqlClient.SqlException ex)
{
Console.WriteLine("데이터베이스 연결에 실패했습니다.");
}
5. 흔한 실수와 주의사항
실수 1: catch 블록을 생략하기
try
{
int number = Convert.ToInt32(Console.ReadLine());
}
try
{
int number = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException ex)
{
Console.WriteLine("잘못된 형식입니다.");
}
try 블록에 대한 catch 블록이 없으면 예외가 발생해 프로그램이 종료됩니다.
실수 2: 예외를 무시하기
try
{
int number = Convert.ToInt32(Console.ReadLine());
}
catch
{
// 예외를 무시
}
try
{
int number = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException ex)
{
Console.WriteLine("잘못된 형식입니다.");
}
catch 블록을 비워두면 문제가 무엇인지 알 수 없습니다.
6. 정리
다음에 학습하면 좋은 주제는 커스텀 예외 처리, 비동기 예외 처리, 예외 로깅입니다.