파파비의 블로그
C#) 값형식과 레퍼런스형식 본문
c#에서는 데이터를 분류하는 기준 중에 하나로
값형식과 레퍼런스형식이 존재한다.
(다른 언어들에도 많이 쓰이는 것으로 알고 있다.)
값형식과 레퍼런스형식은 어떻게 다른 것일까?
값형식은 어떤 변수에 데이터를 할당하면 스택 메모리에 값이 바로 할당된다.
레퍼런스형식은 어떤 변수에 데이터를 할당하면 변수에는 1차적으로 data가 저장된 주소값이 저장된다.
주소값은 정확히는 스택 메모리에 존재하며 data는 힙 메모리에 할당된다.
따라서,
레퍼런스 형식의 data를 호출하면 우리는 data가 존재하는 힙 메모리의 주소를 받게 되고,
값 형식은 주소가 아니라 바로 값을 얻게 된다.
값형식의 경우 int, byte, bool, float, double 등 기본 자료형이 속하며
레퍼런스 형식의 경우, class로 만든 객체나 string, object 등이 속한다.
이 둘의 차이는 값을 복사할 때도 드러나는데,
ㅡ 값 형식.
int를 복사할 경우,
ex)
int num = 3;
int num2 = num;
num은 값형식이므로 곧장 값을 toss해 준다.
그래서 num2는 3이라는 값을 새로운 스택 메모리에 할당한다.
ㅡ 레퍼런스 형식
string을 복사할 경우,
ex)
string name = "Bob";
string name2 = name;
name은 정확히는 "Bob"이라는 data가 존재하는 주소값을 가지고 있기 때문에
name2에게도 주소값을 준다.
따라서 name과 name2는
힙메모리상에 존재하는 하나의 data를 가르키는 동일한 주소를 각자 가지고 있는 것이다.
'개발 > c#' 카테고리의 다른 글
C#) try, catch) 에러 핸들링 (0) | 2020.04.02 |
---|---|
C#) break와 continue (0) | 2020.04.02 |
C#) switch문 이해하기 (0) | 2020.04.02 |
C#) mutable, immutable Type 이란? // string과 StringBuilder의 차이는? (0) | 2020.04.01 |
C#) char[] 를 string 으로 바꾸기 (0) | 2020.04.01 |