객체의 복사본을 만드는 데 사용
얕은 복사는 객체의 필드 값을 복사하지만, 필드가 참조 타입인 경우 해당 참조를 복사합니다. 즉, 참조 타입의 경우 원본 객체와 복사본 객체가 같은 인스턴스를 참조하게 됩니다. 얕은 복사는 기본적으로 Clone() 메서드에서 제공되는 동작입니다.
깊은 복사는 객체의 모든 필드뿐만 아니라 참조 타입 필드가 참조하는 객체까지 모두 새로 복사하여 원본 객체와 복사본 객체가 독립적인 인스턴스를 가지도록 만듭니다. 깊은 복사를 구현하려면 Clone() 메서드를 재정의해야 합니다.
using System;
public class Person : ICloneable
{
public string Name { get; set; }
public int Age { get; set; }
// 얕은 복사 구현
public object Clone()
{
return this.MemberwiseClone(); // 얕은 복사
}
}
public class Program
{
public static void Main()
{
Person person1 = new Person { Name = "Alice", Age = 30 };
Person person2 = (Person)person1.Clone(); // Clone 호출
Console.WriteLine(person1.Name); // Alice
Console.WriteLine(person2.Name); // Alice
person2.Name = "Bob";
Console.WriteLine(person1.Name); // Alice
Console.WriteLine(person2.Name); // Bob
}
}
using System;
public class Person : ICloneable
{
public string Name { get; set; }
public int Age { get; set; }
// 깊은 복사 구현
public object Clone()
{
return new Person { Name = this.Name, Age = this.Age }; // 새로운 객체 생성
}
}
public class Program
{
public static void Main()
{
Person person1 = new Person { Name = "Alice", Age = 30 };
Person person2 = (Person)person1.Clone(); // Clone 호출
Console.WriteLine(person1.Name); // Alice
Console.WriteLine(person2.Name); // Alice
person2.Name = "Bob";
Console.WriteLine(person1.Name); // Alice
Console.WriteLine(person2.Name); // Bob
}
}