[유니티 / C#] 자료형과 형변환

프로그래밍에는 다양한 종류의 자료형들이 있습니다.

숫자를 나타내고, 문자를 나타내는 등 각 자료형마다 담을 수 있는 데이터의 형식이 달라지게 됩니다.

 

프로그래밍에서의 아주 기본적인 개념이지만

앞으로 자료형을 통해 변수를 선언하고 반환값을 지정하는 등의 행위를 셀 수 없이 반복할 것이기 때문에

확실하게 이해하는 것이 중요합니다.

 

 

 

자료형

데이터의 종류를 식별하는 분류 체계로, 수행 가능한 연산, 저장 가능한 값, 값의 범위, 저장 방식등을 결정합니다.

 

각 자료형마다 메모리에 차지하는 바이트 수가 다르고 표현할 수 있는 문자 타입, 범위 등이 다르기 때문에

자료형에 대해 자세히 알고 있어야 상황에 맞는 자료형을 사용할 수 있습니다.

 

 

 

< 자료형 종류 >

자료형 크기(byte) 범위
정수형 sbyte 1 -128 ~ 127
byte 1 0 ~ 255
short 2 -32,768 ~ 32,767
ushort 2 0 ~ 65,535
int 4 -2,147,483,648 ~ 2,147,483,647
uint 4 0 ~ 4,294,967,295
long 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
ulong 8 0 ~ 18,446,744,073,709,551,615
실수형 float 4 -3.4 x 10^38 ~ 3.4 x 10^38
double 8 -1.8 x 10^308 ~ 1.8 x 10^308
decimal 16 -7.9228 x 10^28 ~ 7.9228 x 10^28
논리형 bool 1  
문자 char 2
문자열 string 길이에 따라
다름
열거형 enum 멤버에 따라
다름
구조체 struct 멤버에 따라
다름
튜플 Tuple 멤버에 따라
다름
Nallable 값 형식 Nullable 원래 형식의
크기

 

 

 

 

 

형변환

선언된 변수의 자료형을 다른 자료형으로 변환하는 것을 형변환이라고 부릅니다.

형변환의 방법에는 다양한 방법이 존재합니다.

 

 

 

 

다양한 형변환 방법들

 

암시적 형변환(Implicit Casting)

 

암시적 형변환은 컴파일러나 런타임 환경이 데이터 타입을 자동으로 변환하는 것을 의미하며, 자동 형변환 이라고도 부릅니다.

주의해야 할 점은 상대적으로 작은 범위의 자료형에서 큰 범위의 자료형으로 변환할 때 가능합니다.

 

아래 예제를 보시면 1번의 경우 상대적으로 크기가 작은 int형을 long형으로 형변환 하였기 때문에 성공적으로 변환에 성공했습니다. 이처럼 작은 타입을 큰 타입으로 변환하는 것을 숫자 승격이라고 합니다.

 

하지만 2번을 보시면 long형을 int형으로 바꾸려다 보니 형변환이 되지 않아 에러가 발생하게 됩니다.

크기가 큰 타입을 작은 타입으로 변환할 땐 작은 타입이 담을 수 없는 범위의 숫자가 변환되어 담길 위험이 있기 때문입니다.

 

 

 

< 암시적 형변환 예제 >

예제 1번.
//int(4바이트) -> long(8바이트)로 암시적 형변환 성공
int a = 1;
long b = a; => 형변환 성공

예제 2번.
//long(8바이트) -> int(4바이트)로 암시적 형변환 실패
long a = 1;
int b = a; => 에러 발생

 

 

 

 

 

명시적 형변환(Explicit Casting)

 

명시적 형변환은 말 그대로 특정 데이터 타입을 직접 명시하여 변환하는 방식입니다.

 

예제 1번의 경우 int 타입 보다 long 타입이 더 크기 때문에 형 변환이 잘 되었습니다.

예제 2번의 경우 변수 a가 int 타입의 범위보다 더 큰 수를 가지고 있었기 때문에 형 변환 중 오버플로우가 발생하여 가장 작은 값인 

-2147483648가 출력됩니다.

왜 자료형의 가장 작은 값이 출력되는지 궁금하다면 숫자가 메모리에 저장되는 과정을 찾아보시면 도움이 되실 겁니다.

예제 1번.
int a = 2147483647;
long b = (long)a;		// b => 2147483647

예제 2번.
long a = 2147483648;
int b = (int)a;			//b => -2147483648

 

 

 

 

 

Parse(), TryParse 메서드

 

Parse()와 TryParse() 메서드는 둘 다 문자열을 특정 타입으로 변환하는 메서드입니다.

 

● (Type).Parse(String str)

매개변수로 받은 문자열 str을 Type 형태로 변환 후 반환합니다.

하지만 반환값이 Type 형태에 맞지 않을 경우 FormatException 예외 처리가 생길 수 있습니다.

 

 (Type).TryParse(String str, out var)

매개변수로 받은 문자열 str을 Type 형태로 변환합니다.

이때 str이 Type에 맞는 문자열일 경우 Ture를 반환 후 var 변수에 변환된 값 대입, 맞지 않는 문자열일 경우 False를 반환 후 var 변수에 0을 대입합니다.

 

 

1. Parse() 예제.

string str = "392";
int num = int.Parse(str);	

2. TryParse() 예제.

string inputStr = "2025";
int num;

bool isNumber = int.TryParse(inputStr, out num);

 

 

 

 

 

Convert 클래스

 

Parse()와 비슷하게 입력받은 매개변수를 메서드에 맞는 형으로 변환합니다.

Convert 클래스 역시 변환 타입에 맞지 않은 값을 반환 시 에러가 나기에 주의해서 사용해야 합니다.

 

메서드 기능
Convert.ToInt32(value) int 변환
Convert.ToInt64(value) long 변환
Convert.ToSingle(value) float 변환
Convert.ToDouble(value) double 변환
Convert.ToDecimal(value) decimal 변환
Convert.ToBoolean(value) 논리형 변환 0 -> false, 1 -> true
Convert.ToChar(value) 문자 변환
Convert.ToString(value) 문자열 변환
Convert.ToDateTime(value) 타임스탬프 변환 "2025-09-11" -> DateTime형으로 변환

 

 

 

 

 

as 연산자

참조타입 간의 형변환에만 사용되는 연산자로 캐스팅에 성공하면 결과를 반환, 실패하면 null을 반환합니다.

 

object obj = "Hello";

string str = obj as string;

if (str != null)
    Console.WriteLine(str);	=> "Hello" 출력

 

 

 

 

 

is 연산자

캐스팅이 가능하면 true, 불가능하면 false를 반환하는 연산자입니다.

오로지 캐스팅 성공 유무만을 판단할 수 있습니다.

 

object obj = "Hello";

if (obj is string) //obj가 string으로 변환이 가능하다면 실행
    Console.WriteLine("변환 가능!");
   
=> 변환 가능! 출력

'개발, IT > C#' 카테고리의 다른 글

[유니티 / C#] 반복문 for, while, foreach  (0) 2025.09.11
[유니티 / C#] 조건문  (0) 2025.09.11
[유니티 / C#] 변수  (0) 2025.09.08
[유니티 / C#] 재귀함수(Recursive Function)  (0) 2025.09.07
[유니티 / C#] Main 함수  (0) 2025.09.07