[c#] 뮤터블과 이뮤터블의 멀티스레딩 처리 방법
이번 글에서는 C#에서 뮤터블(mutable)과 이뮤터블(immutable) 데이터 타입을 다루면서 멀티스레딩 환경에서의 처리 방법에 대해 알아보겠습니다.
뮤터블과 이뮤터블 데이터 타입
뮤터블(mutable) 데이터 타입은 변경 가능한 데이터를 말합니다. 예를 들어, List
나 Dictionary
와 같은 컬렉션 타입이 여기에 해당됩니다. 이와 달리 이뮤터블(immutable) 데이터 타입은 변경 불가능한 데이터를 말합니다. 예를 들어, string
이 여기에 해당됩니다.
멀티스레딩에서의 문제
데이터를 여러 스레드가 동시에 변경하면 데이터 불일치 문제가 발생할 수 있습니다. 이를 방지하기 위해 락(lock) 등의 기술을 사용하여 임계 영역을 설정해야 합니다. 그러나 락 사용은 데드락 등의 문제를 야기할 수 있고, 성능 저하를 가져올 수 있습니다.
이뮤터블 객체 활용
이뮤터블 객체를 사용하면 락을 사용하지 않고도 안전하게 다중 스레드에서 사용할 수 있습니다. 이뮤터블 객체는 원본을 변경하는 대신 새로운 객체를 생성하기 때문에 여러 스레드 간에 상태를 공유하지 않으므로 락 문제를 회피할 수 있습니다.
string originalString = "Hello";
string modifiedString = originalString.Replace("H", "J");
위 코드에서 originalString
을 변경하는 대신 새로운 modifiedString
를 생성하여 안전하게 다중 스레드에서 사용할 수 있습니다.
결론
뮤터블과 이뮤터블 데이터 타입을 적절히 활용하여 멀티스레딩 환경에서의 안전한 데이터 처리를 보장할 수 있습니다.
이상으로 뮤터블과 이뮤터블의 멀티스레딩 처리 방법에 대해 알아보았습니다. 감사합니다.
참고 자료
- Microsoft Docs. “Immutable Objects.” Microsoft, https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/immutable-objects. Accessed 15 July 2021.