C#에서 int.Parse()를 사용할 때 발생하는 예외와 그 해결 방법을 소개합니다. 이번 글에서는 FormatException, OverflowException 예외 처리 방법과 TryParse()를 활용한 안전한 변환 방법까지 자세하게 다뤄보겠습니다.
목차
- C# int.Parse()란?
- int.Parse() 사용 시 발생하는 주요 예외
- FormatException
- OverflowException
- 예외 처리 방법
- TryParse()를 활용한 안전한 변환
- 정규식을 활용한 입력 값 검증
- 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()를 사용합니다.
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()를 사용할 때는 FormatException과 OverflowException이 발생할 수 있으며, 이러한 예외를 방지하기 위해 TryParse()를 활용하는 것이 안전합니다. 또한 정규식을 이용하여 입력 값을 검증하면 더욱 견고한 프로그램을 작성할 수 있습니다.
추천하는 방식:
- 변환 실패 가능성이 있다면 TryParse()를 사용
- 변환이 반드시 성공해야 하는 경우 int.Parse()를 사용하되 try-catch로 예외 처리 추가
'C#' 카테고리의 다른 글
C#에서 String을 Int로 변환하는 4가지 방법 (TryParse, Parse, Convert, System.Globalization) (0) | 2025.03.20 |
---|---|
C# LINQ에서 Where 조건문 여러 개 사용하기: 효율적인 필터링 방법 (0) | 2025.03.07 |
[C#] 리스트 중복 요소 제거 (Distinct, LINQ) (0) | 2023.07.17 |
[C#] double to int 형변환 (0) | 2023.01.13 |
C# 파일(File) 존재유무 확인 방법 (0) | 2023.01.11 |
댓글