C# TryParse를 사용하여 문자열을 숫자로 변환 및 예외 처리를 동시에 하는 방법

C# 닷넷 프로그램을 개발할 때 문자열을 숫자로 변환해서 처리하는 코드를 많이 작성하게 됩니다.

가장 간단한 예로 TextBox에서 입력 받은 값을 숫자로 변환해서 계산에 사용하거나 데이터베이스 테이블에 저장하는 코드를 자주 작성하게 됩니다.

문자형 데이터를 숫자형 데이터로 변환하는 것과 같이 데이터 형 변환을 할 때 Parse 메서드 사용하거나 Convert 메서드를 주로 사용합니다.
하지만 숫자로 변환할 수 없는 문자열을 숫자로 형 변환을 하는 경우 바로 예외가 발생하며 프로그램이 멈추게 됩니다.

이번 글에서는 C# TryParse를 사용하여 문자열을 숫자로 변환 및 예외 처리를 동시에 하는 방법에 대해 알아보겠습니다.

C# TryParse를 사용하여 문자열을 숫자로 변환 및 예외 처리를 동시에

C#에서 Parse 메서드로 데이터 형 변환을 하는 일반적인 방법과 문제점

1. 아래 C# 코드는 string 문자열을 decimal 숫자 값으로 변환하는 Parse 메서드 사용 예제입니다.

string str1 = “10000”;
string str2 = “100,000”;
string str3 = “100 000”;
string str4 = “10000A”;
 
decimal decResult1 = 0;
decimal decResult2 = 0;
decimal decResult3 = 0;
decimal decResult4 = 0;
 
decResult1 = decimal.Parse(str1);   //정상 처리
decResult2 = decimal.Parse(str2);   //정상 처리
decResult3 = decimal.Parse(str3);   //예외 발생
decResult4 = decimal.Parse(str4);   //예외 발생

2. str1, str2 문자열에 대한 decimal.Parse 실행은 문제 없이 숫자로 변환이 됩니다.

3. 하지만 str3, str4 문자열에 대한 decimal.Parse 실행에서는 예외가 발생해서 프로그램이 멈추게 됩니다.

4. 그래서 Parse 메서드와 같은 형 변환 작업을 할 때 아래 코드와 같이 예외를 처리하기 위한 try ~ catch 구문을 사용하게 됩니다.

try
{
    decResult3 = decimal.Parse(str3);   //정상 처리가 될 경우
}
catch
{
    decResult3 = 0;     //예외 처리가 될 경우
}

C#에서 TryParse를 사용하여 문자열을 숫자로 변환 및 예외 처리를 동시에 하는 방법

프로그램이 실행될 때 예외 발생으로 프로그램이 중단되는 것은 절대로 있으면 안되겠죠?

그래서 예외가 발생될 가능성이 있는 코드에는 try ~ catch 구문 안에 기술하게 됩니다.

문자열을 숫자 값으로 형 변환을 할 때 TryParse 메서드를 사용하면 변환과 예외 처리를 동시에 할 수 있습니다.

1. TryParse 메서드의 기본 구문 형식은 다음과 같습니다.

  • [변환 형식].TryParse(string [변환할 문자열], out [변환 결과])
  • 반환 되는 값은 bool 값입니다. 따라서 변환이 성공하면 ‘true‘가 반환 되고, out 매개변수에 변환 된 값이 들어가게 됩니다.
    변환에 실패하면 ‘false‘가 반환 됩니다.
  • 변환 형식에는 DateTime, Double, Boolean, Decimal, TimeSpan, IPAddress, Int32, Int64 등 다양한 변환 형식을 지정할 수 있습니다.
    DateTime.TryParse, Double.TryParse, Int32.TryParse, …

2. TryParse 사용하는 방법 예제입니다.

  • 변환이 성공하면 out 변수에 변환된 값이 들어갑니다.
  • 변환에 실패한 경우 if 조건의 코드를 실행합니다.(== false)
if (decimal.TryParse(str3, out decResult3) == false)
    decResult3 = 0;

3. TryParse의 다른 사용 방법 예제입니다. 권장하는 방법입니다.

  • try catch 문과 if 문을 동시에 처리하는 코드라고 이해하시면 됩니다.
  • decResult1 = decimal.TryParse(str1, out decResult1) ? decResult1 : -1;
    ▷ 변환이 성공했을 때 decResult1에는 변환 된 값이, 실패했을 때는 ? 뒤의 구문이 처리됩니다.
  • decimal.TryParse(str1, out decResult1);
    ▷ 변환이 성공했을 때 decResult1에는 변환 된 값이, 실패했을 때는 0이 반환됩니다.
  • bool bool1 = decimal.TryParse(str1, out decResult1);
    ▷ bool 값까지 같이 구하고자 할 경우
string str1 = “10000”;
string str2 = “100,000”;
string str3 = “100 000”;
string str4 = “10000A”;
 
decimal decResult1 = 0;
decimal decResult2 = 0;
decimal decResult3 = 0;
decimal decResult4 = 0;
 
//아래 코드는 변환에 실패했을 때 특정 값을 결과 값으로 처리하고자 할 때
decResult1 = decimal.TryParse(str1, out decResult1) ? decResult1 : 1;
decResult2 = decimal.TryParse(str2, out decResult2) ? decResult2 : 1;
decResult3 = decimal.TryParse(str3, out decResult3) ? decResult3 : 1;
decResult4 = decimal.TryParse(str4, out decResult4) ? decResult4 : 1;
 
//아래 코드는 변환에 실패했을 때 out 변수에 0 값이 반환됩니다.
decimal.TryParse(str1, out decResult1);
decimal.TryParse(str2, out decResult2);
decimal.TryParse(str3, out decResult3);
decimal.TryParse(str4, out decResult4);

마무리

이상으로 C#에서 TryParse 메서드를 사용하여 문자열을 숫자로 변환하는 방법에 대해 알아보았습니다.
TryParse를 사용하여 문자를 숫자로 변환할 때 흔히 발생하는 FormatException, OverflowException 등의 예외에 대해 적당하게 대응할 수 있습니다.

Parse나 Convert 메서드를 사용하여 예외 처리를 별도로 해 주는 것보다 TryParse를 사용해서 간단하게 한번에 처리하는 방법을 잘 사용해 보시기 바랍니다.





이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.

답글 남기기