C#

얕은 복사 / 깊은 복사

가게주인 2022. 6. 15. 11:36

구조체는 기본적으로 값이 복사되는 깊은 복사

int numA = 10;
int numB;
numB = numA;
numB = 50;

Debug.Log(numA);

 

 

 

 

class는 기본적으로 얕은 복사가 일어나 주소를 참조하기 때문에 원본의 값이 변경됨.

itemB = itemA 를 했을 경우 itemB에는 itemA의 주소가 들어감. 즉 B의 값을 변경하면 A의 값도 변경됨

이걸 원치 않을 땐 얕은 복사 대신 깊은 복사를 사용해야 함.

 

public Item DeepCopy()
{
	Item temp = new Item();
    temp.SetItem(name, price);
    
    return temp;
}

새로운 Item인 temp를 만들어주고 그걸 리턴 시킴.

 

itemB = itemA.DeepCopy();

이러면 새로 생긴 temp의 값이 들어가서 itemB의 값을 바꿔도 itemA는 그대로 출력된다.