C 유니온
Union은 동일한 메모리 위치에 다양한 데이터 유형을 저장할 수 있는 특수 데이터 유형입니다. 여러 멤버로 공용체를 정의할 수 있지만 언제든지 하나의 멤버만 값을 가질 수 있습니다. 공용체는 동일한 메모리 위치를 사용하는 효율적인 방법을 제공합니다.
Union 정의
Union을 정의하려면 구조 정의와 비슷한 방식으로 union 문을 사용해야 합니다. Union 문은 여러 멤버가 포함된 새로운 데이터 유형을 정의합니다. 공용체 문의 형식은 다음과 같습니다.
union [union tag]{ member definition; member definition; ... member definition;} [one or more union variables];
union 태그는 선택 사항이며 각 멤버 정의는 int i, float f 또는 기타 유효한 변수 정의입니다. 공용체 정의 끝에서 마지막 세미콜론 앞에 선택적으로 하나 이상의 공용체 변수를 지정할 수 있습니다. 다음은 세 개의 멤버 i, f 및 str이 있는 Data라는 공용체 유형을 정의합니다.
union Data{ int i; float f; char str[20];} data;
이제 Data 유형의 변수는 정수, 부동 소수점 숫자 또는 문자열을 저장할 수 있습니다. 이는 하나의 변수(동일한 메모리 위치)가 여러 유형의 여러 데이터를 저장할 수 있음을 의미합니다. 필요에 따라 커뮤니티 내에서 기본 제공 또는 사용자 정의 데이터 유형을 사용할 수 있습니다.
노조가 차지하는 메모리는 노조에서 가장 큰 회원을 저장할 수 있을 만큼 충분해야 합니다. 예를 들어, 위의 예에서 Data는 다양한 멤버 중에서 문자열이 가장 큰 공간을 차지하므로 20바이트의 메모리 공간을 차지하게 됩니다. 다음 예에서는 위 Union이 차지하는 전체 메모리 크기를 보여줍니다.
#include <stdio.h>#include <string.h> union Data{ int i; float f; char str[20];}; int main( ){ union Data data; printf( "Memory size occupied by data : %d\n", sizeof(data)); return 0;}
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Memory size occupied by data : 20
Union Members 액세스
Union, 회원 접근 연산자(.) 를 사용합니다. 멤버 액세스 연산자는 공용체 변수 이름과 액세스하려는 공용체 멤버 사이의 마침표입니다. union 키워드를 사용하여 공용체 유형의 변수를 정의할 수 있습니다. 다음 예에서는 공용체의 사용법을 보여줍니다.
#include <stdio.h>#include <string.h> union Data{ int i; float f; char str[20];}; int main( ){ union Data data; data.i = 10; data.f = 220.5; strcpy( data.str, "C Programming"); printf( "data.i : %d\n", data.i); printf( "data.f : %f\n", data.f); printf( "data.str : %s\n", data.str); return 0;}
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
data.i : 1917853763data.f : 4122360580327794860452759994368.000000data.str : C Programming
여기에서 공용체의 i 및 f 멤버를 볼 수 있습니다. 변수에 할당된 마지막 값이 메모리 위치를 차지하기 때문에 손상되었으며, 이것이 str 멤버가 그대로 출력될 수 있는 이유입니다. 이제 동일한 예를 다시 살펴보겠습니다. 이번에는 한 번에 하나의 변수만 사용하며, 이는 또한 공용체 사용의 주요 목적을 보여줍니다.
#include <stdio.h>#include <string.h> union Data{ int i; float f; char str[20];}; int main( ){ union Data data; data.i = 10; printf( "data.i : %d\n", data.i); data.f = 220.5; printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming"); printf( "data.str : %s\n", data.str); return 0;}
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
data.i : 10data.f : 220.500000data.str : C Programming
여기서는 동시에 한 멤버만 사용하기 때문에 모든 멤버를 그대로 출력할 수 있습니다.