C#/제어문

[C#] 예외처리 throw

도도돋치 2025. 3. 24. 17:33
Contents 접기
728x90

기본 개념

throw 문은 예외(오류)를 강제로 발생시킬 때 사용
✔ 특정 조건에서 직접 예외를 발생시키고 싶을 때
 try-catch 블록과 함께 사용하여 예외 처리 가능
✔ 기존 예외를 다시 던질 수도 있음

 

기본 사용법

throw new 예외클래스("예외 메시지");

 

직접 예외 발생시키기

void CheckAge(int age)
{
    if (age < 0)
    {
        throw new ArgumentException("나이는 음수가 될 수 없습니다.");
    }

    Console.WriteLine($"입력한 나이: {age}");
}

CheckAge(25);  // 정상 출력
CheckAge(-5);  // 예외 발생

💡 결과

Unhandled exception. System.ArgumentException: 나이는 음수가 될 수 없습니다.

📌 age < 0이면 throw 문이 실행되어 예외 발생 & 프로그램 종료

 

try-catch와 함께 사용

try
{
    throw new InvalidOperationException("잘못된 연산입니다.");
}
catch (Exception ex)
{
    Console.WriteLine($"오류 발생: {ex.Message}");
}

💡 결과

오류 발생: 잘못된 연산입니다.

📌 예외 발생 후 catch에서 처리되므로 프로그램이 종료되지 않음

 

예외를 다시 던지기 (throw;)

void Process()
{
    try
    {
        throw new Exception("처리 중 오류 발생!");
    }
    catch (Exception ex)
    {
        Console.WriteLine("오류를 로깅했습니다.");
        throw; // 예외를 다시 던짐 (rethrow)
    }
}

try
{
    Process();
}
catch (Exception ex)
{
    Console.WriteLine($"최종 오류 처리: {ex.Message}");
}

💡 결과

오류를 로깅했습니다.  
최종 오류 처리: 처리 중 오류 발생!

📌 throw;을 사용하면 기존 예외를 그대로 다시 던짐
📌 상위 catch 블록에서 최종적으로 예외를 처리 가능

 

특정 조건에서 예외 발생

void Divide(int a, int b)
{
    if (b == 0)
    {
        throw new DivideByZeroException("0으로 나눌 수 없습니다!");
    }
    
    Console.WriteLine($"결과: {a / b}");
}

try
{
    Divide(10, 0);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine($"오류 발생: {ex.Message}");
}

💡 결과

오류 발생: 0으로 나눌 수 없습니다!

📌 b == 0인 경우, 직접 예외를 발생시키고 catch에서 처리

 

📖정리

 throw  예외를 강제로 발생
 try-catch와 함께 사용하여 프로그램이 중단되지 않도록 처리 가능
 throw;  현재 예외를 다시 던짐 (예외 로그 후 재처리 가능)

728x90

'C# > 제어문' 카테고리의 다른 글

[C#] foreach문  (0) 2025.04.15
[C#] 예외처리 try-catch-finally  (0) 2025.03.24
[C#] 분기문 return  (0) 2025.03.24
[C#] 분기문 continue  (0) 2025.03.24
[C#] 분기문 break  (0) 2025.03.24