본문 바로가기
C#

C# int.Parse() 사용 시 발생하는 예외와 해결 방법 (FormatException, OverflowException)

by 코딩이라구 2025. 3. 20.

C#에서 int.Parse()를 사용할 때 발생하는 예외와 그 해결 방법을 소개합니다. 이번 글에서는 FormatException, OverflowException 예외 처리 방법과 TryParse()를 활용한 안전한 변환 방법까지 자세하게 다뤄보겠습니다.


목차

  1. C# int.Parse()란?
  2. int.Parse() 사용 시 발생하는 주요 예외
    • FormatException
    • OverflowException
  3. 예외 처리 방법
    • TryParse()를 활용한 안전한 변환
    • 정규식을 활용한 입력 값 검증
  4. int.Parse() vs TryParse() 비교 (표 참조)

1. C# int.Parse()란?

C#에서 문자열(String)을 정수형(int)으로 변환할 때 int.Parse()를 자주 사용합니다. 그러나 잘못된 입력이 들어올 경우 예외(Exception)가 발생하여 프로그램이 중단될 수 있습니다. 따라서 int.Parse()를 안전하게 사용하려면 발생할 수 있는 예외를 이해하고 적절한 예외 처리를 적용해야 합니다.

 

2. int.Parse() 사용 시 발생하는 주요 예외

FormatException

FormatException은 문자열이 숫자로 변환될 수 없는 형식일 때 발생합니다.

string invalidNumber = "123abc"; // 숫자가 아닌 문자가 포함된 문자열

try
{
    int result = int.Parse(invalidNumber);
    Console.WriteLine($"변환된 숫자: {result}");
}
catch (FormatException ex)
{
    Console.WriteLine("FormatException 발생! 유효한 숫자 형식이 아닙니다.");
    Console.WriteLine($"예외 메시지: {ex.Message}");
}


-- 결과
FormatException 발생! 유효한 숫자 형식이 아닙니다.
예외 메시지: 입력 문자열의 형식이 잘못되었습니다.

해결 방법: 숫자로 변환 가능한 문자열인지 미리 확인하거나, TryParse()를 사용합니다.

 

C# 문자열 > 숫자 변환 방법

 

OverflowException

OverflowException은 변환하려는 숫자가 int의 허용 범위를 초과할 때 발생합니다.

string largeNumber = "3000000000"; // int의 최대값(2,147,483,647)을 초과하는 값

try
{
    int result = int.Parse(largeNumber);
    Console.WriteLine($"변환된 숫자: {result}");
}
catch (OverflowException ex)
{
    Console.WriteLine("OverflowException 발생! 숫자가 int 범위를 초과했습니다.");
    Console.WriteLine($"예외 메시지: {ex.Message}");
}

-- 결과
OverflowException 발생! 숫자가 int 범위를 초과했습니다.
예외 메시지: 값이 Int32의 범위를 초과합니다.

해결 방법: long.Parse()를 사용하거나 TryParse()를 활용하여 안전하게 변환합니다.

※ C#에서 숫자의 데이터 타입과 그 허용 범위에 대한 글은 업데이트되는 데로 추가하겠습니다.

 

3. 예외 처리 방법

TryParse()를 활용한 안전한 변환

int.TryParse()는 변환이 성공하면 true를 반환하고, 실패하면 false를 반환하여 예외 없이 처리가 가능합니다.

string input = "123abc"; // 숫자가 아닌 문자가 포함된 문자열
int result;

if (int.TryParse(input, out result))
{
    Console.WriteLine($"변환 성공! 숫자: {result}");
}
else
{
    Console.WriteLine("변환 실패! 유효한 숫자 형식이 아닙니다.");
}

-- 결과
변환 실패! 유효한 숫자 형식이 아닙니다.

 

정규식을 활용한 입력 값 검증

사용자가 입력하는 값이 숫자인지 확인하기 위해 정규식을 사용할 수도 있습니다.

Console.Write("숫자를 입력하세요: ");
string input = Console.ReadLine();

// 정규식: ^[0-9]+$ → 숫자로만 이루어진 문자열인지 확인
if (Regex.IsMatch(input, @"^[0-9]+$"))
{
    try
    {
        int result = int.Parse(input);
        Console.WriteLine($"변환 성공! 숫자: {result}");
    }
    catch (OverflowException)
    {
        Console.WriteLine("오류: 입력한 숫자가 int 범위를 초과했습니다.");
    }
}
else
{
    Console.WriteLine("오류: 유효한 숫자 형식이 아닙니다.");
}

-- 결과
-- 1. 입력값 : "12345"
변환 성공! 숫자: 12345
-- 2. 입력값 : "123abc"
오류: 유효한 숫자 형식이 아닙니다.
-- 3. 입력값 : "3000000000"
오류: 입력한 숫자가 int 범위를 초과했습니다.

※ C#에서 정규식을 통하여 데이터를 처리하는 방법에 대한 글은 업데이트되는 데로 추가하겠습니다.

4. int.Parse() vs TryParse() 비교 (표 참조)

비교 항목 int.Parse() int.TryParse()
예외 발생 여부 예외 발생 가능 예외 발생 없음
반환값 변환된 정수값 변환 성공 여부 (true/false)
예외 처리 필요 여부 필요 불필요
사용 추천 상황 변환이 항상 성공해야 하는 경우 변환 실패 가능성이 있는 경우

 

TryParse() vs Parse() - DIBRARY

 


C#에서 int.Parse()를 사용할 때는 FormatExceptionOverflowException이 발생할 수 있으며, 이러한 예외를 방지하기 위해 TryParse()를 활용하는 것이 안전합니다. 또한 정규식을 이용하여 입력 값을 검증하면 더욱 견고한 프로그램을 작성할 수 있습니다.

 

추천하는 방식:

  • 변환 실패 가능성이 있다면 TryParse()를 사용
  • 변환이 반드시 성공해야 하는 경우 int.Parse()를 사용하되 try-catch로 예외 처리 추가

댓글