C#에는 세 종류의 자료형이 있다.
1. 값 형식 (Value Type)
2. 참조 타입 (Reference Type)
3. 포인터 타입 (Pointer Type)
이 포스트에서는 값 형식에 대해서 알아본다.
자료형이 무엇인가에 대한 문서는 아래 C언어의 자료형의 내용을 참고한다. C와 비교하면 C#처럼 객체지향 프로그래밍 언어의 자료형은 조금 차이가 있지만, 코딩할 때 쓰는 기본 자료형의 의미는 거의 같다고 볼 수 있다.
수치 형식, 값 타입이라고도 해석할 수 있다. MSDN 에서는 기본 제공 형식이라고 부른다. 값 타입의 변수에는 숫자값이 들어가고, 값을 직접 할당할 수 있다.
C#의 값 타입은 System.ValueType 클래스에서 파생한다.
값 타입은 직접 데이터를 가지고 있다. int, char, double 자료형은 정수형, 문자, 실수형 자료를 각각의 변수에 저장한다. int 형 변수 a1에 10을 저장하는 것 처럼 직접 저장하는 것이다. 직접 데이터를 가진다는 것은 변수와 숫자가 직접 연결되어 있다는 의미다. 값 타입들을 모아서 참조형 자료형인 클래스를 만들 수 있다.
값 타입의 종류는 아래와 같다. 키워드를 사용하여 변수를 만들 수 있다.
C# Keyword | descrpition | 범위 |
bool | 논리값 | true or false |
byte | 8비트 부호없는 정수 | 0~255 |
sbyte | 8비트 부호있는 정수 | -128~127 |
char | 16비트 단일 유니코드 문자 | 적합한 값 예> 'a' 유니코드 \u0058 |
decimal | 128 비트 decimal 타입, 재무와 돈계산 | (+ or -)1.0 x 10e-28 ~ 7.9 x 10e28 |
double | 64비트 double 부동소수형 | -1.79769313486232e308 ~ 1.79769313486232e308 |
float | 32비트 single 부동소수형 | -3.402823e38 to 3.402823e38 |
int | 32비트 부호있는 정수 | -2,147,483,648 ~ 2,147,483,647 |
uint | 32비트 부호없는 정수 | 0 ~ 4,294,967,295 |
long | 64비트 부호있는 정수 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
ulong | 64비트 부호없는 정수 | 0 ~ 18,446,744,073,709,551,615 |
short | 16비트 부호있는 정수 | -32,768 ~ 32,767 |
ushort | 16비트 부호없는 정수 | 0 ~ 65,535 |
다음의 소스코드는 플래폼에 따라 다르게 나올 수 있다. sizeof는 기본 제공되는 자료형의 메모리 크기를 리턴한다.
using System;
namespace CsharpDatatype
{
class SizeofDataType
{
static void Main(string[] args)
{
Console.WriteLine("Size of bool: {0} byte",sizeof(bool));
Console.WriteLine("Size of byte: {0} byte",sizeof(byte));
Console.WriteLine("Size of sbyte: {0} byte",sizeof(sbyte));
Console.WriteLine("Size of char: {0} byte",sizeof(char));
Console.WriteLine("Size of decimal: {0} byte",sizeof(decimal));
Console.WriteLine("Size of double: {0} byte",sizeof(double));
Console.WriteLine("Size of float: {0} byte",sizeof(float));
Console.WriteLine("Size of int: {0} byte",sizeof(int));
Console.WriteLine("Size of uint: {0} byte",sizeof(uint));
Console.WriteLine("Size of long: {0} byte",sizeof(long));
Console.WriteLine("Size of ulong: {0} byte",sizeof(ulong));
Console.WriteLine("Size of short: {0} byte",sizeof(short));
Console.WriteLine("Size of ushort: {0} byte",sizeof(ushort));
}
}
}
<자료형 사용 예제>
기본 자료형은 아래와 같이 사용한다. 이 모든 자료형을 당장 외우지 않아도 된다. tutorial 을 통해서 하나씩 알아가 볼 것이다.
using System;
namespace CsharpDatatype
{
class SizeofDataType
{
static void Main(string[] args)
{
bool check = true; // true or false
byte n1 = 255;
sbyte n2 = 127;
char c1 = (char)65; // 2BYTES
decimal d1 = 7.9e28M;
double d2 = 1.79e308;
float f1 = -3.4e38F;
int n3 = 2_147_483_647;
uint n4 = 4_294_967_295;
long n5 = 9_223_372_036_854_775_807;
ulong n6 = 18_446_744_073_709_551_615;
short n7 = 32767;
ushort n8 = 65535;
Console.WriteLine("{0,30}", check);
Console.WriteLine("{0,30}", n1);
Console.WriteLine("{0,30}", n2);
Console.WriteLine("{0,30}", c1);
Console.WriteLine("{0,30}", d1);
Console.WriteLine("{0,30}", d2);
Console.WriteLine("{0,30}", f1);
Console.WriteLine("{0,30}", n3);
Console.WriteLine("{0,30}", n4);
Console.WriteLine("{0,30}", n5);
Console.WriteLine("{0,30}", n6);
Console.WriteLine("{0,30}", n7);
Console.WriteLine("{0,30}", n8);
}
}
}
자세한 사항이 궁금하면 MSDN 자습서를 참고한다.