깊은 복사, 얕은 복사

우종현·2024년 3월 28일
0

CS

목록 보기
8/8

얕은 복사

앝은 복사는 객체의 참조만 복사하는 것이다. 객체를 얕은 복사하게 되면 복사할 객체의 참조 값을 복사될 객체에 대입하게 된다.

public class Employee
{
    public int No;
    public string Name;
}

public class Program
{
    static void Main(string[] args)
    {
        Employee source = new Employee();
        source.No = 1;
        source.Name = "Sana";

        Employee target = source;
        target.No = 2;
        target.Name = "SSABI";

        Console.WriteLine(source.No + ", " + source.Name);
        Console.WriteLine(target.No + ", " + target.Name);
    }
}

// 2, SSABI
// 2, SSABI

source를 생성한 후 target에 source를 복사하면 source의 참조값을 복사해서 target에 대입하게 된다. 따라서 실제로 객체는 2개가 생성된 것이 아닌 source와 target은 동일한 객체를 가리키고 있기 때문에 source와 target은 같은 값을 출력하게 된다.

깊은 복사

깊은 복사는 객체를 복사해서 새로운 객체를 만드는 것이다. 객체를 깊은 복사하게 되면 복사할 객체와 똑같은 복사본을 만들어서 복사될 객체에 복사할 객체와는 다른 복사본의 참조값을 대입하게 된다.

public class Employee
{
    public int No;
    public string Name;

    public Employee DeepCopy()
    {
        Employee employee = new Employee();
        employee.No = No;
        employee.Name = Name;

        return employee;
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Employee source = new Employee();
        source.No = 1;
        source.Name = "Sana";

        Employee target = source.DeepCopy();
        target.No = 2;
        target.Name = "SSABI";

        Console.WriteLine(source.No + ", " + source.Name);
        Console.WriteLine(target.No + ", " + target.Name);
    }
}
 
// 1, Sana
// 2, SSABI

0개의 댓글