C#에서 불변(immutable) 클래스란 인스턴스가 생성된 후 그 상태를 변경할 수 없는 클래스를 의미합니다. 이는 객체 지향 프로그래밍에서 중요한 원칙 중 하나인 “불변성”을 지키는 것을 의미합니다.
불변 클래스를 사용하면 다중 스레드 환경에서 안정적인 프로그램을 작성하는 데 도움이 됩니다. 또한 불변 클래스는 값 형식처럼 동작하여 인스턴스의 상태가 변하지 않기 때문에 예상치 않은 동작을 방지할 수 있습니다.
불변 클래스의 특징
-
변경 불가 - 불변 클래스의 인스턴스는 생성된 후에 상태를 변경할 수 없습니다.
-
스레드 안전 - 불변 클래스는 여러 스레드에서 안전하게 공유할 수 있습니다.
-
복사 없는 작업 - 불변 클래스의 인스턴스를 복사할 필요가 없기 때문에 메모리 소비를 줄일 수 있습니다.
-
예측 가능한 동작 - 상태가 변하지 않기 때문에 예상치 않은 동작을 방지할 수 있습니다.
불변 클래스의 설계
불변 클래스를 설계하는 방법은 간단합니다. 다음은 간단한 불변 클래스의 설계 예시입니다.
public class ImmutableClass
{
public int ReadOnlyProperty { get; }
public string AnotherReadOnlyProperty { get; }
public ImmutableClass(int readOnlyProperty, string anotherReadOnlyProperty)
{
ReadOnlyProperty = readOnlyProperty;
AnotherReadOnlyProperty= anotherReadOnlyProperty;
}
}
위의 예시에서 ImmutableClass
는 생성자를 통해 상태를 설정하고, 읽기 전용 속성을 통해 상태를 노출합니다. 이로써 인스턴스가 한 번 생성되면 그 상태를 변경할 수 없게 됩니다.
불변 클래스는 성능 상의 이점과 예측 가능한 동작을 제공하므로 C#에서 상태 변경이 필요하지 않은 경우에는 불변 클래스를 고려해보는 것이 좋습니다.
요약
불변 클래스는 안정적이고 예측 가능한 프로그램을 작성하는 데 도움을 줍니다. C#에서 불변 클래스를 설계하고 사용함으로써 다중 스레드 환경에서 안전한 프로그램을 작성할 수 있습니다.
참고문헌:
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/using-classes-and-structs#immutable-types
- https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/immutable-helper-types