C# 9의 Record와 Struct의 차이점

C# 9에 record라는 class와 유사하고 또 struct와도 유사한 타입이 생겼습니다. 불변개체를 다루기 위한 타입인데, 사실 class또는 struct으로 이와 유사하거나 거의 동일하게 쓸수는 있습니다만, record타입을 추가해서 코딩량을 줄이고 불변개체사용을 유도하며 사실은 함수형 언어의 장점을 차용한 기능이라고 할 수 있겠네요. 간단히 사용해 본 결과 코드량이 줄고 record 으로 만들어진 인스턴스의 모든 요소가 불변성이라는 인식(믿음)이 프로그래밍 하는데 상당히 유용하다는 것을 깨달았습니다. 아래 글은 Record가 무엇인지에 대해 잘 설명한 글입니다.

C# 9 Deep Dive: Records | Dave Brock (daveabrock.com)

C# 구조체는 언제든 초기화되지 않은 값, 임의 구조체 T에 대해 그러니까 default(T)가 존재할 수 있다는 것을 감안하지 않을 수 없는데, 그에 비해 레코드는 언제나 일정하게 초기화되어 있다는 가정을 할 수 있어서 그것도 좋은 것 같습니다. C# 구조체는 이름부터가 결국 C/C++ 스타일 구조체로부터의 연속성을 아주 버리진 못한 느낌이지요. 심지어 기본 생성자를 재정의할 수 조차 없어서 모든 필드가 default 값으로 채워진(필드가 참조 타입이면 null) 초기화가 아예 안 된 상태가 있다는 것을 받아들여야 하는데, 단순히 불변 객체로 만들어서 쓰기에는 제약이 너무 컸습니다.

좋아요 1