C#의 Copy() 메서드는 지정된 문자열(String)과 동일한 값을 가지는 새로운 String 인스턴스를 생성하는 데 사용됩니다. 즉, 기존 문자열을 복사하여 원본과 독립적인 새 문자열 객체를 만들 수 있습니다.
구문(Syntax)
public static string Copy (string s);
위 구문에서 매개변수 s는 복사할 대상 문자열입니다. Copy()는 정적(static) 메서드이므로 String.Copy() 형태로 호출합니다.
예제 1
using System;
public class Demo {
public static void Main(string[] args) {
string s1 = "Amy";
string s2 = "Katie";
string s3 = String.Copy(s2);
Console.WriteLine("String1 = "+s1);
Console.WriteLine("String2 = "+s2);
Console.WriteLine("두 문자열이 같은가? = "+s1.Equals(s2));
Console.WriteLine("두 문자열이 같은가? = "+s2.Equals(s3));
Console.WriteLine(string.CompareOrdinal(s1, s2));
Console.WriteLine(string.CompareOrdinal(s2, s3));
}
}출력 결과
String1 = Amy String2 = Katie 두 문자열이 같은가? = False 두 문자열이 같은가? = True -10 0
설명: 위 예제에서 s3는 s2("Katie")를 복사해 만든 새로운 문자열입니다. 따라서 s2.Equals(s3)는 True를 반환하고, CompareOrdinal(s2, s3)의 결과도 0(동일함)입니다. 반면 s1("Amy")과 s2("Katie")는 서로 다른 문자열이므로 False와 -10이 출력됩니다.
예제 2
using System;
public class Demo {
public static void Main(string[] args) {
string s1 = "Gary";
string s2 = "Gary";
string s3 = String.Copy(s2);
Console.WriteLine("String1 = "+s1);
Console.WriteLine("String2 = "+s2);
Console.WriteLine("s1과 s2가 같은가? = "+s1.Equals(s2));
Console.WriteLine("s2와 s3가 같은가? = "+s2.Equals(s3));
s3 = "Harry";
Console.WriteLine("s2와 s3가 같은가? = "+s2.Equals(s3));
}
}출력 결과
String1 = Gary String2 = Gary s1과 s2가 같은가? = True s2와 s3가 같은가? = True s2와 s3가 같은가? = False
설명: 처음에는 s3가 s2를 복사한 값이므로 두 문자열이 같아 True가 출력됩니다. 그러나 이후 s3에 "Harry"라는 새 값을 할당하면 s2와 더 이상 같지 않으므로 False가 출력됩니다. 이처럼 Copy()로 생성한 복사본은 원본과 독립적인 별개의 문자열임을 확인할 수 있습니다.
참고 사항
.NET Core 3.0부터 String.Copy() 메서드는 사용되지 않음(obsolete)으로 표시되었습니다. C#의 문자열은 불변(immutable)이므로 명시적인 복사가 실질적으로 필요하지 않으며, 단순히 다른 변수에 할당하는 것만으로 충분합니다. 최신 코드에서는 String.Copy() 대신 일반 할당 연산자(=)를 사용하는 것이 권장됩니다.