C#의 Clone() 메서드는 기존 배열과 동일한 요소를 가진 복사본을 생성할 때 사용되는 메서드입니다. 이 메서드는 배열뿐만 아니라 Array 클래스를 상속하는 모든 배열 유형에 적용할 수 있습니다.
아래 예제를 통해 Clone() 메서드를 사용하여 배열을 복제하는 방법을 살펴보겠습니다.
예제
using System;
class Program {
static void Main() {
string[] arr = { "one", "two", "three", "four", "five" };
string[] arrCloned = arr.Clone() as string[];
Console.WriteLine(string.Join(",", arr));
// cloned array
Console.WriteLine(string.Join(",", arrCloned));
Console.WriteLine();
}
}출력 결과
one,two,three,four,five one,two,three,four,five
코드 설명
위 예제에서는 먼저 다음과 같이 문자열 배열을 선언하고 초기화했습니다.
string[] arr = { "one", "two", "three", "four", "five" };그다음, as 연산자와 함께 Clone() 메서드를 호출하여 새로운 문자열 배열에 복제된 배열을 할당했습니다.
string[] arrCloned = arr.Clone() as string[];
Clone() 메서드 사용 시 주의사항
Clone() 메서드를 사용할 때 몇 가지 중요한 특징을 알아두면 좋습니다.
1. 반환 타입은 object
Clone() 메서드의 반환 타입은 object이기 때문에, 원본 배열과 동일한 타입으로 명시적인 형 변환이 필요합니다. 위 예제에서는 as 연산자를 사용해 안전하게 string[] 타입으로 캐스팅했습니다.
2. 얕은 복사(Shallow Copy)
Clone() 메서드는 배열의 요소 자체가 아닌 참조만 복사하는 얕은 복사를 수행합니다. 즉, 값 타입(int, double 등)의 배열은 완전히 독립적으로 복제되지만, 참조 타입(객체)의 배열은 내부 객체를 원본과 공유하게 됩니다.
3. 새로운 배열 인스턴스 생성
복제된 배열은 차원과 길이가 원본과 동일한 새로운 배열 인스턴스입니다. 따라서 복제본에 새 요소를 추가하거나 길이를 변경해도 원본 배열에는 영향을 주지 않습니다.