오늘은 C#에서 필수 지식인 값 타입과 참조타입에 대해 공부해요!
간단하게 먼저 정리하자면
값 형식(Value Type)은 변수가 값을 담고있는 형식이고
참조 형식(Reference Type)은 변수가 값이 있는 위치를 담는 형식입니다.
값 형식의 변수는 모두 스택에 저장되고
참조 타입의 데이터는 힙에 데이터를 저장하고 스택에 해당 힙 영역의 주소를 저장해요!
즉, 참조타입은 힙 영역과 스택영역을 함께 이용한답니다.
여기서 중요한 사항 한가지!
스택에 저장된 데이터는 코드블록이 끝남과 동시에 소멸되지만
힙에 저장된 데이터는 CLR의 가비지 컬렉터(Garbage Collector)를 통해 관리됩니다.
여기서 CLR이란 C#으로 만든 코드가 실행되도록 만들어주는 환경이에요
가비지 컬렉터의 기능은 다른 글에서 따로 정리할거지만
간단하게 설명하자면
힙에서 더이상 사용되지 않는 객체를 쓰레기로 간주하고 수거하는 기능을 하는 기능을 해요
자 다시 값 타입과 참조 타입으로 돌아와볼게요!
스택은 코드블록이 끝나는 시점에 생명 주기가 다해서 자동으로 데이터가 제거되지만
힙은 스스로 데이터를 제거하는 시스템이 없기 때문에 CLR의 가비지 컬렉터를 통해 데이터를 관리해요!
따라서 스택에 데이터를 저장하는 값 타입은 코드 블록이 끝날때 소멸되지만
힙에 데이터를 저장하는 참조타입은 가비지 컬렉터에 의해 제거될때까지 남아있답니다!
'C#' 카테고리의 다른 글
| [C#] 배열 (0) | 2024.10.07 |
|---|---|
| [C#] 프로퍼티 (1) | 2024.10.06 |
| [C#] 얕은 복사와 깊은 복사 - 설명 및 예제 코드 (0) | 2024.10.05 |
| [C#] ref out 키워드 의미 및 예시 코드 (4) | 2024.10.03 |
| [C#] 박싱과 언박싱 (0) | 2024.10.01 |