말감로그

Unity C# 기초 2. 형변환(casting) 본문

언어/C#

Unity C# 기초 2. 형변환(casting)

habbn 2023. 5. 10. 01:19
728x90
1. 형변환 (Casting)
변수나 리터럴 타입을 다른 타입으로 변환하는 것

 

  • 데이터 형의 크기 순서
    • double > float > ulong > long > uint > int > ushort > short > char

 

 

1. 자동 형변환

 

작은 자료형에서 큰 자료형으로 이동할 때 자동으로 형변환을 시켜줍니다.

서로 다른 데이터형 변수에 대입하거나 연산을 할 때 자동으로 형변환 되는 규칙이 있습니다.

단, 서로 다른 데이터형 일 때 큰쪽으로만 상승 변환되는 특징이 있습니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        int ii = 123;
        float ff = ii;     //자동 형변환 123.0f
        //int ii = ff;      //자동 형변환 불가능
		
        Debug.Log("ii = " + ii + " : ff " + ff);   //출력결과  ii = 123 : ff = 123
        
        long ll = 456L;
        ll = ii;          // 자동 형변환 가능 456L
        //ii = ll;        // 자동 형변환 불가능
    }    
}

큰 데이터형 (float) 을 작은 데이터형(int)에 자동으로 대입할 수 없기 때문에 

int ii = ff;  , ii = ll 는 자동 형변환이 불가능합니다.

 

 

2. 수동 형변환 (강제 형변환)

 

큰자료형에서 작은 자료형으로 이동할 때 오류가 발생하는데 오류가 발생하지 않도록 강제적으로 형변환을 해주는 것입니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        float ff = 12.34f;
        int ii = (int)ff;            // 수동 형변환(강제 형변환)
        Debug.Log("ii : " + ii);     // 출력 결과  ii : 12
    }    
}
//수동 형변환 활용 예

float xxx = 123.456f;
int MyInt = (int)xxx;
float MyFloat = xxx - (int)xxx;       //123.456f - 123;

Debug.Log(MyInt + " : " + MyFloat);   //123 : 0.4560013

 

 

3.  숫자형을  문자열로 변환하기 

 

ToString() 메서드를 사용하여 숫자형을 문자열로 변환합니다.

 

int number = 123;
string text = number.ToString()      // "123"

float f_number = 3.14f;
string f_text = f_number.ToString() // "3.14"

 

 

4. 문자열을 숫자형으로 변환하기

 

int.Parse()를 사용하여 변환해 줄 수 있지만 특수 문자가 끼어 있으면 변환 에러가 발생하는 좀 위험한 함수입니다. 

 

string EEE = "123";
int III = int.Parse(EEE);
Debug.Log(III);

 

int.TryParse("체크해야될 값" , out 리턴값) 함수를 사용하여 변환하는 것이 안전한 형변환입니다.

 

int FFF = 0;
int.TryParse("123", out FFF);
Debug.Log(FFF);          //출력결과 123

FFF = FFF + 5000;
Debug.Log(FFF);          //5123;

 

728x90