[c#] 클래스의 불변성

C#에서 불변(immutable) 클래스란 인스턴스가 생성된 후 그 상태를 변경할 수 없는 클래스를 의미합니다. 이는 객체 지향 프로그래밍에서 중요한 원칙 중 하나인 “불변성”을 지키는 것을 의미합니다.

불변 클래스를 사용하면 다중 스레드 환경에서 안정적인 프로그램을 작성하는 데 도움이 됩니다. 또한 불변 클래스는 값 형식처럼 동작하여 인스턴스의 상태가 변하지 않기 때문에 예상치 않은 동작을 방지할 수 있습니다.

불변 클래스의 특징

  1. 변경 불가 - 불변 클래스의 인스턴스는 생성된 후에 상태를 변경할 수 없습니다.

  2. 스레드 안전 - 불변 클래스는 여러 스레드에서 안전하게 공유할 수 있습니다.

  3. 복사 없는 작업 - 불변 클래스의 인스턴스를 복사할 필요가 없기 때문에 메모리 소비를 줄일 수 있습니다.

  4. 예측 가능한 동작 - 상태가 변하지 않기 때문에 예상치 않은 동작을 방지할 수 있습니다.

불변 클래스의 설계

불변 클래스를 설계하는 방법은 간단합니다. 다음은 간단한 불변 클래스의 설계 예시입니다.

public class ImmutableClass
{
    public int ReadOnlyProperty { get; }
    public string AnotherReadOnlyProperty { get; }

    public ImmutableClass(int readOnlyProperty, string anotherReadOnlyProperty)
    {
        ReadOnlyProperty = readOnlyProperty;
        AnotherReadOnlyProperty= anotherReadOnlyProperty;
    }
}

위의 예시에서 ImmutableClass는 생성자를 통해 상태를 설정하고, 읽기 전용 속성을 통해 상태를 노출합니다. 이로써 인스턴스가 한 번 생성되면 그 상태를 변경할 수 없게 됩니다.

불변 클래스는 성능 상의 이점과 예측 가능한 동작을 제공하므로 C#에서 상태 변경이 필요하지 않은 경우에는 불변 클래스를 고려해보는 것이 좋습니다.

요약

불변 클래스는 안정적이고 예측 가능한 프로그램을 작성하는 데 도움을 줍니다. C#에서 불변 클래스를 설계하고 사용함으로써 다중 스레드 환경에서 안전한 프로그램을 작성할 수 있습니다.

참고문헌: