본문 바로가기

개인공부/C#

[C#] 예외(Exception)

 

■ 예외(Exception) :

 예외(Exception)란 프로그램의 실행 흐름을 벗어난 것으로 적절한 예외 처리(Exception Handling)를 하지 않으면 예외(Exception)에 의해서 오류(Error)가 발생 혹은 프로그램의 강제 중단이 발생하게 됩니다.

 

■ try ~ catch : 

 - 예외 처리(Exception Handling)를 할 수 있게 해주는 문법

 - try :

  · 정상적으로 실행될 코드

  · 예외가 발생될 가능성이 있는 코드

 

 - catch :

  · 예외 발생 시 처리할 코드

  · try에서 발생한 예외를 받아 처리하는 코드

  · catch문은 여러 개 사용 가능하며 예외 종류를 구분하여 처리할 수 있습니다.

 

■ finally :

 - 예외 처리(Exception Handling) 후 마지막에 실행되는 코드

 - 예외의 발생 여부와 상관없이 반드시 실행되는 코드

 

■ Example

using System;

namespace ExceptionExample
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = new int[3] { 0, 1, 2 };

            try
            {
                for(int i = 0; i <= 5; i++)
                    Console.WriteLine($"array[{i}] = {array[i]}");
            }
            catch(Exception e)
            {
                Console.WriteLine($"[Exception] : 예외가 발생하였습니다.");
                Console.WriteLine($"[Exception Message] : {e.Message}");
            }
            finally
            {
                Console.WriteLine($"[Finally] 무조건 발생");
            }
        }
    }
}

 

Example 결과

 

 

■ 예외 필터(Exception Filter) :

 - catch 블록에 제약사항을 명시하여 조건에 만족하는 예외만 받을 수 있습니다.

 - catch() 뒤에 when 키워드를 사용하여 작성

 

■ Example

using System;

namespace ExceptionFilterExample
{
    class CustomException : Exception
    {
        public int ErrorCode { get; set; }
    }
    class Program
    {
        static void TestMethod(int num)
        {
            if (num > 10)
                Console.WriteLine($"[TestMethod] num은 10 보다 큽니다. (num = {num})");
            else
                throw new CustomException() { ErrorCode = num };
        }
        static void Main(string[] args)
        {
            try
            {
                TestMethod(-5);
                //TestMethod(5);
            }
            catch(CustomException e) when (e.ErrorCode < 0)
            {
                Console.WriteLine($"[Exception] CustomException : ErrorCode는 음수입니다. " +
                    $"(ErrorCode = {e.ErrorCode})");
            }
            catch (CustomException e) when (e.ErrorCode >= 0)
            {
                Console.WriteLine($"[Exception] CustomException : ErrorCode는 양수입니다. " +
                    $"(ErrorCode = {e.ErrorCode})");
            }
            finally
            {
                Console.WriteLine("[Finlly] 반드시 발생하는 내용입니다.");
            }
        }
    }
}

 

Example 결과 : ErrorCode = 5, 양수

 

Example 결과 : ErrorCode = -5, 음수

 

 

 

'개인공부 > C#' 카테고리의 다른 글

[C#] 이벤트(Event)  (0) 2023.02.14
[C#] 대리자(Delegate)  (0) 2022.10.13
[C#] 일반화(Generalization)  (0) 2022.09.26
[C#] 인덱서(Indexer), IEnumerable, IEnumerator  (0) 2022.09.26
[C#] 컬렉션(Collection)  (0) 2022.09.23