본문 바로가기
C#/C# 공부

값 형식과 참조 형식 :스택과 힙

by TODAYCODE 2021. 7. 7.
반응형

값 형식 : 변수가 값을 담는 데이터 형식

= 스택 메모리 영역에 관련 있음

 

참조 형식 : 변수가 값 대신 값이 있는 곳의 위치를 담는 데이터 형식

= 힙 메모리 영역에 관련 있음

 

스택 메모리 영역과 힙 메모리 영역은 동작하는 방식이 다르다.

 

스택 메모리 영역은 코드 블록이 시작되는 시점( " { " )에는 비어있다.

코드가 진행 되면서 int a = 100; 등의 값이 저장된 변수들이 선언되면서

스택에 a, b, c.... 등등이 차곡차곡 쌓여올라가게 된다.

마지막으로 코드 블록이 종료되는 } 기호를 만나면 스택에 저장되었던 변수들을 역순으로 하나씩 제거해나간다.

즉, 스택 메모리 영역은 코드블록( { } )안에서만 존재했다가 자동으로 지워진다.

 

반면, 힙 메모리는 저장된 데이터가 알아서 제거되지 않기 때문에, CLR(Common Language Runtime, 공통 언어 런타임)의 가비지 컬렉터가 필요하다.

가비지 컬렉터는 힙에 더 이상 쓰이지 않는 객체가 있으면 제거하는 역할을 수행한다.

 

즉, 입력한 데이터를 계속 유지시키고 싶으면 힙 메모리 영역에 저장하고

코드블록 영역 안에서만 존재하게 하고 싶으면 스택 메모리 영역에 저장하면 되는 것이다.

 

 

참조 형식의 변수는 힙과 스택을 동시에 이용한다.

힙 영역에는 데이터를 저장해놓고, 스택 영역에서는 데이터가 저장되어있는 힙 메모리의 주소를 저장해준다.

데이터를 직접 저장하는 것이 아니라, 데이터가 저장되어 있는 메모리의 주소를 참조해오는 것이기 때문에 참조 형식이라고 하는 것이다.

이렇게 참조형식을 사용하게 되면, 코드블록이 완료되어 스택 영역이 사라진다고 해도 실제 데이터가 저장되있는 힙 영역은 계속 데이터를 저장하고 있다.

반응형

댓글