[c#] 뮤터블과 이뮤터블의 데이터 변경 관리 방법
C# 언어에서는 객체의 변경 관리에 있어서 뮤터블(Mutable)과 이뮤터블(Immutable) 데이터의 사용이 중요합니다. 뮤터블(Mutable) 객체는 수정 가능한 객체로, 객체의 상태를 변경할 수 있지만, 이뮤터블(Immutable) 객체는 수정 불가능한 객체로, 객체의 상태를 변경할 수 없습니다.
뮤터블(Mutable) 객체의 변경 관리
뮤터블 객체를 변경하기 위해서는 다음과 같은 방법을 사용할 수 있습니다.
// 뮤터블 객체
class MutableObject
{
public string Name { get; set; }
public void ChangeName(string newName)
{
this.Name = newName;
}
}
// 객체의 상태 변경
MutableObject obj = new MutableObject();
obj.ChangeName("NewName");
Console.WriteLine(obj.Name); // "NewName" 출력
뮤터블 객체는 필드 및 속성의 값을 직접 변경할 수 있으므로 주의가 필요합니다. 여러 곳에서 동시에 변경될 경우 예상치 못한 결과를 초래할 수 있습니다.
이뮤터블(Immutable) 객체의 변경 관리
이뮤터블 객체를 변경하기 위해서는 객체의 변경이 아닌, 변경된 새로운 객체를 반환하는 방식을 사용합니다.
// 이뮤터블 객체
class ImmutableObject
{
public string Name { get; }
public ImmutableObject(string name)
{
this.Name = name;
}
public ImmutableObject ChangeName(string newName)
{
return new ImmutableObject(newName);
}
}
// 객체의 상태 변경
ImmutableObject obj = new ImmutableObject("OldName");
obj = obj.ChangeName("NewName");
Console.WriteLine(obj.Name); // "NewName" 출력
이뮤터블 객체는 변경된 객체를 새로 생성하여 기존 객체는 불변한 채로 유지합니다. 이를 통해 변경 과정에서 발생할 수 있는 문제를 방지할 수 있습니다.
요약
- 뮤터블(Mutable) 객체는 필드나 속성을 직접 변경할 수 있지만, 이뮤터블(Immutable) 객체는 변경된 새로운 객체를 반환한다.
- 사용 상황에 맞게 적절한 객체를 선택하여 데이터 변경을 관리해야 한다.
C#에서는 무분별한 객체의 변경으로 인한 예기치 않은 문제를 방지하기 위해 뮤터블과 이뮤터블 객체의 사용에 주의해야 합니다.
참고 자료
- Microsoft Docs. “Immutable Object Pattern”. https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/immutable-objects