한 줄 요약
참조 형식 : 특정 변수를 다른 변수에 저장할 때 독립적인 복사본이 아닌 같은 메모리 주소를 참조하도록 함. 힙 메모리 영역에 저장되는 형식
값 형식 : 다른 변수에 저장할 때 독립적인 복사본을 생성하여 전달. 스택 메모리 영역에 저장되는 형식
int a에 저장된 값을 int b = a로 전달할 때, 값을 복사해서 전달하므로, 향후 a의 값에 변화가 있어도 b의 값에는 영향을 주지 못함int, float, bool, struct 등은 값 형식을 가짐null 값을 가질 수 있으므로 사용시 null 여부를 확인하는 과정이 필요할 수 있음요약 비교:
| 특징 | 값 형식 (Value Type) | 참조 형식 (Reference Type) |
|---|---|---|
| 저장 위치 | 주로 스택 (일부 예외 있음) | 객체는 힙, 변수는 스택 (주소 저장) |
| 변수 할당 | 값 자체 복사 (독립적) | 주소(참조) 복사 (동일 객체 가리킴) |
| 메서드 전달 | 값에 의한 전달 (Pass by Value) | 참조 값에 의한 전달 (Pass by Value of Reference) |
| 기본값 | 타입별 기본값 (0, false, '\0' 등) | null |
| Null 허용 | 일반적으로 허용 안 함 (Nullable 제외) | 허용함 |
| 메모리 관리 | 스코프 벗어나면 자동 해제 | 가비지 컬렉터(GC)에 의해 관리 |
| 성능 | 빠름 | 상대적으로 느림 (힙 오버헤드, GC) |
| 예시 | int, float, struct, enum | class, interface, delegate, string |