C# 사용자 정의 예외란?
다른 프로그래밍 언어와 마찬가지로 C#에서도 개발자가 필요에 따라 직접 예외를 정의해 사용할 수 있습니다. 이렇게 스스로 만들어 사용하는 예외를 사용자 정의 예외(User-defined Exception), 즉 커스텀 예외(Custom Exception)라고 부릅니다.
사용자 정의 예외 클래스는 .NET의 Exception 클래스를 상속받아 작성합니다. 기본 제공 예외만으로는 애플리케이션 고유의 오류 상황을 표현하기 어려울 때, 의미 있는 이름과 메시지를 가진 예외를 직접 정의하면 코드의 가독성과 유지보수성이 크게 향상됩니다.
아래 예제에서 등장하는 TempIsZeroException은 C#에 내장된 예외가 아니라, 직접 정의한 사용자 정의 예외입니다.
예제 코드
다음 코드를 실행하면 C#에서 사용자 정의 예외를 선언하고, 발생시키고, 처리하는 전체 과정을 확인할 수 있습니다.
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);
}
}
}실행 결과
TempIsZeroException: Zero Temperature found
코드 동작 원리
- 예외 클래스 정의:
TempIsZeroException은Exception클래스를 상속하며, 생성자에서base(message)를 호출해 예외 메시지를 상위 클래스로 전달합니다. - 예외 발생:
Temperature클래스의showTemp()메서드는 온도가 0일 때throw문을 사용해 사용자 정의 예외 객체를 생성하고 던집니다. - 예외 처리:
Main메서드의try-catch블록이 발생한 예외를 잡아(catch), 예외 객체의Message속성을 콘솔에 출력합니다.
이처럼 사용자 정의 예외를 활용하면 도메인에 특화된 오류 상황을 명확하게 표현할 수 있어, 예외 처리 로직을 더 직관적으로 구성할 수 있습니다.