C#에서 참조 데이터 형식(Reference Type)은 변수에 실제 데이터를 직접 저장하지 않습니다. 대신 변수에는 데이터가 저장된 메모리 위치에 대한 참조(reference)만 담기며, 실제 값은 힙(heap) 영역에 보관됩니다.
C#에서 기본적으로 제공되는 대표적인 참조 형식은 다음과 같습니다.
1. Object 형식
Object 형식은 C# 공용 형식 시스템(CTS, Common Type System)에서 모든 데이터 형식의 최상위 기본 클래스입니다. 따라서 값 형식, 참조 형식, 미리 정의된 형식, 사용자 정의 형식 등 어떤 형식의 값이든 object 변수에 할당할 수 있습니다.
예제
object ob; ob = 250; // 박싱(boxing) 발생
위 코드처럼 값 형식을 object에 할당하면 박싱(boxing)이라는 과정을 통해 값이 힙에 저장됩니다.
2. Dynamic 형식
Dynamic 형식 변수에는 어떤 형식의 값이든 자유롭게 저장할 수 있다는 점에서 object와 비슷합니다. 하지만 가장 큰 차이점은 형식 검사 시점입니다. dynamic 변수의 형식 검사는 컴파일 시점이 아니라 런타임(run-time)에 수행됩니다.
예제
dynamic d = 100;
3. String 형식
String 형식은 변수에 임의의 문자열 값을 할당할 수 있는 참조 형식입니다. string 키워드는 System.String 클래스의 별칭(alias)이며, object 형식으로부터 파생됩니다.
예제
String val = "Welcome!";
정리
C#의 참조 형식은 값 자체가 아닌 메모리 주소를 참조한다는 점이 값 형식과의 핵심 차이입니다. object는 모든 형식의 조상 역할을, dynamic은 런타임 형식 검사를, string은 문자열 처리를 각각 담당하므로 상황에 맞게 활용하면 됩니다.