자료형 ( Data Type )
자료형 ( Data Type )
자료형을 살펴보기 전에 생각해보자.
- 현실에서는 어떤 물체에 대한 정의를 내리기 위해 일종의 ‘기준’을 선정하는 일이 흔하다. 예를 들자면 ‘숫자’, ‘사람’, ‘동물’, ‘플라스틱’ 등과 같이 말이다. 하지만 0과 1만 알아들을 수 있는 컴퓨터라는 귀여운 기계에게 이런 기준을 알려주기 위해 어떤 방식을 사용했을지, 그리고 어떻게 기억하고 있는 것인지 확인해 보겠다.
프로그래밍에서 ‘자료형(Data Type)’은 무엇일까.
Data Type
이라는 이름 자체가 아주 정직하게 지어졌기 때문에, 이름에서 그 의미를 쉽게 유추할 수 있다.데이터의 종류를 분류해 놓은 것
이다. 물론 언어에 따라 이 자료형을 아주 유동적이고 인간 친화적으로 다룰 수 있게 해주는 프로그래밍 언어도 있지만, 필자는 게임 프로그래머이기 때문에 C, C++, C#의 기준으로만 작성하겠다.
자료형들은 운영체제, 프로그래밍 언어마다 상이할 수 있지만, C, C++, C#의 기준으로 아래의 표에서 확인할 수 있다.
타입 명칭 | 크기(byte) | 다른 명칭 | 값의 범위 |
---|---|---|---|
int | 4 | signed | –2,147,483,648 ~ 2,147,483,647 |
unsigned int | 4 | unsigned | 0 ~ 4,294,967,295 |
__int8 | 1 | char | -128 ~ 127 |
unsigned __int8 | 1 | unsigned char | 0 ~ 255 |
__int16 | 2 | short, short int, signed short int | –32,768 ~ 32,767 |
unsigned __int16 | 2 | unsigned short, unsigned short int | 0 ~ 65,535 |
__int32 | 4 | signed, signed int, int | –2,147,483,648 ~ 2,147,483,647 |
unsigned __int32 | 4 | unsigned, unsigned int | 0 ~ 4,294,967,295 |
__int64 | 8 | long long, signed long long | –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
unsigned __int64 | 8 | unsigned long long | 0 ~ 18,446,744,073,709,551,615 |
bool | 1 | 없음 | false 또는 true |
char | 1 | 없음 | 기본적으로 -128에서 127까지 를 사용하여 컴파일된 경우 0~255 |
signed char | 1 | 없음 | -128 ~ 127 |
unsigned char | 1 | 없음 | 0 ~ 255 |
short | 2 | short int, signed short int | –32,768 ~ 32,767 |
unsigned short | 2 | unsigned short int | 0 ~ 65,535 |
long | 4 | long int, signed long int | –2,147,483,648 ~ 2,147,483,647 |
unsigned long | 4 | unsigned long int | 0 ~ 4,294,967,295 |
long long | 8 | none(하지만 와 동일)__int64 | –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
unsigned long long | 8 | none(하지만 와 동일)unsigned __int64 | 0 ~ 18,446,744,073,709,551,615 |
enum | 다름 | 없음 | |
float | 4 | 없음 | 3.4E+/-38(7개의 자릿수) |
double | 8 | 없음 | 1.7E+/-308(15개의 자릿수) |
long double | 8 | 없음 | double과 동일 |
wchar_t | 2 | __wchar_t | 0 ~ 65,535 |
-
출처 : MSDN - 데이터 형식 범위
-
표에 잘 나와 있듯, 타입에 따라 의도하는 수의 범위가 지정되어 있다. 타입마다 범위가 지정되어 있기 때문에 무작정 범위가 넉넉한 타입을 사용하기 보단 상황에 알맞는 타입을 선택해서 써야 한다. 데이터 타입은 이미 지정된 일종의 규격이기 때문에,
타입의 명칭
과왜 하필 이 범위(Byte)를 지정했는가
는 이해의 영역이라기 보다는 암기의 영역에 가깝다. 하지만 사용하다보면 익숙해지는 개념이기도 하고, 프로그래밍을 하다 보면 자연스럽게 외워지기도 한다. 분명 프로그래머로서 숙지하고 있어야 할 기초적인 사항이지만구글링만 해도 바로 나오기 때문에당장 암기를 못 했다고 해서 문제되는 것은 아니다.(하지만 프로그래머가 이 개념을 모르고 있는 것은 큰 문제가 된다.)
어떻게 사용해야 할까
- 위에서 언급했듯, 자료형을 사용할 때는 그 의도에 맞는 타입을 사용해야 한다.
이를테면 ‘1에서 99까지’의 ‘캐릭터의 레벨’이라는 데이터를 표현하기 위해double
과 같은 크기가 큰 자료형을 사용할 필요도 없고, 사용해봤자 메모리 공간 낭비라는 뜻이다.
아래는 데이터 타입을 사용해 변수를 선언하고, 각 변수가 메모리에서 차지하는 크기(byte)를 콘솔창에 출력하는 예시이다.
// C++ 언어 예시
#include <iostream>
int main()
{
// int 타입의 변수
int IntNumber = 5;
// 콘솔창 첫 번째 줄에 'IntNumber' 변수의 자료형(int) 크기 출력
std::cout << sizeof(IntNumber) << std::endl;
// double 타입의 변수
double DoubleNumber = 5;
// 콘솔창 두 번째 줄에 'DoubleNumber' 변수의 자료형(double) 크기 출력
std::cout << sizeof(DoubleNumber) << std::endl;
}
- 결과 :
- 두 변수가 가지고 있는 값은 ‘5’로 동일한데 두 변수가 메모리에서 차지하는 공간은 두배가 차이가 난다. 프로그래밍에서는 이런 사소한 차이가 모여 성능상의 문제로 직결될 수 있기 때문에, 프로그래머라면 항상 이 점을 염두에 두고 자료형을 선정하는 것 부터 정확한 지식을 가지고 프로그램을 구현해야 한다.
게임에 돈을 지불하고 구매하는 소비자 혹은 유저의 입장에서 발적화 게임이 하고 싶은지 잘 생각해 보자
댓글 남기기