구조체 디자인

참고 항목

이 콘텐츠는 Pearson Education, Inc.의 허가를 받아 프레임워크 디자인 지침: 재사용 가능한 .NET 라이브러리에 대한 규칙, 관용어 및 패턴, 2판에서 재인쇄되었습니다. 이 버전은 2008년에 출판되었으며 이후 3판에서 완전히 개정되었습니다. 이 페이지의 정보 중 일부는 최신 정보가 아닐 수 있습니다.

범용 값 형식은 대개 구조체, 즉 C# 키워드라고 합니다. 이 섹션에서는 일반적인 구조체 디자인에 대한 지침을 제공합니다.

❌ 구조체에 대해 매개 변수가 없는 생성자를 제공하지 마세요.

이 지침에 따르면 배열의 각 항목에서 생성자를 실행하지 않고도 구조체의 배열을 만들 수 있습니다. C#에서는 구조체에 매개 변수가 없는 생성자를 사용할 수 없습니다.

❌ 변경 가능한 값 형식을 정의하지 마세요.

변경 가능한 값 형식에는 여러 가지 문제가 있습니다. 예를 들어 속성 getter에서 값 형식을 반환하는 경우 호출자는 복사본을 받습니다. 복사본은 암시적으로 만들어지기 때문에 개발자는 원래 값이 아닌 복사본을 변경하고 있다는 사실을 인식할 수 없습니다. 또한 역참조되는 경우 로컬 변수도 복사본을 만들 수 있으므로 일부 언어(특히 동적 언어)에서는 변경 가능한 값 형식을 사용하는 데 문제가 있습니다.

✔️ 상황에 따라 모든 인스턴스 데이터가 0, false 또는 null로 설정된 상태가 유효한지 확인하세요.

그러면 구조체의 배열이 만들어질 때 실수로 잘못된 인스턴스가 만들어지는 것을 방지할 수 있습니다.

✔️ 값 형식에서 IEquatable<T>을 구현하세요.

값 형식의 Object.Equals 메서드로 인해 boxing이 발생하고 기본 구현은 리플렉션을 사용하기 때문에 그다지 효율적이지 않습니다. Equals는 훨씬 더 향상된 성능을 제공하며 boxing이 발생하지 않도록 구현할 수 있습니다.

ValueType을 명시적으로 확장하지 마세요. 실제로 대부분의 언어에서 이러한 확장을 방지합니다.

일반적으로 구조체는 매우 유용할 수 있지만 자주 boxing되지 않을 작고 변경 불가능한 단일 값에만 사용해야 합니다.

Portions © 2005, 2009 Microsoft Corporation. All rights reserved.

Pearson Education, Inc의 동의로 재인쇄. 출처: Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition 작성자: Krzysztof Cwalina 및 Brad Abrams, 출판 정보: Oct 22, 2008 by Addison-Wesley Professional as part of the Microsoft Windows Development Series.

참고 항목