Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# OverflowException(오버플로 예외) 원인과 해결 방법

C# 오버플로 예외(OverflowException)란?

OverflowException은 메서드에 전달된 값이 해당 데이터 타입이 표현할 수 있는 정수 범위를 벗어났을 때 발생하는 예외입니다.

예를 들어, C#의 int(Int32) 타입은 -2,147,483,648부터 2,147,483,647까지만 저장할 수 있습니다. 이 범위를 초과하는 문자열을 int.Parse() 메서드로 변환하려고 하면 OverflowException이 발생합니다.

예제 코드

아래 예제에서는 정수 범위를 훨씬 초과하는 숫자 문자열을 int.Parse()에 전달하고 있습니다.

using System;
class Demo {
    static void Main() {
        string str = "757657657657657";
        int res = int.Parse(str);
    }
}

실행 결과

위 프로그램을 컴파일 후 실행하면, Int32 범위를 벗어나는 값이 전달되었기 때문에 다음과 같은 오류가 발생합니다.

Unhandled Exception:
System.OverflowException: Value was either too large or too small for an Int32.

오버플로 예외 처리 방법

이러한 예외를 안전하게 처리하려면 두 가지 방법을 사용할 수 있습니다.

1. try-catch 블록으로 예외 처리

try {
    int res = int.Parse(str);
} catch (OverflowException) {
    Console.WriteLine("정수 범위를 벗어난 값입니다.");
}

2. int.TryParse() 사용

int.TryParse()는 변환에 실패해도 예외를 던지지 않고 false를 반환하므로, 더 안전한 방식으로 권장됩니다.

if (int.TryParse(str, out int res)) {
    Console.WriteLine($"변환 성공: {res}");
} else {
    Console.WriteLine("유효하지 않거나 범위를 벗어난 값입니다.");
}

큰 숫자를 다루어야 한다면 long(Int64)이나 BigInteger 타입을 사용하는 것도 좋은 대안입니다.