본문 바로가기
개발언어/C#

[C#] 예외 처리 (throw/ finally)

by 창용이랑 2021. 7. 1.
728x90

이번에는 예외 처리 try~catch 문과 함께 쓰는 throw 문과 finally 문에 대해 알아보겠습니다.

(혹시 try~catch 문에 대한 이해가 아직 부족하다면 다음 글을 먼저 읽어보시길 바랍니다!)

 

https://blog.naver.com/dbswn2414/221858017286

 

C# 예외 처리 (try~catch)

예외 처리를 하는 이유 처음에는 코딩해서 무언가를 작동하게 하는 것에만 집중을 하지만, 만약 그저 만드...

blog.naver.com

 

예외 던지기 (throw)

throw는 '던지다'라는 뜻입니다.

try~catch 문은 컴파일러가 예외일 경우를 찾아서 예외 처리를 해준다면,

throw는 프로그래머가 직접 예외를 시켜주고 싶을 때 사용합니다.

다음과 같이 throw 문으로 예외 코드를 실행시킬 수 있습니다.

다음은 throw 문을 사용하여 음수일 경우에 예외를 처리하는 코드의 예제입니다.

using System;
using static System.Console;

namespace Program
{
    class Myclass
    {
        static void NoNegativeNum(int Num)
        {
            if (Num > 0)
                WriteLine($"Number : {Num}");
            else
                throw new Exception("음수입니다.");
        }

        static void Main(string[] args)
        {
            try
            {
                NoNegativeNum(-2);
            }
            catch (Exception e)
            {
                WriteLine(e.Message);
            }
        }
    }
}

)

 

finally

finally 문을 설명하기 앞서 먼저 예시를 하나 들어 보겠습니다.

예를 들어 다음과 같이 try~catch 문이 있는데 method.Open()을 실행한 후에는 마지막에 반드시 method.Close()를 실행시켜야 합니다.

그런데 코드에 문제가 있어 중간에 예외 처리가 된다면 반드시 실행되어야 됐던 try 문의 method.Close() 가 실행되지 않고 넘어가게 됩니다.

이런 경우의 문제를 해결하기 위해서 "finally 문"이 필요합니다.

finally는 '마지막으로, 최종적으로'라는 뜻입니다.

뜻처럼 try~catch 문에서 finally 문은 앞에서 어떤 일이 있었든 finally 안의 코드는 "무조건" 실행됩니다.

finally 문은 다음과 같이 사용할 수 있습니다.

다음은 두 수를 입력받아 곱셈 메서드 Multiply()에 보내어 값을 반환받는 코드입니다.

그리고 만약 두 수의 형식이 잘못될 경우를 대비하기 위해 try~catch 그리고 finally 문을 사용한 예제입니다.

using System;
using static System.Console;

namespace Program
{
    class Myclass
    {
        static int Multiply(int a, int b)
        {
            return a*b;
        }

        static void Main(string[] args)
        {
            try
            {
                Write("곱셈을 위한 첫 번째 수를 입력하세요 : ");
                String tmp = ReadLine();
                int a = int.Parse(tmp);

                Write("곱셈을 위한 두 번째 수를 입력하세요 : ");
                tmp = ReadLine();
                int b = int.Parse(tmp);

                WriteLine($"{a} x {b} = {Multiply(a, b)}");
            }
            catch (FormatException e)
            {
                WriteLine("에러 : " + e.Message);
            }
            finally
            {
                WriteLine("프로그램 종료");
            }
        }
    }
}

[출처] C# 예외 처리 (throw/ finally)|작성자