ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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도 수정한 값을 반환한다. 

Designed by Tistory.