[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 값이 기본값으로 설정
'Develop Dairy > C#' 카테고리의 다른 글
[Csharp] Stateful versus, stateless methods 상태 저장 및 상태 비저장 메서드 (2021. 01. 21) (0) | 2021.01.21 |
---|---|
[Csharp] Split() and Join() 사용 (2021. 1. 20) (0) | 2021.01.20 |
[Csharp] 부호 있는 정수, 부호 없는 정수, 부동 소수점 범위 (0) | 2021.01.20 |
[Csharp]배열 정렬,조작(Sort, reverse, clear, resize) (0) | 2021.01.20 |
WPF Virtual Keboard for Hangul(Korea) (1) | 2020.02.19 |