C#/데이터 다루기

[C#] 형변환

테크러너 2024. 3. 25.

 

변수를 사용할때 사용하고 있는 자료의 형태를 변환 해야할 일이 있습니다.

예) string → int, string → bool

 

여러가지의 자료형이 있는 만큼 다양한 상황에서의 형 변환이 있지만 그중 가장 많이 사용하고 기본적인 3가지를 공유합니다.

 

  • 숫자를 다른 형태의 숫자로 변환
  • 다른 자료형문자로 변환
  • 문자다른 자료형으로 변환

 

 

1. 숫자 → 숫자 (int, float)

 

float → int

int x = 10;
float y = 10.0f;

int z = x + (int)y; // 사용하고 싶은 변수 앞에 괄호하고 변경하고 싶은 자료형 명시
 

int → float

int x = 10;
float y = 10.0f;

float z = (float)x + y; // 사용하고 싶은 변수 앞에 괄호하고 변경하고 싶은 자료형 명시
 

 

데이터의 손실이 없는 경우라면 앞에 괄호로 형태를 명시하지 않더라도 캐스팅이 가능합니다.

  • float 1.5f 를 int 1 로 바꾸려면 0.5 의 값이 사라지기 때문에 명시해야합니다.
  • int 1 을 float 1.0f 으로 바꾸려면 누락될 값이 없어 그냥 사용해도 됩니다.
int x = 10;
float y = 10.0f;

float z = x + y; // 가능합니다.
 

 

 

2. 다른 자료형 → 문자

숫자나 bool문자로 바꾸는 방법입니다.

간단하게 뒤에 .ToString()을 붙이면 변환할 수 있습니다.

int x = 10;
string xStr = x.ToString(); // "10"

float y = 10.5f;
string yStr = y.ToString(); // "10.5"

bool myBool = true;
string boolStr = myBool.ToString(); // "true"
 

 

3. 문자 → 다른 자료형

문자를 다른 자료형으로 바꾸는 방식은 조금 복잡하고 다양합니다.

대표적으로 3가지 방법이 존재합니다.

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

 

Convert 이용

Convert 를 이용하여 각각의 자료형으로 변환하는 방법입니다.

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

string bStr = "true";
bool b;
b = Convert.ToBoolean(bStr); // b : true
 

형변환 리스트

 

 

Parse() 함수 사용

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

string bStr = "true";
bool b;
b = bool.Parse(bStr); // b : true
 

 

 

에러 발생

Convert 와 Parse() 함수를 이용하면 변환한 값을 받아올 수 있습니다.

문제는 변환할 수 없는 값일때 문제가 생깁니다.

string iStr = "10xxxx";
int x;
x = Convert.ToInt32(iStr); // x : ??? 에러 발생

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

TryParse() 함수 사용

위와 같은 의도하지 않은 상황에 대처하기 위해 TryParse 가 있습니다.

out 개념이 들어가는데 어려운 개념이므로 이후 메모리 부분을 확인해주세요.

어떻게하면 사용할수 있는지 모양만 봐주세요.

string iStr = "10";
int x;
int.TryParse(iStr, out x); // x : 10

string bStr = "true";
bool b;
bool.TryParse(bStr, out b); // b : true
 

기존 방법과 다른 점은 반환값으로 캐스팅한 값을 받지 않습니다.

반환값은 bool 만 받으며 캐스팅이 성공했는지 알려줍니다.

string iStr = "10"; // int 로 변활 할 수 있으니 성공
int x;
bool isSuccess;
isSuccess = int.TryParse(iStr, out x); // isSuccess : true
 
string bStr = "testtest"; // bool 로 변활 할 수 있으니 실패
bool b;
bool isSuccess;
isSuccess = int.TryParse(bStr, out b); // isSuccess : false
 

 

Think

Convert 와 Parse 는 어떤 차이가 있을까?

더보기

Convert과 Parse 공통점 : 변환할 수 없는 값이 할당되어 있으면 FormatException이 발생합니다.

Convert과 Parse 차이점 : 문자열 bStr = null이 있다고 가정해보면, Convert 는 0 을 반환했는데, Parse 는 ArgumentNullException 이 발생합니다.

즉, Convert는 null을 변환하면 0을 반환하고, Parse는 null을 변환하면 예외 처리를 해줍니다.

 

 

반응형

댓글