IMCAT.DEV
로그인 가입
C# 입문 문법

C# 예외 처리 기본

C# 예외 처리 기본 — 초급

예외 처리 기본

1. 도입 (왜 배워야 하는가)

C#에서 예외 처리는 프로그램의 안정성과 신뢰성을 높이는 중요한 요소입니다. 실무에서는 예외가 발생할 수 있는 다양한 상황이 존재하며, 이를 적절히 처리하지 않으면 프로그램이 갑자기 종료되거나 예상치 못한 결과를 초래할 수 있습니다. 예를 들어, 사용자로부터 입력을 받을 때 잘못된 데이터가 입력되면 프로그램이 중단될 수 있습니다. 이러한 문제를 예방하기 위해 예외 처리 기법을 배워야 합니다.

예외 처리를 모르면 프로그램이 사용자의 실수를 처리하지 못하고, 이로 인해 불편함을 초래하거나, 데이터 손실, 심지어는 시스템 전체의 오류를 발생시킬 수 있습니다. 따라서, 예외 처리는 소프트웨어 개발에서 반드시 익혀야 할 필수적인 기술입니다.

2. 핵심 개념 설명

예외 처리란 프로그램 실행 중 발생할 수 있는 오류를 관리하고, 프로그램의 흐름을 통제하는 기법입니다. 주요 개념은 다음과 같습니다:

  1. 예외 (Exception): 프로그램 실행 중 발생할 수 있는 오류의 객체입니다. 예를 들어, 파일을 찾을 수 없거나, 배열의 범위를 초과하는 경우 등이 있습니다.
  2. try 블록: 예외가 발생할 수 있는 코드를 감싸는 블록으로, 이 안에서 오류가 발생하면 catch 블록으로 제어가 넘어갑니다.
  3. catch 블록: try 블록에서 발생한 예외를 처리하는 블록입니다. 발생한 예외에 대해 적절한 조치를 취할 수 있습니다.
  4. finally 블록: 예외 발생 여부와 관계없이 항상 실행되는 블록입니다. 주로 자원 해제와 같은 정리 작업에 사용됩니다.
  5. 용어설명
    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
    잘못된 형식입니다. 숫자를 입력하세요.
    프로그램이 종료됩니다.
    • try 블록 내에서 사용자로부터 입력을 받습니다.
    • 사용자가 숫자가 아닌 값을 입력하면 Convert.ToInt32 메서드에서 FormatException이 발생합니다.
    • catch 블록이 실행되며 오류 메시지를 출력합니다.
    • finally 블록이 실행되어 프로그램 종료 메시지를 출력합니다.
    • 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. 정리

    • 예외 처리는 프로그램의 안정성을 높여준다.
    • try, catch, finally 블록을 통해 예외를 관리한다.
    • 실무에서 자주 발생하는 예외 처리 패턴을 익히는 것이 중요하다.

다음에 학습하면 좋은 주제는 커스텀 예외 처리, 비동기 예외 처리, 예외 로깅입니다.