[c#] 뮤터블과 이뮤터블의 데이터 불변성 보장
C#에서 데이터 불변성(Immutability)은 매우 중요한 개념이다. 불변성은 어플리케이션의 안정성과 예측성을 높이며, 다중 스레드 환경에서도 문제를 예방할 수 있다.
뮤터블(Mutable) vs 이뮤터블(Immutable)
-
뮤터블: 값이 변경될 수 있다. 예를 들어, C#에서는 List나 Dictionary와 같은 컬렉션은 뮤터블하다. 이러한 객체들은 값을 변경할 수 있으므로 상태가 예기치 않게 변하고, 다른 부분에서 사용될 때 예기치 못한 문제를 일으킬 수 있다.
-
이뮤터블: 값이 변경될 수 없다. 예를 들어, C#에서는 string은 이뮤터블하다. 한 번 생성된 string은 변경될 수 없으며, 값이 필요할 때마다 새로운 인스턴스가 생성된다. 이렇게하면 데이터가 예기치 않게 변경되는 문제를 방지할 수 있다.
데이터 불변성 보장 방법
이뮤터블한 클래스를 작성하기 위해 다음과 같은 방법들을 고려할 수 있다:
1. 필드를 읽기 전용으로 선언
public class ImmutableClass
{
private readonly int _readOnlyField;
public ImmutableClass(int value)
{
_readOnlyField = value;
}
public int ReadOnlyField => _readOnlyField;
}
2. 읽기 전용 컬렉션 사용
IEnumerable<string> readOnlyCollection = new List<string> { "apple", "banana", "cherry" }.AsReadOnly();
3. 수정이 불가능한 자료구조 사용
ImmutableStack<int> immutableStack = ImmutableStack<int>.Empty.Push(1).Push(2).Push(3);
4. 값 형식 활용
public struct ImmutableStruct
{
public int Value { get; }
public ImmutableStruct(int value)
{
Value = value;
}
}
위와 같은 방법을 사용하여 데이터를 보호하고 불변성을 유지함으로써 예기치 않은 문제를 방지할 수 있다.
위 내용은 Microsoft Docs - Immutability in C#를 참고하여 작성되었습니다.