C언어 - 공용체와 열거체

Ohyuchan·2023년 10월 19일
0

🧑🏻‍💻 C Language

목록 보기
16/18
post-thumbnail

📁 공용체와 열거체


이번 포스팅에서는 공용체와 열거체에 대해서 작성해 보려고 합니다.
구조체(struct), 공용체(union), 열거형(enum) 모두 방식은 유사합니다.

하지만 당연히 완전히 같지는 않기 때문에 구조체와 비교해 보며 정리해 보았습니다.

🤔 Union(공용체)

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의 주솟값이 동일하다.

🤔 enum

열거체는 명명된 상수 집합을 정의하는 데 사용됩니다. 주로 코드 가동성을
향상시키기 위해 사용됩니다. 각 열거 상수는 고유한 정수 값을 가지며,
기본적으로 0부터 시작하여 1씩 증가합니다.

enum Days {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
};
profile
안녕하세요

0개의 댓글