
값 타입 (Value Types): 데이터를 직접 저장하며, 메모리의 스택에 할당된다. 예를 들어, 기본 데이터 타입인 int, double, float, bool 등이 있다.
참조 타입 (Reference Types): 데이터의 메모리 주소를 저장하며, 실제 데이터는 힙에 저장된다. 예를 들어, 배열, 클래스, 인터페이스 등이 있다.
| 자료형 | .NET 데이터 타입 | 크기 (바이트) | 범위 |
|---|---|---|---|
| sbyte | System.SByte | 1 | -128 ~ 127 |
| byte | System.Byte | 1 | 0 ~ 255 |
| short | System.Int16 | 2 | -32,768 ~ 32,767 |
| ushort | System.UInt16 | 2 | 0 ~ 65,535 |
| int | System.Int32 | 4 | -2,147,483,648 ~ 2,147,483,647 |
| uint | System.UInt32 | 4 | 0 ~ 4,294,967,295 |
| long | System.Int64 | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
| ulong | System.UInt64 | 8 | 0 ~ 18,446,744,073,709,551,615 |
| float | System.Single | 4 | ±1.5 × 10^-45 ~ ±3.4 × 10^38 |
| double | System.Double | 8 | ±5.0 × 10^-324 ~ ±1.7 × 10^308 |
| decimal | System.Decimal | 16 | ±1.0 × 10^-28 ~ ±7.9 × 10^28 |
| char | System.Char | 2 | 유니코드 문자 |
| string | System.String | 유니코드 문자열 | |
| bool | System.Boolean | 1 | true 또는 false |
메모리의 효율적인 사용: 해당 자료형이 필요한 크기만큼의 메모리를 할당하여 메모리의 효율적인 사용을 가능하게 한다.
정확한 데이터 표현: 각 데이터의 특성에 가장 적합한 형태로 표현할 수 있으며, 이는 다양한 범위의 값과 다른 특성을 가진 데이터를 더욱 정확하게 다루게 해준다.
타입 안정성: 세분화된 자료형을 사용하면, 코드의 타입 안정성을 유지할 수 있다. 예를 들어, 사용한 자료형이 가질 수 있는 값의 범위를 벗어날 경우 오류가 발생하므로, 코드의 안정성을 보장할 수 있다.
int num1 = 10;
long num2 = (long)num1; // int를 long으로 명시적 형변환
직접 형변환 코드를 작성하지 않아도 되므로 코드를 간결하게 작성할 수 있지만, 암시적 형변환이 발생하는 경우 데이터 타입을 신중하게 고려하여 코드를 작성해야 한다.
작은 데이터 타입에서 더 큰 데이터 타입으로 대입하는 경우
byte num1 = 10;
int num2 = num1; // byte형에서 int형으로 암시적 형변환
float num = 1; // 1은 int형 리터럴 값이지만 float형으로 암시적 형변환
int num1 = 10;
float num2 = 3.14f;
float result = num1 + num2; // int형과 float형의 덧셈에서 float형으로 암시적 형변환
var num = 10; // int 자료형으로 결정됨
var name = "moth"; // string 자료형으로 결정됨
var pi = 3.141592; // double 자료형으로 결정됨