Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 사용자 정의 예외(Exception) 만드는 방법 완벽 가이드

다른 프로그래밍 언어와 마찬가지로 C#에서도 개발자가 직접 사용자 정의 예외(User-defined Exception)를 손쉽게 만들 수 있습니다. 사용자 정의 예외 클래스는 .NET의 최상위 예외 클래스인 Exception 클래스를 상속받아 작성합니다.

기본 제공 예외만으로는 애플리케이션의 특정 상황을 표현하기 어려울 때, 이처럼 직접 예외 클래스를 정의하면 오류의 의미를 명확하게 전달할 수 있고 코드의 가독성과 유지보수성도 크게 향상됩니다.

사용자 정의 예외의 기본 구조

사용자 정의 예외를 만드는 방법은 매우 간단합니다. 핵심은 다음과 같습니다.

  • Exception 클래스를 상속받는 새로운 클래스를 선언합니다.
  • 생성자에서 base(message)를 호출하여 예외 메시지를 부모 클래스에 전달합니다.
  • 필요한 시점에 throw 키워드로 해당 예외를 발생시킵니다.

아래 예제에서 생성되는 TempIsZeroException은 C#에 내장된 예외가 아니라, 온도가 0도일 때 발생하도록 직접 정의한 사용자 정의 예외입니다.

예제 코드

using System;
namespace Demo {
   class TestTemperature {
      static void Main(string[] args) {
         Temperature temp = new Temperature();
         try {
            temp.showTemp();
         } catch(TempIsZeroException e) {
            Console.WriteLine("TempIsZeroException: {0}", e.Message);
         }
         Console.ReadKey();
      }
   }
}
public class TempIsZeroException: Exception {
   public TempIsZeroException(string message): base(message) {
   }
}
public class Temperature {
   int temperature = 0;
   public void showTemp() {
      if(temperature == 0) {
         throw (new TempIsZeroException("Zero Temperature found"));
      } else {
         Console.WriteLine("Temperature: {0}", temperature);
      }
   }
}

코드 설명

  1. TempIsZeroException 클래스: Exception을 상속받아 정의된 사용자 정의 예외입니다. 생성자에서 문자열 메시지를 받아 base(message)로 전달합니다.
  2. Temperature 클래스: 온도 값을 저장하고, showTemp() 메서드에서 온도가 0이면 throw 문으로 TempIsZeroException을 발생시킵니다.
  3. Main 메서드: try-catch 블록으로 예외를 처리하며, catch 블록에서 예외 객체의 Message 속성을 출력합니다.

실행 결과

TempIsZeroException: Zero Temperature found

온도 값이 0이므로 showTemp() 메서드가 실행될 때 사용자 정의 예외가 발생하고, catch 블록에서 정의한 메시지가 그대로 출력되는 것을 확인할 수 있습니다.

마무리

이처럼 C#에서는 Exception 클래스를 상속하는 것만으로 간단히 사용자 정의 예외를 만들 수 있습니다. 비즈니스 로직에 특화된 오류 상황(예: 잔액 부족, 유효하지 않은 입력값 등)을 처리할 때 사용자 정의 예외를 활용하면, 오류 원인을 더 명확하게 표현하고 디버깅과 로깅에도 큰 도움이 됩니다.