이번 포스팅에서는 공용체와 열거체에 대해서 작성해 보려고 합니다.
구조체(struct), 공용체(union), 열거형(enum) 모두 방식은 유사합니다.
하지만 당연히 완전히 같지는 않기 때문에 구조체와 비교해 보며 정리해 보았습니다.
Union은 결론부터 얘기하면 구조체와 메모리 공간에 할당/접근하는 방식이 다릅니다.
즉, 공용체의 멤버들은 메모리를 공유하며, 여러 멤버 중 하나만 동시에 사용할 수 있습니다.
공용체를 사용하여 다른 데이터 유형의 값 중 하나를 저장하고 필요한 데이터를 저장할 때 메모리를 절약할 수 있습니다.
자세한 내용은 아래를 참고해 주세요
typedef struct //구조체 정의
{
char x;
short y;
int z;
}STRUCT;
typedef union //공용체 정의
{
char x;
short y;
int z;
}UNION;
위 정의한 것을 확인하면 차이점이라고는 struct 나 union밖에 없고 내부에 변수들은 같습니다.
이렇게 정의를 내리고 아래와 같이 각각의 크기를 비교해 보면 7과 4가 출력됩니다.
printf("%d \n",sizeof(STRUCT)); //7출력
printf("%d \n",sizeof(UNION)); //4출력
7은 struct 안의 모든 변수의 크기를 합한 값이고, 4는 union 안에
변수 중에서 가장 큰 변수의 크기이다.
이 특징이 struct 와 union의 차이인데, struct 는 선언이 되면 구조체를
구성하는 멤버가 메모리 공간에 각각 할당이 되고 union은 선언이 되면 가장
큰 변수 크기만큼 메모리 공간이 할당되고, 나머지 변수들은 앞에서부터 메모리를
공유하게 된다.
따라서 union에서는 x, y, z의 주솟값이 동일하다.
열거체는 명명된 상수 집합을 정의하는 데 사용됩니다. 주로 코드 가동성을
향상시키기 위해 사용됩니다. 각 열거 상수는 고유한 정수 값을 가지며,
기본적으로 0부터 시작하여 1씩 증가합니다.
enum Days {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};