개발팁2016. 8. 10. 14:55

C# 에서 string 타입으로 숫자가 저장되어 있을때 int 타입으로 변경하는 몇가지 방법이 있다.

 

string n = "1234";

 

라고 할때,

 

 

Method.1

 

int outValue = Convert.ToInt32(n);

 

 

Method.2

 

int outValue = int.Parse(n);

 

 

Method.3

 

int outValue;

int.TryParse(n, out outValue);

 

 

그리고, 여기서 소개할 방법은, C# 의 기본 메서드를 이용하지 않고, 자체적으로 제작을 해보겠다.

 

문자로 저장된 '0' 이라는 값은 실제 메모리상에는 코드값으로 저장이 되어 있다.

우리가 ASCII 코드라고 부르는 값이다.

실제로 '0' 은 48 이라는 값으로 저장이 되며, '9' 는 57 이라는 값으로 저장이 된다.

 

하지만, '0' ~ '9' 가 어떤 값으로 저장이 되는지 알필요도 없다.

 

'0' - '0' 은 0 이 되며,

'1' - '0' = 1 이 되고,

'9' - '0' = 9 가 된다.

 

 

string n = '1234';

int outValue = 0;

 

for (int i = 0; i < n.Length; i++)
{

    outValue = outValue * 10 + (n[i] - '0');

}

 

outValue 를 확인해보면, 1234 라는 값이 들어있는것을 확인할 수 있다.

 

이를 Method.4 라고 부르고,

 

 

Method.1 ~ Method.4 까지 퍼포먼스 테스트를 해봤다.

 

1,000,000 개의 4자리 문자열로 된 배열을 만들고,

 

이를 int 형으로 변환하는 4가지 방법을, 각각 20회씩 실행해 봤다.

 

 

 

 

Convert.ToInt32
int.Parse
int.TryParse
3가지 방법 모두, 비슷한 결과가 나왔다.

4자리 문자열 100만개를 변환하는데, 0.13 ~ 0.14 초가 걸렸다.

 

반면, 직접 만들어서 int로 변환한 경우는, 0.03, 0.04 초가 걸렸다. 속도면에서, 기본 메서드 보다, 4배이상 빨랐다.

 

Posted by 헝개