[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" 출력

이뮤터블 객체는 변경된 객체를 새로 생성하여 기존 객체는 불변한 채로 유지합니다. 이를 통해 변경 과정에서 발생할 수 있는 문제를 방지할 수 있습니다.

요약

C#에서는 무분별한 객체의 변경으로 인한 예기치 않은 문제를 방지하기 위해 뮤터블과 이뮤터블 객체의 사용에 주의해야 합니다.

참고 자료