비고
이 콘텐츠는 프레임워크 디자인 지침: 재사용 가능한 .NET 라이브러리에 대한 규칙, 관용구 및 패턴, 2판에서 Pearson Education, Inc.의 권한으로 다시 인쇄됩니다. 이 버전은 2008년에 출판되었으며, 이후 세 번째 에디션에서 완전히 수정되었습니다. 이 페이지의 일부 정보는 오래된 것일 수 있습니다.
범용 값 형식은 C#에서 "struct"라는 키워드로 가장 자주 불립니다. 이 섹션에서는 일반 구조체 디자인에 대한 지침을 제공합니다.
❌ 구조체에 대한 매개 변수가 없는 생성자를 제공하지 마세요.
이 지침에 따라 배열의 각 항목에서 생성자를 실행하지 않고도 구조체 배열을 만들 수 있습니다. C#에서는 구조체에 매개 변수가 없는 생성자가 있는 것을 허용하지 않습니다.
❌ 변경 가능한 값 형식을 정의하지 마세요.
변경 가능한 값 형식에는 몇 가지 문제가 있습니다. 예를 들어 속성 getter가 값 형식을 반환하면 호출자가 복사본을 받습니다. 복사본이 암시적으로 만들어지므로 개발자는 원본 값이 아니라 복사본을 변경하고 있다는 사실을 인식하지 못할 수 있습니다. 또한 일부 언어(특히 동적 언어)는 변경 가능한 값 형식을 사용하는 데 문제가 있으며, 이는 특히 지역 변수가 역참조될 때도 복사본이 생성되기 때문입니다.
✔️ 모든 인스턴스 데이터가 0, false 또는 null(적절하게)로 설정된 상태가 유효한지 확인합니다.
이렇게 하면 구조체 배열을 만들 때 잘못된 인스턴스를 실수로 만들지 못하게 됩니다.
✔️ 값 형식에 대해 IEquatable<T>을(를) 구현하도록 DO합니다.
값 형식의 Object.Equals 메서드는 boxing을 유발하며, 기본적인 구현은 리플렉션을 사용하므로 매우 효율적이지 않습니다. Equals 는 훨씬 더 나은 성능을 가질 수 있으며 박싱을 유발하지 않도록 구현할 수 있습니다.
❌ 명시적으로 확장 ValueType하지 마세요. 사실 대부분의 언어는 이를 방지합니다.
일반적으로 구조체는 매우 유용할 수 있지만 자주 상자화되지 않는 작은 단일 변경할 수 없는 값에만 사용해야 합니다.
Microsoft Corporation의 일부 저작권 2005, 2009. 모든 권리 보유.
프레임워크 디자인 지침에서 Pearson Education, Inc.의 권한으로 재인쇄 : 재사용 가능한 .NET 라이브러리에 대한 규칙, 관용구 및 패턴, Krzysztof Cwalina 및 Brad Abrams의 제2판, Microsoft Windows 개발 시리즈의 일환으로 Addison-Wesley Professional이 2008년 10월 22일 출판했습니다.