[C# 문법] 예외 필터 사용방법

1. 예외 필터

  • C# 6.0 부터 catch 절이 받아들일 예외 객체에 제약 사항을 명시해서 해당 조건을 만족하는 예외 객체에 대해서만 예외 처리 코드를 실행할 수 있도록 예외 필터(Exception Filter) 가 도입되었습니다.
  • 예외 필터는 catch 문 이후에 when 키워드를 이용하여 구성하게 되는데 catch 문에 지정한 예외 타입에 대해서만 필터가 수행됩니다. (when을 if라고 생각하면 됩니다.)
  • 다음은 예외 필터를 이용한 예제 코드입니다.
using System;

namespace Chapter49
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "-6";

            try
            {
                int num = Int32.Parse(input);

                if (num < 0 || num > 10)
                {
                    throw new FilterableException()
                    {
                        ErrorNo = num
                    };
                }
                else
                {
                    Console.WriteLine($"Output : {num}");
                }
            }
            catch (FilterableException e) when (e.ErrorNo < 0)
            {
                Console.WriteLine("입력된 수가 0보다 작으면 안됩니다");
            }
            catch (FilterableException e) when (e.ErrorNo > 10)
            {
                Console.WriteLine("입력된 수가 10보다 크면 안됩니다");
            }
            finally
            {
                Console.WriteLine("프로그램 종료");
            }
        }
    }

    public class FilterableException : Exception
    {
        public int ErrorNo { get; set; }
    }
}
입력된 수가 0보다 작으면 안됩니다
  • 컴파일러는 스택 되감기(stack unwinding) 를 수행하기 이전에 예외 필터를 수행하도록 코드를 생성합니다.
  • when 절에서는 예외에 대한 위치를 알고 있기 때문에 호출 스택이나 지역변수 등에 대한 모든 정보에 접근할 수 있습니다.
  • 만약 예외 필터가 false를 반환하면 런타임은 콜 스택을 따라 올라가면서 앞서 발생한 예외의 타입에 부합하는 catch문을 계속 찾아 나갑니다.

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY