Develop Dairy/C#

[Csharp]참조 형식(Reference types) (2021. 01. 20)

개발자_옹이양 2021. 1. 20. 20:00

 

[Csharp] Reference types

우선은 참조 형식이라 불리는 것들은 아래와 같습니다.

 - 배열(array)

 - 클래스(class)

 - 문자열(strings)

애플리케이션이 실행되는 동안 값이 저장되는 방식에 있어서 값 형식과 다르게 처리된다.

 

 

값형식과 참조형식의 차이점

 

값형식 - stack 이라는 스토리지 영역에 직접 값을 저장 

 

stack 이란? CPU에서 현재 실행중인 코드에 할당된 메모리, 실행이 완료되면 스택의 값이 제거

 

참조 형식 변수 - heap 이라는 별도의 메모리 영역에 해당 값을 저장

 

heap이란? 운영체제에서 실행되는 여러 애플리케이션 간에 공유되는 메모리 영역

 

.NET 런타임은 운영 체제와 통신하여 사용 가능한 메모리 주소를 확인하고, 값을 저장 할 수 있는 주소를 요청,  .NET 런타임에서는 값을 저장한 후 변수에 대한 메모리 주소를 반환, 코드에서 변수를 사용하는 경우 .NET 런타임에서는 원활하게 변수에 저장된 주소를 조회하여 해당 위치에 저장된 값을 검색

 

예를 들어 설명)

int[] data;

이 시점에서는 data는 참조 또는 힙의 값에 대한 메모리 주소를 보유할 수 있는 변수

메모리 주소를 가리키지 않으므로 null 참조라고 함

 

int[] data;

data = new int[3];

1. new 키워드는 .NET 런타임에 int 배열의 인스턴스를 만든 후 운영체제를 사용하여 메모리에 저장하도록 지시.

2. .NET 런타임은 새 int 배열의 메모리 주소를 반환

3. 메모리 주소는 변수 데이터에 저장, int 배열의 요소는 0 값이 기본값으로 설정

 

 

0이 3번 출력된 모습