Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 데이터 타입 완벽 가이드: 값 형식과 참조 형식의 차이

C#에서 데이터 타입은 크게 값 형식(Value Type), 참조 형식(Reference Type), 그리고 포인터 형식(Pointer Type)으로 나눌 수 있습니다. 각 형식은 메모리에 저장되는 방식과 동작 방식이 서로 다르기 때문에, C# 프로그래밍을 제대로 이해하려면 이들의 차이를 명확히 알아두는 것이 중요합니다.

값 형식(Value Types)

값 형식 변수에는 데이터가 직접 할당됩니다. 즉, 변수 자체에 실제 값이 저장되며, 모든 값 형식은 System.ValueType 클래스에서 파생됩니다. 값 형식은 일반적으로 스택(Stack) 메모리에 할당되어 성능 면에서 효율적입니다.

다음은 C#의 주요 값 형식 데이터 타입입니다.

타입 설명 범위 기본값
bool부울(Boolean) 값true 또는 falsefalse
byte8비트 부호 없는 정수0 ~ 2550
char16비트 유니코드 문자U+0000 ~ U+FFFF'\0'
decimal28~29자리 유효 숫자를 가지는 128비트 고정밀 소수(-7.9 × 1028 ~ 7.9 × 1028) / 100 ~ 10280.0M
double64비트 배정밀도 부동 소수점(±)5.0 × 10-324 ~ (±)1.7 × 103080.0D
float32비트 단정밀도 부동 소수점-3.4 × 1038 ~ +3.4 × 10380.0F
int32비트 부호 있는 정수-2,147,483,648 ~ 2,147,483,6470
long64비트 부호 있는 정수-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8070L
sbyte8비트 부호 있는 정수-128 ~ 1270
short16비트 부호 있는 정수-32,768 ~ 32,7670
uint32비트 부호 없는 정수0 ~ 4,294,967,2950
ulong64비트 부호 없는 정수0 ~ 18,446,744,073,709,551,6150
ushort16비트 부호 없는 정수0 ~ 65,5350

참조 형식(Reference Types)

참조 형식은 변수에 실제 데이터를 직접 저장하지 않습니다. 대신 데이터가 저장된 메모리 위치에 대한 참조(주소)를 담고 있습니다. 클래스, 인터페이스, 배열, 델리게이트 등이 대표적인 예이며, 일반적으로 힙(Heap) 메모리에 할당됩니다.

C#의 주요 참조 형식은 다음과 같습니다.

Object 형식

object 형식은 C# 공용 형식 시스템(CTS, Common Type System)에서 모든 데이터 타입의 최상위 기본 클래스입니다. 어떤 타입의 값이든 object 변수에 할당할 수 있으며, 필요할 때 명시적 캐스팅을 통해 원래 타입으로 되돌릴 수 있습니다.

Dynamic 형식

dynamic 형식 변수에는 어떤 타입의 값이든 저장할 수 있습니다. object와 비슷해 보이지만, dynamic 변수의 타입 검사는 컴파일 시점이 아닌 런타임에 수행된다는 점이 다릅니다.

String 형식

string 형식은 변수에 문자열 값을 할당할 수 있게 해주는 참조 형식입니다. string은 System.String 클래스의 별칭(alias)이며, 한 번 생성된 문자열은 변경할 수 없는 불변(immutable) 특성을 가진다는 점도 기억해 두면 좋습니다.