C# 프로그래밍 기초 실습 전자책

C# / .NET 알고리즘과 퀴즈
본 알고리즘 퀴즈 문제는 C#/.NET 개발자를 위한 알고리즘 인터뷰 혹은 C# 프로그래밍을 통한
문제 해결 알고리즘을 연구해 보는데 도움이 되고자 작성되었습니다.


퀴즈 질문


예상답변/설명

System.Array.Clone()과 System.Array.CopyTo()는 모두 Shallow Copy로 배열의 데이타를 복사한다. 차이점은 Clone()은 새로 Target 배열을 생성하여 생성된 배열의 레퍼런스를 리턴하고, CopyTo()는 이미 존재하는 Target배열의 지정된 배열 시작 인덱스 위치로 데이타를 복사한다.

string[] src = { "ABC", "123", "XYZ" };
// Array.Clone()
object shallow1 = src.Clone();
// Array.CopyTo()
string[] target = new string[10];
src.CopyTo(target, 5);

흔히 CopyTo()는 Deep Copy이고 Clone()은 Shallow Copy라고 잘못 답할 수 있다. 하지만, 이것이 맞았다 틀렸다라는 점보다 더 중요한 것은 두 Copy방식의 차이점을 잘 이해하고 있는가 하는 점이다.

Shallow Copy는 배열요소의 값을 그대로 복사하는 방식으로 Value Type이면 실제 값이 그대로 복사되어 아무 문제가 없으나 Reference Type의 값인 경우 레퍼런스만 복사하기 때문에, 동일한 Reference Type객체를 가리키는 포인터만 복사하는 효과가 있다. 반면, Deep Copy는 Reference Type객체에 대해 실제 새로운 Reference 객체를 생성하고 내용까지 전부 복사하기 때문에 완변한 복제본으로 볼 수 있다.