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 |