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 타입을 사용하는 것도 좋은 대안입니다.