[c#] 뮤터블과 이뮤터블의 객체 복사 및 참조 관리

C#에서 객체를 다룰 때 가장 중요한 주제 중 하나는 뮤터블(Mutable)이뮤터블(Immutable) 객체를 다루는 방법입니다. 두 유형의 객체를 올바르게 복사하고 참조하는 것은 프로그래머에게 중요한 역럭이며, 이는 시스템의 안정성과 성능에도 영향을 미칩니다.

1. 뮤터블(Mutable) 객체와 이뮤터블(Immutable) 객체

뮤터블(Mutable) 객체는 변경 가능한 객체로, 생성된 후에 내부 상태를 변경할 수 있습니다. 예를 들어, ListDictionary와 같은 컬렉션 형식은 뮤터블 객체입니다. 이에 반해 이뮤터블(Immutable) 객체는 변경 불가능한 객체로, 한 번 생성하면 내부 상태를 변경할 수 없습니다. 예를 들어, string은 이뮤터블 객체입니다.

2. 뮤터블(Mutable) 객체의 복사 및 참조

뮤터블 객체를 복사할 때에는 원본 객체의 참조(reference)가 복사되는 것이 아니라, 같은 객체를 가리키는 새로운 참조가 생성됩니다. 이는 곧 복사된 객체를 수정하면 원본 객체 또한 변경될 수 있다는 의미입니다. 따라서 뮤터블 객체의 경우에는 주의 깊게 복사와 참조를 관리해야 합니다.

3. 이뮤터블(Immutable) 객체의 복사 및 참조

이뮤터블 객체를 복사할 때에도 뮤터블 객체와 마찬가지로 새로운 참조가 생성됩니다. 하지만 이뮤터블 객체의 경우 내부 상태가 변경되지 않기 때문에 새로운 참조를 생성해도 안전하게 객체를 공유할 수 있습니다.

4. 예제 코드

// 뮤터블 객체의 복사 및 참조
List<int> originalList = new List<int> { 1, 2, 3 };
List<int> copyList = originalList;
copyList.Add(4);
// originalList는 { 1, 2, 3, 4 }가 됨

// 이뮤터블 객체의 복사 및 참조
string originalString = "Hello";
string copyString = originalString;
// originalString과 copyString은 동일한 "Hello"를 참조

5. 결론

C#에서는 뮤터블 객체와 이뮤터블 객체를 올바르게 다루기 위해 복사와 참조 관리에 주의를 기울여야 합니다. 특히, 뮤터블 객체의 경우에는 원본 객체의 변경 여부를 주의깊게 고려하여 새로운 참조를 생성하거나 깊은 복사(Deep Copy)를 수행해야 합니다.