C#언어 안전하게 문자열을 숫자로 변환하는 방법
새로운 언어를 학습하게 되면 형 변환이 제일 먼저 궁금해지지 않나 생각합니다. C에서는 atoi() 함수나 sscanf() 함수를 이용해서 숫자 문자열을 숫자 변수로 받는데요, C#에서는 어떻게 할까요? 객체지향 언어답게 메서드 방식으로 변환하는데요, 방법은 이렇습니다.
int nValue = int.Parse( str);
위 코드는 문자열 str의 값을 정수로 변환해서 nValue에 대입합니다. 방법은 쉽습니다만, 안심할 수 없습니다. 왜냐하면 str이 가지고 있는 문자열이 비었거나 숫자 문자열이 아니면 실행 에러가 발생합니다. 실행 에러라는 말씀은 빌드가 되어도 실행 중에 에러가 발생해서 종료가 된다는 것이죠.
이 문제를 해결하려면 C#의 예외 상황 처리 코드를 작성하면 됩니다.
int nValue;
try
{
nValue = int.Parse( str);
}
catch
{
nValue = -1;
}
문자열을 숫자로 바꾸는 곳마다 try...catch...구문을 사용해야 하지만, 안전한 코드를 위해 어쩔 수 없습니다. 델파이처럼 StrToIntDef() 함수가 있으면 참 좋은데 말이죠.
StrToIntDef()처럼 숫자 바꾸기가 안 되면 대신 반환하는 기본값을 정할 수 없지만, try...catch... 예외 상황 구문을 사용하지 않고 문자열을 숫자로 변경할 수 있습니다. Parse() 메서드 대산에 TryParse()를 사용하면 됩니다.
bool TryParse ( str, out int result);
TryParse는 문자열을 숫자로 바꾸면서 성공 여부를 반환하고, 숫자로 변환이 성공하면 두 번째 인자에 대입해 줍니다. 변수 타입 별로 TryParse() 메서드가 제공되어서 정수, 실수로 나누어 변환할 수 있습니다.
bool bOK = int.TryParse( "123", out int nValue); // bOK == TRUE, nValue == 123
bool bOK = int.TryParse( "123.4", out int nValue); // bOK == FALSE, nValue == 0
bool bOK = int.TryParse( "abc", out int nValue); // bOK == FALSE, nValue == 0
bool bOK = int.TryParse( "", out int nValue); // bOK == FALSE, nValue == 0
실수형 변수 타입을 사용한 예입니다.
bool bOK = float.TryParse( "123", out float nValue); // bOK == TRUE, nValue == 123.0
bool bOK = float.TryParse( "123.4", out float nValue); // bOK == TRUE, nValue == 123.4
bool bOK = float.TryParse( "abc", out float nValue); // bOK == FALSE, nValue == 0.0
bool bOK = float.TryParse( "", out float nValue); // bOK == FALSE, nValue == 0.0
문자열을 숫자로 변환이 실패했을 때 숫자 값이 0 이라는 점도 이용할 수 있습니다.
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
tcp udp 차이점과 프로그래밍에서 주의해야할 부분 (0) | 2021.01.16 |
---|---|
C#언어 불필요한 이벤트 메서드 함수 제거 방법 (0) | 2020.09.29 |
E: /var/cache/apt/archives/lock 잠금 파일을 얻을 수 없습니다 - open (11: 자원이 일시적으로 사용 불가능함) (2) | 2020.07.05 |