C#

2024 내일 배움캠프(Unity_6기) _ 사전캠프 4일차(08.16) - C# 문법 기초 : Convert, Parse, TryParse

근본넘치는개발자 2024. 8. 16. 18:01

string을 int로, int를 char로 바꾸는 등 

변수를 사용할때 상황에 맞춰서 자료의 형태를 변환해야 할 때가 생깁니다. 

(영어로는 Casting 이라고 합니다.)

 

그중 문자를 다른 자료형으로 변환할때

C#에서는 Convert, Parse를 사용하는데요,
각각의 차이점에 대해서 정리해보고자 합니다. 

 

먼저 사용법부터 알아보겠습니다. 

Convert 사용법

 

Convert.To~~ (변환하고자 하는 대상)

~~에는 타입명

 

ex) 문자를 int형으로 변환하고자 할때

string iStr = "10";

int x;

x = Convert.ToInt32(iStr);

Parse()함수 사용법

~~.parse(변환하고자 하는 대상)

~~에는 타입명

 

ex) 문자를 bool형으로 변환하고자 할때

string bStr = "true";

bool b;

b = bool.Parse(bStr); 

 

 

차이점으로는 null값이 들어올 경우

Parse()는 에러를 출력하지만 Convert의 경우 0을 출력합니다.

 

 

두 방법은 변환할 수 없는 값이 올 때 문제가 발생합니다.

 

string iStr = "10xxxx";

int x;

x = Convert.ToInt32(iStr); // x : ??? 에러 발생

 

10뒤에 x가 와서 int로 바꿀수가 없는 상황입니다.

 

string bStr = "testtest";

bool b;

b = bool.Parse(bStr); // b : ???? 에러 발생

 

testtest는 true인지 false인지 bool로 나타낼 수 없기에 에러가 발생합니다. 

 

 

이런 경우를 위해 TryParse()를 사용할 수 있습니다.

TryParse()는 앞선 방식과 다르게 반환값으로 값을 받지 않고 

bool값만을 받아 형 변환이 성공했는지 알려줍니다. 

 

이런 특성을 활용하여 변환이 성공했을때만 동작하도록 할 수 있겠죠?

 

TryParse()의 동작원리를 이해하려면 out 매개변수 한정자에 대해 알아야 합니다. 

 

out은 메서드 내부에서 값을 할당해야 하며, 초기화되지 않은 변수를 받을 수 있습니다.

예제를 통해 알아보죠.

void GetValues(out int x, out int y)
{

x = 10;
y = 20;

}

int a, b; 
GetValues(out a, out b);
Console.WriteLine($"a: {a}, b: {b}"); // a: 10, b: 20

 

다음의 예제에서 보면 out의 위치는 매개변수의 데이터 타입 앞에 위치하고,

out 키워드를 사용해 변수가 참조로 전달이 됩니다.

 

string iStr = "10"; // int 로 변환 할 수 있으니 성공
int x;
bool isSuccess;
isSuccess = int.TryParse(iStr, out x); // isSuccess : true

 

 

 

이렇게 오늘은 캐스팅하는 방법 중 Convert, Parse, TryParse에 대해 알아보았습니다.