본문 바로가기

C#

[C#] try ~ catch

try ~ catch 문이란?

C#에서 모든 Exception(예외)은 .NET의 System.Exception을 Base로 하며 예외 처리는 기본적으로 이 Exception 객체를 기본으로 처리한다. 이 때 C#에서는 try ~ catch문을 사용하여 Exception을 핸들링 할 수 있다.

try ~ catch 문 사용예시

try ~ catch 문에서 try 절의 코드 블록에는 예외가 일어나지 않을 경우에 실행되어야 할 코드들이 들어가고, catch절에는 예외가 발생했을 때의 처리 코드가 들어간다.

using System;
using UnityEngine;

public class TryCatchExample : MonoBehaviour
{
    GameObject obj; // obj 변수를 비워둔다.

    private void Awake()
    {
        try
        {
            Debug.Log("try");
            Debug.Log(obj.name);
            // obj 변수를 참조할 수 없기 때문에 NullReferenceException 예외가 발생한다.
        }
        catch (NullReferenceException)
        {
            Debug.Log("catch NullReferenceException");
            // NullReferenceException 예외가 발생했으니 실행된다.
        }
    }
}

throw 키워드

try ~ catch 문으로 예외를 받는다는 것은 어디선가 예외를 발생시킨다는 이야기이다. 코드로 직접 예외를 발생시키기 위해선 throw 키워드를 사용한다.

throw 키워드 예제

using System;
using UnityEngine;

public class ThrowExample : MonoBehaviour
{
    private void Awake()
    {
        try
        {
            throw new NullReferenceException();
        } // try 절에서 NullReferenceException 예외를 발생시킨다.
        catch (NullReferenceException)
        {
            Debug.Log("catch NullReferenceException");
        } // catch 절에서 NullReferenceException 예외를 받아 Debug.Log를 실행한다.
    }
}

finally 키워드

try 절에서 코드를 실행하다가 예외가 발생하면 프로그램의 실행은 catch 절로 바로 넘어온다. 이 때 만약 예외 때문에 try 절에서 중요한 코드를 미처 실행하지 못한다면 프로그램은 버그를 일으키게 된다.

C#에서는 예외 처리를 할 때 중요한 코드를 실행할 수 있도록 finally 키워드를 제공한다. finally 키워드는 try ~ catch 문의 제일 마지막에 연결해서 사용한다. 이 때 finally 절은 어떤 경우라도 실행된다.

finally 키워드 예제

using System;
using UnityEngine;

public class FinallyExample : MonoBehaviour
{
    private void Awake()
    {
        try
        {
            throw new NullReferenceException();
        }
        catch (NullReferenceException)
        {
            Debug.Log("catch NullReferenceException");
        }
        finally
        {
            Debug.Log("finally");
        } // finally 절은 어떤 경우라도 실행되기에 마지막에 Debug.Log가 실행된다.
    }
}

try ~ catch 문을 공부하면서

  • 주로 런타임 에러를 일으키는 부분을 직접 찾아서 수정하는 편이기 때문에 자주 사용할 일이 없는 것 같다.

'C#' 카테고리의 다른 글

[C#] var 키워드  (0) 2023.07.17
[C#] Nullable 형식  (0) 2023.07.16
[C#] 비트 연산자  (0) 2023.07.15