본문 바로가기
IVS/C 프로그래밍

[C] 공용체(union), 열거체(enum)

by 코곰_ 2025. 1. 13.

 

공용체(Union)

모든 멤버 변수가 하나의 메모리 공간을 공유한다.
  • 위의 한 가지 점만 제외한 모든면에서 구조체와 같음.
  • 모든 멤버 변수가 같은 메모리를 공유하므로, 공용체는 한 번에 하나의 멤버 변수만 사용 가능하다. 
  • 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장할 수 있도록 설계된 타입.

 

 

 

공용체와 구조체의 차이점

출처: tcpschool.com

구조체(Struct) 공용체(Union)
각 멤버가 독립적인 메모리 공간을 가짐 모든 멤버가 하나의 메모리 공간을 공유
구조체의 크기는 모든 멤버의 크기의 합 공용체의 크기는 가장 큰 멤버의 크기
동시에 여러 멤버에 값 저장 가능 한 번에 하나의 멤버만 유효한 값을 저장

 

 

 

예시

#include <stdio.h>
union Data { // Union 정의
    char c; // 1byte
    int d; // 4byte
    float f; // 4byte
};
    int main() {
    union Data data;
    data.d = 1661;
    printf("int value: %d\n", data.d); // 1661
    printf("Char value from int: %d\n", data.c); // 125
    data.c = 3;
    printf("int value: %d\n", data.d); // 1539
    printf("Char value from int: %d\n", data.c); // 3 
    data.f = 2.71828f;
    printf("Float value: %f\n", data.f);  // 2.718280
    printf("Char value from float: %d\n", data.c); // 77
    return 0;
}

 

  • 공용체는 크기가 가장 큰 멤버 변수의 크기로 메모리를 할당받는다. 
  • 공용체에 저장된 값의 의미는 저장할 때 공용체의 어떤 멤버 변수를 사용했는지에 따라 달리 해석된다.

 

 

 

 

 

 

 

 

 


열거체(enumerated types)

  • 새로운 타입을 선언하면서, 동시에 해당 타입이 가질 수 있는 정수형 상숫값도 같이 명시할 수 있는 타입.
  • 이를 통해, 가독성이 높아지고 변수가 지니는 값에 의미를 부여할 수 있다.