CSharp 입력값 변환 - Parse vs TryParse

양승준·2025년 3월 27일

CSharp

목록 보기
6/20
post-thumbnail

C# 입력값 변환 - Parse vs TryParse


왜 숫자 덧셈이 아니라 문자열로 이어질까?

🧪 예제 코드

class Program
{
    static void Main(string[] args)
    {
        string characterStringInfo;

        Console.WriteLine("*===================================*");
        Console.WriteLine("|영웅님! 캐릭터 Level을 입력해주세요.|");
        Console.WriteLine("*===================================*");
        Console.Write("[Lv 입력]: ");
        characterStringInfo = Console.ReadLine();

        Console.WriteLine("영웅님의 캐릭터 레벨은 [{0}]입니다.", characterStringInfo);
        Console.WriteLine("영웅님의 이벤트로 1 레벨업! ");
        Console.WriteLine("영웅님의 캐릭터 레벨은 [{0}]입니다.", characterStringInfo + 1);
    }
}

[Lv 입력]: 10
영웅님의 캐릭터 레벨은 [10]입니다.
영웅님의 이벤트로 1 레벨업!
영웅님의 캐릭터 레벨은 [101]입니다.

이유는?

  • characterStringInfostring 타입이다.
  • string + int 연산은 문자열 연결로 처리된다.
  • 즉, "10" + 1"10" + "1""101"

그래서 여기서 문자열을 숫자로 바꾸는 작업 이 필요하다는 걸 알 수 있었다.


Parse - 정확한 입력만 받는다면?

int level = int.Parse("10"); // 문자열을 정수로 변환

💡 특징

  • 문자열이 자료형에 맞는 형식이면 정상 변환
  • 형식이 맞지 않으면 예외(Exception) 발생!

🧪 Parse 사용 코드

Console.Write("[Lv 입력]: ");
string input = Console.ReadLine();
int level = int.Parse(input);
Console.WriteLine("[Parse 사용] 캐릭터 레벨: {0}", level + 1);

[Lv 입력]: abc < ERROR!!!
오류로 종료됨...

❌ 잘못된 값 입력 시

  • 예: "abc", "10a" 등 → 프로그램 오류로 종료됨

TryParse - 예외 없이 안전하게 처리하고 싶다면?

bool success = int.TryParse("10", out int level);

💡 특징

  • 문자열이 형식에 맞는지 먼저 검사
  • 맞다면 out 변수에 값 저장, 결과는 true
  • 틀리면 기본값(0) 저장, 결과는 false

🧪 TryParse 사용 코드

Console.Write("[Lv 입력]: ");
string input = Console.ReadLine();

bool success = int.TryParse(input, out int level);
Console.WriteLine("[TryParse 사용][성공 여부: {0}] 캐릭터 레벨: {1}", success, level + 1);

출력 결과

[Lv 입력]: 10
[TryParse 사용][성공 여부: True] 캐릭터 레벨: 11
[Lv 입력]: aa
[TryParse 사용][성공 여부: False] 캐릭터 레벨: 1

  • 잘못된 입력에도 프로그램은 멈추지 않고 동작함!

정리: 언제 쓰면 좋을까?

상황추천 방식이유
입력이 정확하다고 확신Parse()간결하고 빠름
입력값이 예측 불가능TryParse()예외 없이 안전하게 처리 가능

int형만 될까?

아니다. 처리할 데이터(값)을 원하는 값 타입 한정해서 변경해주는 것이 Parse, TryParse이다.

자료형설명예시
int정수int.TryParse("123", out int i)
float실수 (단정도)float.TryParse("3.14", out f)
double실수 (배정도)double.Parse("3.14")
decimal고정 소수점decimal.TryParse("123.45", out d)
bool참/거짓bool.Parse("true")
char문자 1개char.TryParse("A", out c)
DateTime날짜DateTime.TryParse(...)
TimeSpan시간 간격TimeSpan.TryParse(...)
Enum열거형Enum.TryParse("Monday", out d)

정리하면서 알았는데 DataTimeTimeSpan 도 되는지는 처음 알았다.
역시 사람은 계속해서 배우나 보다~

총 정리

  • ParseTryParse는 문자열을 숫자 등으로 바꾸는 데 사용됨
  • 차이는 오류 처리 방식안정성에 있음
  • 사용자 입력에는 TryParse 추천!
profile
지모창말, 미모창.

0개의 댓글