본문 바로가기
개발/C#

C# - Convert vs Parse vs TryParse

by E-nan 2020. 9. 5.
728x90
반응형

 

안녕하세요. 2nan 입니다.

 

 

여러분들은 int 형, double 형 등등... 숫자로 형 변환을 할때 어떤 방식으로 변환 하시나요?? 저는 대부분의 경우 Parse 를 사용해 왔습니다. 특별한 이유가 있는것은 아니고 문자열 형변환인 ToString 을 자주 쓰다보니 int 가 뒤에 있는 Convert.ToInt32 보단 Int32.Parse 를 주로 써왔습니다. 결과는 같지만 다른 방식이 있으니.. 궁금증이 생기지 않나요?? 😏

 

예시 코드부터 같이 보시죠

 

1. Convert

먼저 Convert 의 정의는 "기본 데이터 형식을 다른 기본 데이터 형식으로 변환한다." 라고 합니다. Boolean, Char, Byte, Int, Double, Decimal, String, DateTime 등등.. 이러한 형식들을 지원한다고 합니다. 

string strA = "10";
string strB = "12.345";
string strC = null;

Convert.ToInt32(strA);	// 10
Convert.ToInt32(strB);	// FormatException
Convert.ToInt32(strC);	// 0

string 값을 int 형으로 바꿀 수 있는 값들은 잘 변환이 되지만, strB 처럼 int 형이 아니거나, 또는 숫자가 아닌 문자열이 할당되어 있다면, FormatException 이 발생합니다. 하지만 strC 의 경우에는 null 값이 들어 있으므로 0이 반환이 되는군요.

 

2. Parse

Parse 는 "문자열 표현을 해당하는 형 으로 변환한다." 라고 되어있네요. ToString 과 비슷한 표현중 하나인 것 같습니다. 예를 들어 문자열을 Int 형 으로 변환하고 싶다면 Int32.Parse("문자열") 이렇게 사용하면 됩니다.

string strA = "10";
string strB = "12.345";
string strC = null;

Int32.Parse(strA);	// 10
Int32.Parse(strB);	// FormatException
Int32.Parse(strC);	// ArgumentNullException

Convert 와 Parse 의 다른점이 보이시나요?? Convert 의 경우처럼 int 형 으로 변환할 수 없는 값이 할당되어 있으면 마찬가지로 FormatException이 발생합니다. 그런데 strC 의 경우 Convert 는 0 을 반환했는데, Parse 는 ArgumentNullException 이 발생합니다. null 값 을 변환시킬때, 0을 반환하냐, 예외 처리를 해주느냐 의 차이가 있습니다.

 

3. TryParse

TryParse 는 "문자열 표현을 해당하는 형 으로 변환한다. 반환 값은 변환의 성공 여부를 나타낸다." 라고 되어있습니다. Convert 와 Parse 는 단순한 값만 변환하고 반환했는데, 정의에 나와있는 것 처럼 변환의 성공 여부 즉, true 와 false 값을 반환한다는 것을 알 수 있습니다.

string strA = "10";
string strB = "12.345";
string strC = null;

int i;
Int32.TryParse(strA, out i);	// true (123)
Int32.TryParse(strB, out i);	// false (0)
Int32.TryParse(strC, out i);	// false (0)

Convert 와 Parse는 문자열 값만 필요했는데 이번엔 i 라는 변수가 보이는군요. 보아하니 TryParse에 대해서 아직 자세하게는 모르겠지만, ture 와 false 를 반환한다고 했으니, out 연산자를 이용해서 변수 i 에 변환된 값이 저장된다는 느낌이 옵니다. 코드에서도 보시다시피 false 가 반환되면 i 의 값이 0 이 되는군요.

결론적으로는 문자열 값을 int 형 으로 변환한 경우는 true 를 반환하면서 i 에 변환된 값이 할당되고, 변환이 실패한 경우에는 false 를 반환하면서 i 에는 0 이 할당되는 것을 알 수 있습니다.

 

 

Convert vs Parse vs TryParse 의 각각 특성을 알아봤습니다. 물론 상황에 맞게 사용하는것이 가장 중요하지만, 안전한 코드를 위해서는 되도록이면 TryParse 를 사용하는 것이 좋을 것 같습니다. 반환값을 이용해서 아래와 같은 코드도 작성할 수 있으니까요.

// 어떤 문자열을 꼭 int 형으로 바꿔야만 정상동작하는 코드
if(Int32.TryParse(어떤 문자열, out in result))
{
	...
}

 

 

 

 

공감이나 도움이 되셨다면, 공감버튼을 눌러주세요ㅎㅎ

질문이나 오타, 잘못된 내용 등은 댓글로 남겨주시면 감사하겠습니다 :)

 

728x90
반응형

댓글