본문 바로가기
C#/[루키스] 실전 문법

[C# 섹션 8] Exception

by 묻공러 2025. 6. 26.

# Exception

특정 부분에서 예외가 발생하는지 확인하고

예외가 발생한 경우에 특정 기능을 실행시키기 위해서 주로 사용된다

 

예외가 발생하는 대표적인 경우는

0으로 나누기, 잘못된 메모리 참조(null), 오버플로우 등이 있다

 

try문을 통해 예외 발생 여부를 확인하고

catch문을 통해 예외가 발생한 경우의 조치를 구현할 수 있다

namespace CSharp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int a = 8;
                int b = 0;

                int result = a / b;
            }
            catch(Exception ex)
            {
				// ex에 담긴 정보로 다양하게 활용 가능
            }
        }
    }
}

 

# Exception 타입

Exception 타입은 가장 상위의 예외를 포함한 타입이다

구체적이고 다양한 Exception 타입을 아래와 같이 활용할 수 있다

namespace CSharp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int a = 8;
                int b = 0;

                int result = a / b;
            }
            catch(DivideByZeroException ex)
            {

            }
        }
    }
}

 

# Exception 주의점

1. try문에서 위에서부터 순차적으로 코드를 실행하고

예외가 발생하면, 예외가 발생한 코드의 아래 코드들은 전부 실행이 되지 않는다

 

2. catch문이 여러개인 경우에, 위에서부터

에러가 발생하는 catch문이 있는지 확인하고

단 하나의 catch문만 걸리고 다른 catch문들은 다 무시가 된다

 

그렇기에 최상위 Exeption 타입들일 수록

맨 아래에서부터 배치되어야 한다

 

3. 2번 문제를 해결하기 위해서

finally를 통해 예외가 발생해도 해당 부분은

반드시 실행해 달라고 요청할 수 있다

try
{
	int a = 8;
	int b = 0;

	int result = a / b;
}
catch (DivideByZeroException ex)
{

}
catch (Exception ex)
{

}
finally
{
	// 반드시 실행되어야 하는 부분
}

 

4. Exception 클래스를 직접 상속받아

다양한 커스텀 타입도 구현이 가능하다

 

# 게임개발에서는 Exception을 언제?

게임 개발에서는 크래시가 발생하는 경우,

모든 유저에게 해당 크래시가 발생할 가능성이 있다

그렇기에 catch로 특정 로직을 보완하고 수정하는 건 무의미하고

로직을 바로 수정하는 것이 올바르다

 

그러나 네트워크 접속 실패 대응과 같은 일부 상황에서

활용되는 경우가 있다

'C# > [루키스] 실전 문법' 카테고리의 다른 글

[C# 섹션 8] Nullable  (0) 2025.06.26
[C# 섹션 8] Reflection  (0) 2025.06.26
[C# 섹션 8] Lambda  (0) 2025.06.25
[C# 섹션 8] Event  (0) 2025.06.25
[C# 섹션 8] Delegate  (0) 2025.06.25