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에 대해 알아보았습니다.
'C#' 카테고리의 다른 글
C# 얕은 복사(Shallow Copy) 깊은 복사(Deep Copy) (0) | 2024.12.09 |
---|---|
c# - reflection과 Attribute에 대해 알아보자 (0) | 2024.10.23 |
2024 내일 배움캠프(Unity_6기) _ 사전캠프 7일차(08.21) : String 과 StringBuilder에 대해 알아보자 (1) | 2024.08.21 |
2024 내일 배움캠프(Unity_6기) _ 사전캠프 6일차(08.20) : C# 문자열 보간 에 대해 알아보자 (0) | 2024.08.20 |
2024 내일 배움캠프(Unity_6기) _ 사전캠프 5일차(08.19) - Random에 대해 알아보자 (0) | 2024.08.19 |