배열
배열
C#에서의 배열은 예약어 new를 사용해서 선언한다.
int [] array = new int[5];
변수를 선언할 때 대괄호는 해당 변수가 배열임을 의미히고 new 키워드는 참조 형식과 함께 사용되는 경우에는 메모리를 힙에 할당하는 역할을 한다.
new 는 자료형의 크기로 숫자만큼의 힙메모리에 할당되고 선언된 변수는 그 메모리 공간의 첫 인덱스 주소를 저장하고 있다.
string
C에서 문자열을 저장하는 string 함수를 구현할 때 사용했던 방식이 문자를 저장하는 자료형을 동적할당을 통해서 문자열을 저장하였다.
마찬가지로 C#에서도 기본적으로 제공되는 string 자료형은 char 자료형이 모여서 이루어진 연속적인 데이터이기 때문에 인덱스를 통해서 문자열의 각 문자에 접근할 수 있다.
string text = "Hello C Sharp!";
char ch1 = text[0];
char ch2 = text[1];
// ch1 = H
// ch2 = e
초기화
int[] array = new int[5] {0, 1, 2, 3, 4};
int[] array = new int[] {0, 1, 2, 3, 4};
배열의 수를 지정했다면 그 수만큼만 요소를 나열해야하고 명시적으로 수를 지정하지 않았다면 초기화 요소만큼으로 배열의 크기가 지정된다.
재할당
만약 배열의 크기를 변경해서 다시 선언한다면
int [] array = new int[10];
array[0] = 10;
array = new int[20];
Console.WriteLine(array[0]);
array가 처음 int 자료형 10개 크기의 힙 영역에 할당된 다음 다시 20개의 크기만큼 재할당 했을 때 처음 할당된 메모리가 사라지는 것은 아니고 재할당된 20개의 크기의 메모리의 0 인덱스의 메모리 주소가 array 변수에 저장된다.
따라서 재할당 되고 더 이상 쓰이지 않게 된 이전에 할당된 메모리 공간은 가비지콜렉터에 의해서 제거되기 전까지 남아있게 된다.