변수를 사용할때 사용하고 있는 자료의 형태를 변환 해야할 일이 있습니다.
예) 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을 변환하면 예외 처리를 해줍니다.
'C# > 데이터 다루기' 카테고리의 다른 글
[C#] 이스케이프 시퀀스(escape sequence) (0) | 2024.04.22 |
---|---|
[C#] Console.WriteLine() / Console.ReadLine() (0) | 2024.03.25 |
[C#] 자료형 - 정리표 (0) | 2024.03.25 |
[C#] 자료형 - 문자열과 문자 (string, char) (0) | 2024.03.25 |
[C#] 자료형 - 숫자 (int, float, double) (0) | 2024.03.25 |
댓글