Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 문자열이 숫자인지 확인하는 방법 (int.TryParse vs int.Parse)

C#에서 어떤 문자열이 유효한 숫자인지 판별하려면 int.TryParse 또는 int.Parse 메서드를 사용하면 됩니다.

두 메서드의 핵심 차이는 변환에 실패했을 때의 동작입니다. int.Parse는 문자열을 정수로 변환하지 못하면 즉시 FormatException 예외를 발생시키는 반면, int.TryParse는 예외를 던지지 않고 대신 변환 성공 여부를 bool 값으로 반환합니다. 또한 int.TryParse는 out 매개변수를 통해 변환된 정수 값을 함께 돌려주기 때문에, 사용자 입력 검증처럼 변환 실패 가능성이 있는 상황에서 훨씬 안전하게 활용할 수 있습니다.

예제 1: 유효한 숫자 문자열 다루기

using System;

namespace DemoApplication {
    class Program {
        static void Main(string[] args) {
            string numberString = "123";
            int number = 0;

            // TryParse: 성공 여부를 bool로 반환, 변환된 값은 out 매개변수로 전달
            if (int.TryParse(numberString, out number)) {
                Console.WriteLine($"TryParse 변환 결과: {number}");
            }

            // Parse: 변환된 정수를 바로 반환
            Console.WriteLine($"Parse 변환 결과: {int.Parse(numberString)}");
            Console.ReadLine();
        }
    }
}

실행 결과

TryParse 변환 결과: 123
Parse 변환 결과: 123

위 예제에서 numberString은 "123"이라는 유효한 숫자이므로 int.TryParse가 true를 반환해 if 문 안의 코드가 실행되고, out 매개변수 number에는 변환된 값 123이 저장됩니다. int.Parse 역시 문자열이 올바른 숫자 형식이므로 예외 없이 정수 값을 그대로 반환합니다.

예제 2: 숫자가 아닌 문자열 다루기

using System;

namespace DemoApplication {
    class Program {
        static void Main(string[] args) {
            string numberString = "A123";
            int number = 0;

            if (int.TryParse(numberString, out number)) {
                Console.WriteLine($"TryParse 변환 결과: {number}");
            } else {
                Console.WriteLine("문자열에 유효한 숫자가 없습니다.");
            }
            Console.ReadLine();
        }
    }
}

실행 결과

문자열에 유효한 숫자가 없습니다.

문자열 "A123"에는 알파벳 'A'가 포함되어 있어 유효한 숫자 형식이 아닙니다. 따라서 int.TryParse는 false를 반환하고 else 블록이 실행됩니다. 만약 같은 상황에서 int.Parse를 사용했다면 프로그램은 아래와 같이 예외를 발생시키며 비정상 종료될 수 있습니다.

예제 3: int.Parse 사용 시 발생하는 예외

using System;

namespace DemoApplication {
    class Program {
        static void Main(string[] args) {
            string numberString = "A123";

            // FormatException 발생: 입력 문자열의 형식이 잘못되었습니다.
            Console.WriteLine($"Parse 변환 결과: {int.Parse(numberString)}");
        }
    }
}

정리: 어떤 메서드를 선택해야 할까?

  • int.Parse: 문자열이 항상 유효한 숫자라는 것이 보장된 경우에 적합합니다. 단, 변환에 실패하면 FormatException이 발생하므로 필요에 따라 try-catch로 감싸야 합니다.
  • int.TryParse: 사용자 입력처럼 변환 실패 가능성이 있는 경우에 적합합니다. 예외 처리 없이 bool 반환값만으로 성공 여부를 판단할 수 있어 코드가 간결해지고, 예외 발생 비용이 없으므로 성능 면에서도 유리합니다.