-
2024.03.04 - 값 형식(Value types)과 참조 형식(Reference types)C# 2024. 3. 4. 19:43
C#에는 데이터를 메모리에 저장하는 방식으로 값 형식(Value types)과 참조 형식(Reference types) 2가지 방법이 있다.
- 값 형식과 참조 형식의 데이터 저장 예시
int형 데이터는 값 형식으로 데이터를 저장한다.
num에 1을 대입한 뒤, num2에 num을 대입했다.
num2의 값을 출력하면 1이 나온다.
여기서 num2에 100을 대입했다. num과 num2의 값을 출력해보자.
num2의 값만 100으로 바꿔주었으니, 1과 100이 출력된다.
값 형식의 데이터는 상당히 직관적으로 움직인다. 참조 형식의 데이터가 어떻게 동작하는 지 알아보자.
array형 데이터는 참조 형식으로 데이터를 저장한다. arr2에 arr를 대입하고, arr2[1] 값만 3으로 바꿨다.
아니, arr2[1]만 3으로 바꿨는데, arr[1]의 값도 3으로 바뀌었다. 값 형식과 참조 형식의 데이터 저장 방법이 다르기 때문이다.
- 실제로 값 형식과 참조 형식이 데이터를 저장하는 방법
- 값 형식
값 형식으로 데이터를 저장하는 경우, 데이터가 스택(stack) 영역의 메모리 주소에 저장된다.
num과 num2는 서로 별개의 데이터를 담고 있기 때문에 어느 한쪽의 값을 바꿔도 다른 한쪽의 값이 바뀌지 않는다.
- 참조 형식
참조 형식으로 데이터를 저장하는 경우, 데이터는 힙(heap) 영역에 저장되고, 데이터를 저장하고 있는 힙 영역의 메모리 주소가 스택(stack)영역에 저장된다.
arr2에 arr를 대입하면 둘다 heap영역의 {1, 2}데이터가 저장된 곳의 메모리 주소값을 값으로 가진다.
arr2[1] = 3;을 통해 heap영역의 데이터를 수정하면, 당연히 같은 데이터가 있는 주소를 가리키는 arr도 수정한 값을 반환한다.
'C#' 카테고리의 다른 글
2024.03.05 - 프로퍼티(Property) (0) 2024.03.05 2024.03.05 - static 변수 (0) 2024.03.05 2024.03.05 - 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) (0) 2024.03.05 2024.03.04 - 키 입력 받기 (0) 2024.03.05 2024.03.04 - 출력, 입력, 배열, foreach (0) 2024.03.04