Union과 Structure의 차이점
공용체(Union)는 구조체(Structure)와 선언 및 정의의 문법적 구조가 비슷합니다.하지만 한 가지 다른 점이 있습니다. 그것은 메모리 공간을 사용하는 방법이 다릅니다.
구조체는 각 멤버에 메모리 공간이 할당되고 총 구조체 크기는 이를 합한 크기입니다. 하지만 공용체 경우는 멤버 중 가장 큰 멤버의 크기로 공용체 크기가 결정되고 각 멤버가 메모리를 공유합니다.

위 그림에서 보는 것과 같이 공용체의 멤버는 같은 메모리 공간을 사용합니다. 즉 동시에 모든 멤버를 처리할 수 없음을 의미합니다.
공용체 정의
union item
{
int m;
float x;
char c;
}It1;
union 키워드를 사용하여 공용체를 정의합니다. 데이터 타입이 다른 m, x, c 멤버를 가진 공용체를 선언하였고 동시에 It1 공용체 변수를 정의하였습니다. 여기서 중요한 것은 모든 멤버가 공통된 하나의 메모리 공간을 사용한다는 것입니다. 즉 멤버를 사용할 때 오직 한 번에 하나씩만 사용할 수 있다는 의미입니다.
공용체 멤버 접근 방법
union test
{
int a;
float b;
char c;
}t;
t.a;
t.b;
t.c;
공용체 멤버 사용 예제
#include <stdio.h>
union item
{
int a;
float b;
char ch;
};
int main( )
{
union item it;
it.a = 12;
it.b = 20.2;
it.ch = 'z';
printf("%d\n", it.a);
printf("%f\n", it.b);
printf("%c\n", it.ch);
return 0;
}
OUTPUT
1101109626 //쓰레기 값 출력
20.199940 //쓰레기 값 출력
z //원하는 값 출력
위의 예제는 공용체 멤버가 오직 한 번에 하나의 멤버만 처리하는 것을 보여주는 예제입니다. 공용체 item을 선언하고 공용체 변수 it를 정의하였습니다. 그리고 각 멤버에 값을 넣은 후 출력하는 예제입니다. 그리고 오직 마지막 값인 it.ch만 제대로 출력되었습니다.
모든 값을 각 멤버에 할당하였어도 공통된 메모리 공간을 사용하기 때문에 제일 마지막에 할당된 ‘z’가 저장되어있고 출력할 때 마지막 값만 제대로 출력된 것입니다.
공용체는 일반적으로 자주 쓰이지는 않지만 특별한 코드를 작성할 때 자주 쓰인다고 합니다. (임베디드, 디바이스 드라이버 등등)
<< 다음 | 혼자 공부하는 C언어 | 이전 >> |
'프로그래밍 > C' 카테고리의 다른 글
포인터 변수 사용 방법 (0) | 2019.12.20 |
---|---|
C언어 포인터 (0) | 2019.12.20 |
typedef 별칭(Alias) 주기 (0) | 2019.12.19 |
C언어 구조체 (Structure) (0) | 2019.12.19 |
배열을 함수의 매개변수로 사용하기 (0) | 2019.12.19 |