Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++ 공용체(Union)란? 개념, 문법, 활용 목적 완벽 정리

공용체(Union)는 사용자가 직접 정의하는 데이터 타입으로, 모든 멤버가 하나의 동일한 메모리 공간을 공유하는 구조를 가집니다. 이 때문에 공용체의 전체 크기는 멤버 중 가장 큰 멤버의 크기에 의해 결정됩니다. 두 개 이상의 변수가 같은 메모리 위치를 번갈아 사용해야 하는 상황이라면, 공용체가 가장 효율적인 선택이 됩니다.

공용체는 구조체(structure)와 매우 유사한 형태를 띠고 있으며, 변수 선언 방식 또한 구조체와 동일합니다. 다만 C 언어에서 공용체를 정의할 때는 union이라는 키워드를 사용한다는 점이 차이점입니다.

공용체의 기본 문법

C 언어에서 공용체를 정의하는 기본 문법은 다음과 같습니다.

union union_name {
    member definition;
} union_variables;

각 요소의 의미는 아래와 같습니다.

  • union_name − 공용체에 부여하는 임의의 이름입니다.
  • member definition − 공용체를 구성하는 멤버 변수들의 집합입니다.
  • union_variable − 해당 공용체 타입으로 생성된 객체(변수)입니다.

공용체 예제 코드

다음 예제는 int형과 float형 멤버를 가진 공용체를 정의하고, 실제로 할당되는 메모리 크기를 확인하는 코드입니다.

#include <stdio.h>
#include <string.h>

union Data {
    int i;
    float f;
} data, data1;

int main( ) {
    printf( "Memory size occupied by data : %d\t%d", sizeof(data), sizeof(data1));
    return 0;
}

실행 결과

Memory size occupied by data : 4 4

결과 해석

위 실행 결과에서 알 수 있듯이, 공용체 변수 datadata1의 크기는 각각 4바이트입니다. 이는 int형(4바이트)과 float형(4바이트) 중 더 큰 멤버의 크기를 따르기 때문입니다.

만약 같은 멤버들을 구조체로 정의했다면 두 멤버가 각각 별도의 메모리를 차지해 총 8바이트가 필요하지만, 공용체에서는 멤버들이 하나의 메모리를 공유하므로 단 4바이트만으로 충분합니다. 이러한 메모리 절약 특성 덕분에 공용체는 임베디드 시스템처럼 메모리 자원이 제한적인 환경이나, 동일한 데이터를 서로 다른 타입으로 해석해야 하는 경우에 널리 활용됩니다.