[C#] Casting

KYJ의 Tech Velog·2023년 7월 18일
0

C#

목록 보기
1/6
post-thumbnail

형변환 (Casting)

프로그래밍 언어에는 다양한 자료형이 있습니다.

개발을 하다보면 서로 다른 자료형 간의 변환이 필요할 때가 있는데 대표적으로 3가지 정도가 있습니다.

  • 숫자를 다른 형태의 숫자로 변환 (ex. 정수 -> 실수)
  • 다른 자료형을 문자열로 변환
  • 문자열을 다른 자료형으로 변환

1. 숫자 -> 숫자

숫자의 자료형도 정말 다양합니다.

변경하는 방법 자체는 어떤 자료형이건 간에 다르지 않기 때문에 정수와 실수 간의 변환을 예시로 들어보겠습니다.

실수 -> 정수

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; // 가능

2. 다른 자료형 -> 문자열

어떤 자료형을 문자열로 바꾸는 방법이 있습니다.

바로 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. 문자열 -> 다른 자료형

문자열을 다른 자료형으로 바꾸는 것은 조금 복잡하고 다양합니다.

대표적으로 3가지 방법을 사용합니다.

  • Convert 클래스
  • Parse() 함수
  • TryParse() 함수

Convert 클래스

System 네임스페이스에 있는 Convert 클래스를 이용하여 변환이 가능합니다.

string iStr = "10";
int x = Convert.ToInt32(iStr); // x : 10

string bStr = "true";
bool b = Convert.ToBoolean(bStr); // b : true
네임스페이스

Unity 프로젝트에서 새 스크립트를 추가하면 기본적으로 System 네임스페이스는 추가가 되어 있습니다.

형병환 함수

Parse() 함수

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() 함수

위의 상황을 해결하기 위해 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

Convert vs Parse

null 값을 변환하려고 시도했을 때 0을 반환하느냐, 예외 처리를 해주느냐의 차이가 있습니다.

string nStr = null;
Convert.ToInt32(nStr); // 0
Int32.Parse(nStr); // ArgumentNullException

0개의 댓글