

C#에서는 데이터 타입을 크게 두 가지로 나눌 수 있다.
이 두 가지 타입은 메모리에 저장되는 방식과 동작 방식에서 차이가 있다.
주요 값 타입은 다음과 같다.
string a = "Hello";
string b = a;
b = "World";
Console.WriteLine(a); // 출력: "Hello"
Console.WriteLine(b); // 출력: "World"
위 예제에서 a와 b는 같은 문자열을 가리키지만, 문자열은 불변(immutable) 이기 때문에 b에 새로운 값을 할당하면 새로운 메모리 공간이 생성돼. 따라서 a와 b는 서로 다른 문자열을 가리키게 된다.
| 구분 | 값 타입(Value Types) | 참조 타입 (Reference Types) |
|---|---|---|
| 저장 위치 | 스택(Stack) | 힙(Heap) |
| 저장 방식 | 변수에 실제 값이 저장된다. | 변수에 메모리 주소(참조값)가 저장된다. |
| 값 할당 방식 | 값을 복사(독립적) | 참조를 복사(같은 객체를 가르킨다. |
| 변수 간 독립성 | 복사된 값은 독립적으로 변경 가능 | 복사된 참조는 원본과 연결되어 있다. |
| 대표적인 예시 | int, float, double, bool, char, struct, enum | string, object, class, array, interface, delegate |
| 기본데이터 타입 예시 | int, float, double, bool, char | string, object |
| 사용자 정의 타입 | struct, enum | class, interface, delegate |
| 값 변경 시 동작 | 값이 변경되면 새로운 값이 저장된다. | 값이 변경되면 원본 객체가 수정된다. |
| 메모리 관리 | 스택에서 빠르게 할당 및 해제 | 가비지 컬렉션(GC)에 의해 관리된다. |
