프로그래밍 언어/C#

C# 예외 처리 try catch와 오류 메시지 처리 방법 - C# 16

eco7T 2024. 10. 23. 13:53
반응형

이 글은 C# 프로그래밍 언어에서 예외 처리(Exception Handling)를 설명하는 학습서입니다. 목적은 예외 처리의 기본 개념, C#에서의 구현 방법, 실용적인 코딩 예제 등을 통해 개발자들에게 프로그램의 안정성과 견고성을 높이는 방법을 가르치는 것입니다. 이 학습서는 초보부터 중급 수준의 프로그래머가 예외 처리의 중요성을 이해하고, 이를 효과적으로 구현할 수 있도록 돕는 데 초점을 맞추고 있습니다.

C# 예외 처리 try catch
C# 예외 처리 try catch

 

C# 프로그래밍 언어의 예외 처리

프로그램을 작성하다 보면 예기치 못한 상황이 발생할 수 있습니다. 예를 들어, 사용자가 숫자가 아닌 문자를 입력했을 때, 파일을 읽으려는데 파일이 존재하지 않을 때, 혹은 네트워크 연결이 끊어졌을 때 등이 있습니다. 이러한 예기치 못한 상황을 예외(Exception)라고 부르며, 이러한 상황이 발생했을 때 프로그램이 갑자기 멈추지 않고 정상적으로 처리되도록 하는 것을 예외 처리(Exception Handling)라고 합니다.

 

반응형

 

  예외 처리가 중요한 이유

예외 처리는 프로그램이 갑작스럽게 종료되는 것을 방지하고, 사용자에게 친절한 오류 메시지를 제공하며, 오류 발생 후에도 프로그램이 안정적으로 실행될 수 있도록 합니다. 예외 처리를 통해 예상하지 못한 상황에 대한 대비책을 마련해 두면, 더 견고하고 안정적인 프로그램을 만들 수 있습니다.

 

  예외 처리 방법

C#에서는 try catch 구문을 사용하여 예외를 처리합니다. 기본적인 구조는 다음과 같습니다.

try { // 예외가 발생할 가능성이 있는 코드 } catch (Exception ex) { // 예외가 발생했을 때 실행할 코드 Console.WriteLine($"오류가 발생했습니다: {ex.Message}"); }

 

 

 

 

 

 

try 블록

  • try 블록 안에는 예외가 발생할 가능성이 있는 코드를 작성합니다. 예를 들어, 파일을 열거나, 사용자 입력을 처리하는 등의 작업이 여기에 해당됩니다.

catch 블록

  • catch 블록은 예외가 발생했을 때 실행됩니다. Exception 클래스는 모든 예외의 기본 클래스이며, ex.Message는 예외의 상세한 정보를 담고 있어 어떤 오류가 발생했는지 사용자에게 알려줄 수 있습니다.

예제

  • 아래의 예제는 사용자가 숫자를 입력하도록 요청하는 코드입니다. 사용자가 숫자가 아닌 문자를 입력했을 때 예외를 처리하도록 작성되어 있습니다.
using System; class Program { static void Main() { try { Console.Write("숫자를 입력하세요: "); int number = Convert.ToInt32(Console.ReadLine()); Console.WriteLine($"입력한 숫자는 {number}입니다."); } catch (FormatException ex) { Console.WriteLine("올바른 숫자를 입력하지 않았습니다. 다시 시도해 주세요."); Console.WriteLine($"오류 메시지: {ex.Message}"); } } }
  • try 블록: 사용자가 입력한 값을 Convert.ToInt32 메서드를 사용해 정수로 변환합니다. 이 과정에서 사용자가 숫자가 아닌 값을 입력하면 예외가 발생합니다.
  • catch (FormatException ex): 숫자로 변환할 수 없는 경우 FormatException 예외가 발생합니다. 이 예외를 처리하여 사용자에게 "올바른 숫자를 입력하지 않았습니다."라는 메시지를 출력합니다. ex.Message를 통해 예외에 대한 추가 정보를 확인할 수도 있습니다.

 

 

 

 

 

  여러 개의 catch 블록 사용하기

특정 상황에 따라 여러 종류의 예외를 처리해야 할 때가 있습니다. 예를 들어, 파일을 읽는 코드에서 파일이 없거나 접근 권한이 없을 때 발생하는 예외를 각각 다르게 처리할 수 있습니다.

using System; using System.IO; class Program { static void Main() { try { string content = File.ReadAllText("example.txt"); Console.WriteLine(content); } catch (FileNotFoundException ex) { Console.WriteLine("파일을 찾을 수 없습니다. 파일 이름을 확인해 주세요."); } catch (UnauthorizedAccessException ex) { Console.WriteLine("파일에 접근할 권한이 없습니다. 권한을 확인해 주세요."); } catch (Exception ex) { Console.WriteLine($"알 수 없는 오류가 발생했습니다: {ex.Message}"); } } }
  • catch (FileNotFoundException ex): 파일을 찾지 못했을 때 발생하는 예외를 처리합니다.
  • catch (UnauthorizedAccessException ex): 파일에 접근할 권한이 없을 때 발생하는 예외를 처리합니다.
  • catch (Exception ex): 그 외의 모든 예외를 처리합니다. 이 블록은 마지막에 작성해야 합니다.

 

  finally 블록

finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드 블록입니다. 주로 파일이나 데이터베이스 연결을 닫는 등 리소스를 정리하는 데 사용됩니다.

try { // 예외가 발생할 수 있는 코드 } catch (Exception ex) { Console.WriteLine($"오류가 발생했습니다: {ex.Message}"); } finally { Console.WriteLine("프로그램이 종료됩니다."); }

 

  예외 던지기 (throw)

경우에 따라 예외를 직접 발생시켜야 할 때도 있습니다. 이를 throw 키워드를 사용하여 구현할 수 있습니다. 예를 들어, 매개변수로 전달된 값이 유효하지 않을 때 예외를 던질 수 있습니다.

void ValidateAge(int age) { if (age < 0) { throw new ArgumentOutOfRangeException("age", "나이는 0보다 작을 수 없습니다."); } }
반응형