프로그래밍을 하다 보면, 데이터 형식을 바꾸어 사용해야 하는 경우가 있습니다.
이렇게 데이터 형식을 바꾸는 것을 형 변환이라고 합니다.
C#은 기본적으로 정수형에서 실수형으로, 또는 실수형에서 정수형 같이 숫자형 데이터 형식끼리 형 변환뿐만 아니라, 문자형에서 숫자형이나 논리형에서 숫자형 등 여러 가지 형태의 형 변환이 지원합니다.
1. 묵시적 형 변환
묵시적 형 변환은 형 변환을 할 때 값의 손실이 없을 때 사용하는 방식입니다.
대표적인 경우가 정수 값을 실수 값으로 바꾸는 것입니다.
1.1 사용 방범
그냥 형 변환을 원하는 변수에 대입만 하면 됩니다.
사용 방법 : 묵시적 형 변환 |
데이터-형식-1 변수-이름-1; 데이터-형식-2 변수-이름-2 = 변수-이름-1; |
1.2 숫자 변환표
다음 숫자 변환표는 From데이터 형식에서 To데이터 형식으로 변환 가능한 표입니다.
- 정수형 → 실수형.
- 실수형 → 저장 용량이 큰 실수형(float → double → decimal)
- 정수형 → 저장 용량이 크고 정수형 부호 여부에 따라 결정됨.
From |
To |
sbyte |
short, int, long, float, double, decimal |
byte |
short, ushort, int, uint, long, ulong, float, double, decimal |
char |
ushort, int, uint, long, ulong, float, double, decimal |
short |
int, long, float, double, decimal |
ushort |
int, uint, long, ulong, float, double, decimal |
int |
long, float, double, decimal |
uint |
long, ulong, float, double, decimal |
long |
float, double, decimal |
ulong |
float, double, decimal |
float |
double |
using UnityEngine;
public class ImplicitConversionsExample : MonoBehaviour
{
void Start()
{
int i1 = 1;
float f1 = i1;
}
}
2. 명시적 형 변환(캐스트, Casts)
명시적 형 변환은 데이터의 정보 손실이 위험이 있다고 하여도, 데이터 형식을 변환해야 하는 경우 사용되는 형 변환입니다.
실수인 3.14를 정수로 변환하면 3으로 바뀌지만, 이 값을 가지고 작업을 하여도 문제가 없는 경우에 사용하면 됩니다.
2.1 사용방법
형 변환할 변수 이름 앞에 (데이터 형식)을 넣으면 됩니다.
사용 방법 : 명시적 형 변환 |
(데이터-형식)변수-이름; |
데이터-형식-1 변수-이름-1 = 값; 데이터-형식-2 변수-이름-2 = (데이터-형식-1)변수-이름-1; |
2.2 숫자 변환표
다음 숫자 변환표는 From데이터 형식에서 To데이터 형식으로 변환 가능한 표입니다.
From |
To |
sbyte |
byte, ushort, uint, ulong, char |
byte |
sbyte, char |
short |
sbyte, byte, ushort, uint, ulong, char |
ushort |
sbyte, byte, short, char |
int |
sbyte, byte, short, ushort, uint, ulong, char |
uint |
sbyte, byte, short, ushort, int, char |
long |
sbyte, byte, short, ushort, int, uint, ulong, char |
ulong |
sbyte, byte, short, ushort, int, uint, long, char |
char |
sbyte, byte, short |
float |
sbyte, byte, short, ushort, int, uint, long, ulong, char, decimal |
double |
sbyte, byte, short, ushort, int, uint, long, ulong, char, float, decimal |
decimal |
sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double |
using UnityEngine;
public class ExplicitConversionsExample : MonoBehaviour
{
void Start()
{
float x = 1.234f;
int a = (int)x;
Debug.Log(a); // 출력 : 1
}
}
3. 바이트 배열 → 숫자데이터 형식(정수형, 실수형, 논리형)
바이트 배열을 정수형으로 바꾸는 방법은 BitConverter 클래스의 메서드를 사용하면 됩니다.
BitConverter 클래스를 사용하기 위해서는 using 지시문을 사용하여 System 네임스페이스에서 형식 사용을 허용합니다.
메서드 |
반환되는 형식 |
ToBoolean(Byte[], Int32) |
bool |
ToChar(Byte[], Int32) |
char |
ToDouble(Byte[], Int32) |
double |
ToInt16(Byte[], Int32) |
short |
ToInt32(Byte[], Int32) |
int |
ToInt64(Byte[], Int32) |
long |
ToSingle(Byte[], Int32) |
float |
ToUInt16(Byte[], Int32) |
ushort |
ToUInt32(Byte[], Int32) |
uint |
ToUInt64(Byte[], Int32) |
ulong |
using UnityEngine;
using System;
public class ByteArrayToIntExample : MonoBehaviour
{
void Start()
{
byte[] bytes = { 0, 1, 2, 34 };
int i = BitConverter.ToInt32(bytes, 0);
Debug.Log(i); // 출력 : 570556672
}
}
4. 문자형 → 숫자데이터 형식(정수형, 실수형, 논리형)
4.1 Parse 메서드
숫자로 표기된 문자열을 숫자데이터 형식(int, long, ulong, float, decimal 등)으로 변환합니다.
각 데이터 형식에 Parse 메서드를 사용하면 됩니다.
사용 방법 |
숫자형-변수 = 숫자형-데이터-형식.Parse("숫자로-표기된-문자열") |
using UnityEngine;
public class ParseExample : MonoBehaviour
{
void Start()
{
string s1 = "12345";
int i1 = int.Parse(s1);
Debug.Log(i1.ToString()); // 출력 : 12345
string s2 = "123.45";
float f2 = float.Parse(s2);
Debug.Log(f2.ToString()); // 출력 : 123.45
}
}
4.2 TryParse 메서드
숫자로 표기된 문자열을 숫자 데이터 형식(int,long, ulong, float, decimal 등)으로 변환합니다.
각 데이터 형식에 TryParse 메서드를 사용하면 됩니다.
사용 방법 : TryParse |
숫자형-데이터-형식 숫자형-변수-이름(= 초기값); 숫자형-데이터-형식.TryParse("숫자로-표기된-문자열", out 숫자형-변수이름); |
using UnityEngine;
public class TryParseExample : MonoBehaviour
{
void Start()
{
string s1 = "12345";
int i1 = default(int);
int.TryParse(s1, out i1);
Debug.Log(i1.ToString()); // 출력 : 12345
string s2 = "123.45";
float f2 = default(float);
float.TryParse(s2, out f2);
Debug.Log(f2.ToString()); // 출력 : 123.45
}
}
4.3 Parse와 TryParse의 차이
Parse는 변환 값이 숫자이지만, TryParse는 변환 성공 여부에 따른 True, False입니다.
그리고 Parse는 변환 중 에러가 발생해도 오류를 발생시키지 않습니다.
그래서 프로그램의 안전성을 위해 TryParse 메서드를 사용할 것을 권장합니다.
5. 박싱(Boxing), 언박싱(Unboxing)
모든 데이터 형식은 object의 상속을 받기 때문에, 모든 데이터 형식으로 변환이 가능합니다.
5.1 박싱
object형 변수에 다른 데이터 형식에 값을 대입하는 것입니다.
예제 : 박싱 |
int i = 123; object o = i; // boxing |
5.2 언박싱
일반 데이터 형식 변수에 object형 값을 대입하는 것입니다.
예제 : 언박싱 |
object o = 123; int i = (int)o; // unboxing |
5.3 성능
박싱과 언방식시 많은 계산과정이 필요합니다.
그래서 성능의 저하가 발생합니다.
그러므로 될 수 있으면, 사용하지 마세요!!!
'프로그램 > 유니티 C# 강좌' 카테고리의 다른 글
[유니티 C# 강좌] 8. 문(Statement), 조건문(Conditional Statement) (0) | 2019.11.14 |
---|---|
[유니티 C# 강좌] 7. 연산자(Operator) (2) | 2019.11.12 |
[유니티 C# 강좌] 5. 열거형(Enumeration) (0) | 2019.10.28 |
[유니티 C# 강좌] 4. 문자열(String) (1) | 2019.10.27 |
[유니티 C# 강좌] 3. 배열(Array) (0) | 2019.10.26 |