본문 바로가기

프로그램/유니티 C# 강좌

[유니티 C# 강좌] 6. 형 변환(Type Conversions)

728x90
반응형

프로그래밍을 하다 보면, 데이터 형식을 바꾸어 사용해야 하는 경우가 있습니다.

이렇게 데이터 형식을 바꾸는 것을 형 변환이라고 합니다.

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 성능

 

박싱과 언방식시 많은 계산과정이 필요합니다.

그래서 성능의 저하가 발생합니다.

그러므로 될 수 있으면, 사용하지 마세요!!!

 

 

728x90
반응형