C#에서의 공용 구조체(Union) 이해하기

공용 구조체는 여러 멤버가 동일한 메모리 위치를 공유하는 데이터 구조입니다.
C#에서는 StructLayout 속성과 FieldOffset 속성을 사용하여 공용 구조체를 구현할 수 있습니다.

 

공용 구조체의 필요성

C 또는 C++에서는 union 키워드를 사용하여 공용 구조체를 정의합니다.
이는 여러 변수가 동일한 메모리 위치를 공유할 수 있도록 합니다.
C#에서는 이러한 기능을 직접 지원하지 않지만, StructLayout와 FieldOffset을 사용하여 유사한 기능을 구현할 수 있습니다.

예제

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Explicit)]
struct UnionExample
{
    [FieldOffset(0)]
    public int IntegerValue;

    [FieldOffset(0)]
    public float FloatValue;
}

위의 예제에서 IntegerValue와 FloatValue는 동일한 메모리 위치를 공유합니다.
따라서 하나의 값을 변경하면 다른 값도 영향을 받게 됩니다.

주의사항

공용 구조체를 사용할 때는 주의가 필요합니다.
동일한 메모리 위치를 공유하는 변수들 사이에서 데이터의 무결성을 유지하기 위해 추가적인 로직이 필요할 수 있습니다.

결론

C#에서 공용 구조체는 특정 시나리오에서 유용할 수 있습니다.
그러나 이러한 구조를 사용할 때는 데이터의 무결성과 메모리 관리에 주의해야 합니다.
공용 구조체를 올바르게 사용하면 다양한 시나리오에서 효율적인 메모리 사용이 가능합니다.

출처

https://learn.microsoft.com/ko-kr/dotnet/csharp/advanced-topics/reflection-and-attributes/how-to-create-a-c-cpp-union-by-using-attributes

https://learn.microsoft.com/ko-kr/dotnet/api/system.runtime.interopservices.fieldoffsetattribute?view=net-7.0

https://www.csharpstudy.com/DevNote/Article/10

반응형