값 형식(Value Types)과 참조 형식(Reference Types)은 C#과 같은 프로그래밍 언어에서 데이터를 저장하고 다루는 데 사용되는 두 가지 기본적인 유형입니다.
값 형식 (Value Types):
- 기본 특징:
- 값 형식은 데이터를 스택(stack) 또는 메모리의 스택 영역에 직접 저장합니다.
- 기본 데이터 유형(int, float, double 등)과 구조체(struct)가 값 형식에 속합니다.
- 변수에 실제 값이 저장되며, 해당 값이 직접 콜렉션됩니다.
- 특징:
- 메모리에 데이터 자체가 저장되므로 다른 변수에 할당될 때 값이 복사됩니다.
- 값 형식 변수의 수정은 다른 변수에 영향을 주지 않습니다.
- 값 형식의 크기는 컴파일 시점에 결정되며, 스택 메모리 공간에 할당되므로 메모리 사용량이 예측 가능합니다.
참조 형식 (Reference Types):
- 기본 특징:
- 참조 형식은 데이터의 실제 값 대신 메모리에 저장된 주소(참조)를 가리킵니다.
- 클래스(class), 배열(array), 인터페이스(interface), 델리게이트(delegate) 등이 참조 형식에 속합니다.
- 변수는 데이터가 있는 메모리 주소를 가리키며, 데이터는 힙(heap) 영역에 저장됩니다.
- 특징:
- 참조 형식 변수를 할당하면 실제 값이 아닌 메모리 위치(참조)가 복사됩니다.
- 여러 변수가 같은 객체를 참조하고 있을 수 있으며, 하나의 변수가 변경되면 다른 변수에 영향을 줄 수 있습니다.
- 참조 형식은 가변적인 크기를 가질 수 있으며, 힙 메모리에 동적으로 할당됩니다.
주요 차이점 요약:
- 메모리 할당 방식:
- 값 형식은 스택에 직접 데이터를 저장하고, 참조 형식은 힙에 데이터를 저장하고 변수는 해당 데이터의 참조를 가지고 있습니다.
- 복사 동작:
- 값 형식은 값 자체가 복사되고, 참조 형식은 참조(주소)가 복사됩니다.
- 변경 시 영향:
- 값 형식은 각 변수가 독립적이므로 하나를 수정해도 다른 변수에 영향을 주지 않습니다. 반면, 참조 형식은 동일한 객체를 참조하고 있으므로 하나를 수정하면 다른 변수에도 영향을 줄 수 있습니다.
'CS' 카테고리의 다른 글
| 객체지향이란 (0) | 2023.11.16 |
|---|---|
| 자료구조의 종류와 차이점 (0) | 2023.11.16 |
| 스택, 힙 메모리와 차이점 (0) | 2023.11.16 |
| 선택 정렬과 버블 정렬 (0) | 2023.11.16 |
| 정렬 알고리즘이란 (0) | 2023.11.16 |