모든 데이터 타입은 값 타입(value type) 또는 참조 타입(reference type)을 가진다.
값 타입(Value type) : 각각의 고유의 메모리를 소유한다.
참조 타입(Reference type) : 생성된 인스턴스들은 주소값을 공유한다.
얕은 복사(Shallow copy)란?
ㄴ 값 자체를 복사하는 것이 아니라 주소값을 복샇여 같은 메모리를 가르킨다.
ㄴ 깊은 복사에 비해 상대적으로 빠르다.
ㄴ 그로 인해 아래와 같이 값을 바꿔주면 같은 결과를 출력한다.
//얕은 복사
string[] arr1 = new string[] { "test1", "test2" };
string[] arr2 = arr1;
Console.WriteLine("배열1 {0}, {1}", arr1[0], arr1[1]);
Console.WriteLine("배열2 {0}, {1}", arr2[0], arr2[1]);
arr1[0] = "test3";
Console.WriteLine("배열1 {0}, {1}", arr1[0], arr1[1]);
Console.WriteLine("배열2 {0}, {1}", arr2[0], arr2[1]);
배열1 test1, test2
배열2 test1, test2
배열1 test3, test2
배열2 test3, test2
string[] arr1 = new string[] { "test1", "test2" };
string[] arr2 = new string[2];
Array.Copy(arr1, arr2, 2);
Console.WriteLine("배열1 {0}, {1}", arr1[0], arr1[1]);
Console.WriteLine("배열2 {0}, {1}", arr2[0], arr2[1]);
arr1[0] = "test3";
Console.WriteLine("배열1 {0}, {1}", arr1[0], arr1[1]);
Console.WriteLine("배열2 {0}, {1}", arr2[0], arr2[1]);
배열1 test1, test2
배열2 test1, test2
배열1 test3, test2
배열2 test1, test2