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

C# 사용자 정의 예외(User-defined Exception) 완벽 가이드 – 예제 코드로 쉽게 이해하기

C# 예외(Exception)란 무엇인가?

예외(Exception)는 프로그램 실행 중에 발생하는 문제를 의미합니다. C#에서 예외란 프로그램이 실행되는 도중에 발생하는 비정상적인 상황에 대한 대응을 말하며, 대표적인 예로 0으로 나누기를 시도하는 경우가 있습니다.

C#은 기본적으로 다양한 내장 예외 클래스를 제공하지만, 때로는 애플리케이션의 특정 요구 사항에 맞는 예외 처리가 필요합니다. 이럴 때 직접 예외를 정의할 수 있으며, 이를 사용자 정의 예외(User-defined Exception)라고 합니다.

사용자 정의 예외 클래스 만들기

사용자 정의 예외 클래스는 반드시 Exception 클래스로부터 상속받아야 합니다. 상속을 통해 기존 예외 시스템과 자연스럽게 통합되며, try-catch 블록에서 일반 예외처럼 처리할 수 있습니다.

다음은 사용자 정의 예외를 구현한 전체 예제입니다.

예제 코드

using System;

namespace UserDefinedException {
    class TestFitness {
        static void Main(string[] args) {
            Fitness f = new Fitness();
            try {
                f.showResult();
            } catch(FitnessTestFailedException e) {
                Console.WriteLine("User defined exception: {0}", e.Message);
            }
            Console.ReadKey();
        }
    }
}

public class FitnessTestFailedException: Exception {
    public FitnessTestFailedException(string message): base(message) {
    }
}

public class Fitness {
    int points = 0;

    public void showResult() {
        if(points < 110) {
            throw (new FitnessTestFailedException("Player failed the fitness test!"));
        } else {
            Console.WriteLine("Player passed the fitness test!");
        }
    }
}

코드 설명

위 예제에서 핵심 부분은 바로 사용자 정의 예외 클래스입니다.

public class FitnessTestFailedException: Exception {
    public FitnessTestFailedException(string message): base(message) {
    }
}

FitnessTestFailedException 클래스는 Exception 클래스를 상속받아 정의되었습니다. 생성자는 문자열 형태의 메시지를 매개변수로 받아 base(message)를 통해 부모 클래스인 Exception에 전달합니다. 이렇게 하면 예외 발생 시 Message 속성을 통해 오류 메시지를 확인할 수 있습니다.

Fitness 클래스의 showResult() 메서드에서는 점수(points)가 110 미만일 경우 throw 키워드를 사용하여 사용자 정의 예외를 강제로 발생시킵니다. 반대로 조건을 충족하면 통과 메시지를 출력합니다.

Main 메서드에서는 try-catch 블록을 통해 발생한 예외를 잡아(catch) 처리하며, 예외 객체의 Message 속성 값을 콘솔에 출력합니다. 이처럼 사용자 정의 예외를 활용하면 비즈니스 로직에 특화된 의미 있는 오류 정보를 명확하게 전달할 수 있습니다.

정리

  • 예외는 프로그램 실행 중 발생하는 비정상적인 상황입니다.
  • 사용자 정의 예외 클래스는 Exception 클래스를 상속하여 만듭니다.
  • throw 키워드로 예외를 발생시키고, try-catch 블록으로 처리합니다.
  • 도메인별 맞춤형 오류 메시지를 제공하여 코드의 가독성과 유지보수성을 높일 수 있습니다.