C# 레코드의 예상치 못한 불일치: `with` 연산자의 함정

2025-07-22
C# 레코드의 예상치 못한 불일치: `with` 연산자의 함정

저자는 C# 레코드를 사용할 때 예상치 못한 불일치를 발견했습니다. `with` 연산자를 사용하여 파생 데이터를 포함하는 레코드를 업데이트하면 파생 데이터가 다시 계산되지 않아 불일치가 발생합니다. 이는 `with` 연산자가 생성자를 호출하지 않고 복사 생성자를 사용하여 복사본을 만들고 나서 속성을 변경하기 때문입니다. 몇 가지 해결책이 제안되었는데, 복잡한 레코드에서는 `with`를 사용하지 않는 것, 문제를 감지하는 Roslyn 분석기를 작성하는 것, `Lazy`를 사용하여 속성 계산을 지연하는 것, 언어 변경을 요청하는 것 등이 있습니다. 이 글은 C# 레코드의 잠재적인 함정을 강조하고, 특히 파생 데이터를 사용하는 경우 `with` 연산자를 사용할 때 주의해야 함을 경고합니다.