프로그래밍 언어에는 다양한 자료형이 있습니다.
개발을 하다보면 서로 다른 자료형 간의 변환이 필요할 때가 있는데 대표적으로 3가지 정도가 있습니다.
숫자의 자료형도 정말 다양합니다.
변경하는 방법 자체는 어떤 자료형이건 간에 다르지 않기 때문에 정수와 실수 간의 변환을 예시로 들어보겠습니다.
int x = 7;
float y = 3.0f;
int sum = x + (int)y; // 변환하고자 하는 변수 앞에 변환하고 싶은 자료형을 괄호에 넣어 명시
int x = 7;
float y = 3.0f;
float sum = (float)x + y; // 변환하고자 하는 변수 앞에 변환하고 싶은 자료형을 괄호에 넣어 명시
주의 사항
앞서 언급한 것처럼 명시하지 않아도 캐스팅이 가능한 경우가 있습니다.
int x = 7;
float y = 3.0f;
float sum = x + y; // 가능
어떤 자료형을 문자열로 바꾸는 방법이 있습니다.
바로 ToString() 함수를 이용하는 것입니다.
int x = 7;
string strX = x.ToString(); // "10"
float y = 3.5f;
string strY = y.ToString(); // "3.5"
bool myBool = true;
string strBool = myBool.ToString(); // "true"
나중에 Unity 개발을 진행하게 되면 로그를 출력하거나 게임 화면에 다양한 정보를 출력해야될 상황이 정말 많습니다.
그 때에 정말 많이 사용하게 될 함수이니 알아두시면 좋을 거 같습니다.
문자열을 다른 자료형으로 바꾸는 것은 조금 복잡하고 다양합니다.
대표적으로 3가지 방법을 사용합니다.
System 네임스페이스에 있는 Convert 클래스를 이용하여 변환이 가능합니다.
string iStr = "10";
int x = Convert.ToInt32(iStr); // x : 10
string bStr = "true";
bool b = Convert.ToBoolean(bStr); // b : true
네임스페이스
Unity 프로젝트에서 새 스크립트를 추가하면 기본적으로 System 네임스페이스는 추가가 되어 있습니다.
string iStr = "7";
int x = Int32.Parse(iStr); // x : 7
string bStr = "true";
bool b = Boolean.Parse(bStr); // b : true
위의 두 방법으로는 변환할 수 없는 값을 변환하고자 할 때 문제가 생깁니다.
string iStr = "7abc";
int x = Convert.ToInt32(iStr); // 에러 발생
string bStr = "test";
bool b = bool.Parse(bStr); // 에러 발생
위의 상황을 해결하기 위해 TryParse() 함수를 사용합니다.
out 이라는 새로운 개념이 등장하는데 일단은 나중에 알아보도록 하겠습니다.
string iStr = "7";
int x;
Int32.TryParse(iStr, out x); // x : 7
string bStr = "true";
bool b;
Boolean.TryParse(bStr, out b); // b : true
기존의 방법들과 다른 점은 함수의 반환값의 자료형이 bool이라는 것입니다.
기존의 방법들은 함수의 반환값이 변환한 값이였습니다.
변환에 성공한다면 true를 반환하고 변환에 실패한다면 false를 반환합니다.
string iStr = "7"; // int 로 변환할 수 있으니 성공
int x;
bool isSuccess = int.TryParse(iStr, out x); // isSuccess : true
string bStr = "test"; // bool 로 변환할 수 없으니 실패
bool b;
bool isSuccess = bool.TryParse(bStr, out b); // isSuccess : false
null 값을 변환하려고 시도했을 때 0을 반환하느냐, 예외 처리를 해주느냐의 차이가 있습니다.
string nStr = null;
Convert.ToInt32(nStr); // 0
Int32.Parse(nStr); // ArgumentNullException