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

C 언어에서 구조체(Structure)와 공용체(Union)의 차이점 완벽 정리

C 언어에는 서로 다른 자료형의 데이터를 하나로 묶어 관리할 수 있는 사용자 정의 데이터 타입이 있습니다. 대표적인 것이 바로 구조체(Structure)공용체(Union)인데요, 두 개념은 문법이 비슷하지만 메모리를 사용하는 방식에서 근본적인 차이가 있습니다. 이 글에서는 각각의 개념과 문법, 예제 코드를 살펴보고 두 자료형의 핵심 차이점까지 정리해 드립니다.


구조체(Structure)란?

구조체는 사용자가 직접 정의하는 데이터 타입으로, 서로 다른 자료형의 데이터를 하나의 단위로 묶을 때 사용합니다. 여러 개의 멤버와 구조체 변수를 가질 수 있으며, C 언어에서는 struct 키워드를 사용해 정의합니다. 구조체의 멤버는 점(.) 연산자를 통해 접근할 수 있습니다.

C 언어에서 구조체를 선언하는 기본 문법은 다음과 같습니다.

struct structure_name {
    member definition;
} structure_variables;
  • structure_name − 구조체에 부여하는 임의의 이름입니다.
  • member definition − 구조체를 구성하는 멤버 변수들의 집합입니다.
  • structure_variable − 구조체의 실제 객체(변수)입니다.

구조체 예제

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

struct Data {
    int i;
    long int f;
} data, data1;

int main( ) {
    data.i = 28;
    printf("The value of i : %d\n", (data.i));
    printf( "Memory size occupied by data : %d\t%d", sizeof(data), sizeof(data1));
    return 0;
}

실행 결과

The value of i : 28
Memory size occupied by data : 16 16

위 예제에서 구조체의 크기가 16바이트로 출력된 것을 확인할 수 있습니다. 이는 구조체가 모든 멤버에게 각각 독립적인 메모리를 할당하기 때문입니다.

공용체(Union)란?

공용체 역시 사용자 정의 데이터 타입입니다. 하지만 가장 큰 특징은 공용체의 모든 멤버가 동일한 메모리 위치를 공유한다는 점입니다. 따라서 공용체의 전체 크기는 가장 큰 멤버의 크기에 의해 결정됩니다. 두 개 이상의 멤버가 같은 메모리 공간을 번갈아 사용해야 하는 상황이라면 공용체가 가장 적합한 선택입니다.

공용체는 구조체와 매우 유사하며, 공용체 변수를 생성하는 방식도 구조체 변수와 같습니다. C 언어에서는 union 키워드를 사용해 정의합니다.

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

union union_name {
    member definition;
} union_variables;
  • union_name − 공용체에 부여하는 임의의 이름입니다.
  • member definition − 공용체를 구성하는 멤버 변수들의 집합입니다.
  • union_variable − 공용체의 실제 객체(변수)입니다.

공용체 예제

#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

위 예제에서 공용체의 크기가 4바이트로 출력되었습니다. int와 float 중 더 큰 멤버의 크기를 따르며, 두 멤버가 하나의 메모리를 공유하기 때문입니다.

구조체와 공용체의 핵심 차이점

두 자료형의 차이를 한눈에 파악할 수 있도록 표로 정리했습니다.

구분구조체(Structure)공용체(Union)
메모리 할당각 멤버마다 별도의 메모리가 할당됨모든 멤버가 하나의 메모리를 공유함
전체 크기모든 멤버 크기의 합 (패딩 포함)가장 큰 멤버의 크기
값 저장모든 멤버에 동시에 값을 저장하고 유지 가능한 번에 하나의 멤버만 유효한 값을 가짐
정의 키워드structunion
주요 용도관련된 서로 다른 데이터를 하나로 묶을 때메모리를 절약하며 같은 공간을 재활용할 때

마무리

정리하면, 구조체는 여러 데이터를 독립적으로 보관해야 할 때, 공용체는 메모리를 절약하면서 같은 공간을 여러 용도로 활용해야 할 때 사용하는 것이 좋습니다. 두 자료형의 메모리 할당 방식 차이를 정확히 이해하면 임베디드 프로그래밍이나 메모리 최적화 작업에서 큰 도움이 됩니다.