본문 바로가기

프로그램/유니티 C# 강좌

[유니티 C# 강좌] 11. 예외 처리(Exception handling)

728x90
반응형

c#은 예외상황이 발생하면 스스로 에러 메시지를 발생하고 프로그램이 죽어버립니다.

하지만, 유니티는 Start 문에서 예외가 발생하면 더 이상 Start 문을 실행하지 않고 Update문으로 넘어가고, Update에서 예외가 발생하면 Update 문의 예외 아래 실행문은 실행하지 않고 다음 Update 문으로 넘어가게 됩니다.

 

하지만, 예외 처리를 사용하여 예외를 처리 할 수 있습니다.

 

1. try catch 문

 

try catch 문은 예외를 찾고, 그 예외가 발생할 경우 실행할 문을 넣는 기법입니다.

try 문에 실행 할 코드를 넣고, catch 문에 예외가 발행했을 때 처리하는 실행문을 넣으면 됩니다.

try catch 문에서 Exception 변수를 사용하기 위해서는 using 문을 사용하여 system 네임스페이스를 선언하여합니다.

 

사용 방법 : try catch 문

using system;

try
{
    실행문
}

catch(예외-객체)
{
    예외-발생-시-실행되는 문
}

 

using UnityEngine; 
using System; 

public class TryCatchStatementExample : MonoBehaviour 
{ 
    GameObject go; 

    void Start() 
    { 
        //go = new GameObject();  

        try 
        { 
            Debug.Log(go.name); // go를 할당하지 않았기 때문에 예외가 발생합니다. 
        } 

        catch (Exception ex) 
        { 
            Debug.Log(ex); // 출력 : System.NullReferenceException: Object reference not set to an instance of an object  
        } 

        Debug.Log("여기도 실행됩니다."); // 출력 : 여기도 실행됩니다.  
    } 
}

 

 

2. try finally 문

 

try finally 문은 예외를 찾고, 그 예외가 발생하더라고 finally 문이 실행되는 기법입니다.

try 문에 실행할 코드를 넣고 finally 문에 반드시 실행되어야 하는 문을 넣습니다.

 

사용 방법 : try finally 문

try
{
    실행문
}

finally
{
    예외가-발생하더라도-반드시-실행되는-문
}

 

using UnityEngine; 

public class TryFinallyStatementExample : MonoBehaviour 
{ 
    GameObject go; 

    void Start() 
    { 
        //go = new GameObject();  

        try 
        { 
            Debug.Log(go.name); // 에러가 발생합니다.  
        } 

        finally 
        { 
            Debug.Log("여기는 실행됩니다."); // 출력 : 여기는 실행됩니다.  
        } 

        Debug.Log("여기는 실행하지 않습니다."); // 여기는 실행하지 않습니다.  
    } 
}

 

 

3. try catch finally 문

 

try catch finally 문은 try catch 문과 try finnaly 문을 합쳐서 사용하는 기법입니다.

 

사용 방법 : try catch finally 문

try
{
    실행문
}

catch(예외-객체)
{
    예외-발생-시-실행되는-문
}
       
finally
{
    예외가-발생하더라도-반드시-실행되는-문
}

 

using UnityEngine; 
using System; 

public class TryCatchFinallyStatementExample : MonoBehaviour 
{ 
    GameObject go; 

    void Start() 
    { 
        //go = new GameObject();  

        try 
        { 
            Debug.Log(go.name); 
        } 

        catch (Exception ex) 
        { 
            Debug.Log(ex); // 출력 : System.NullReferenceException: Object reference not set to an instance of an object  
        } 

        finally 
        { 
            Debug.Log("여기도 실행됩니다."); // 출력 : 여기도 실행됩니다.  
        } 

        Debug.Log("여기도 실행됩니다."); // 출력 : 여기도 실행됩니다.  
    } 
}

 

 

4. throw 문

 

throw 문은 프로그램 실행 중 예외 발생 신호를 보냅니다.

 

using UnityEngine; 
using System; 

public class ThrowStatementExample : MonoBehaviour 
{ 
    void Start() 
    { 
        throw new Exception("임의로 만든 예외입니다."); // 에러 발생. 출력 : Exception: 임의로 만든 예외입니다.  
    } 
}

 

코더제로 유니티 C# 강좌 예외 처리(Exception handling) throw 문으로 발생시킨 예외
그림. throw 문으로 발생시킨 예외

 

728x90
반응형