C#에서는 문자열로 표현된 숫자를 정수형으로 변환할 때 int.Parse() 또는 Convert.ToInt32() 메서드를 사용합니다. 두 메서드 모두 변환할 수 없는 문자열이 입력되면 예외(Exception)를 발생시키지만, null 값 처리 방식에서 중요한 차이가 있습니다.
Convert.ToInt32는 null 값을 허용하며, null이 입력되어도 어떤 오류도 발생시키지 않습니다. 반면 int.Parse는 null 값을 허용하지 않으며, null이 입력되면 ArgumentNullException 오류를 발생시킵니다.
예제 1: int.Parse()로 문자열 변환하기
class Program {
static void Main() {
int res;
string myStr = "5000";
res = int.Parse(myStr);
Console.WriteLine("문자열을 숫자로 변환한 결과: " + res);
Console.ReadLine();
}
}
출력 결과
문자열을 숫자로 변환한 결과: 5000
유효한 숫자 형식의 문자열이라면 두 메서드 모두 정상적으로 동작합니다.
예제 2: Convert.ToInt32()에 null 값 전달하기
class Program {
static void Main() {
int res;
string myStr = null;
res = Convert.ToInt32(myStr);
Console.WriteLine("문자열을 숫자로 변환한 결과: " + res);
Console.ReadLine();
}
}
출력 결과
문자열을 숫자로 변환한 결과: 0
Convert.ToInt32()에 null이 전달되면 예외 없이 기본값인 0을 반환합니다.
예제 3: int.Parse()에 null 값 전달하기
class Program {
static void Main() {
int res;
string myStr = null;
res = int.Parse(myStr);
Console.WriteLine("문자열을 숫자로 변환한 결과: " + res);
Console.ReadLine();
}
}
출력 결과
Unhandled exception. System.ArgumentNullException: Value cannot be null.
int.Parse()에 null이 전달되면 프로그램이 비정상 종료되며 System.ArgumentNullException 예외가 발생합니다.
정리: 언제 어떤 메서드를 사용해야 할까?
- int.Parse(): 입력값이 null이 아님을 보장할 수 있고, 잘못된 입력에 대해 명확하게 예외를 처리하고 싶은 경우 적합합니다.
- Convert.ToInt32(): null 가능성이 있는 입력을 안전하게 처리하고 싶은 경우 유용하며, null일 때 0으로 처리됩니다.
- 두 메서드 모두 숫자 형식이 아닌 문자열(예: "abc")이 입력되면
FormatException을 발생시킵니다. - 변환 성공 여부를 사전에 확인하고 싶다면
int.TryParse()사용을 권장합니다.