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) |
|---|---|---|
| 메모리 할당 | 각 멤버마다 별도의 메모리가 할당됨 | 모든 멤버가 하나의 메모리를 공유함 |
| 전체 크기 | 모든 멤버 크기의 합 (패딩 포함) | 가장 큰 멤버의 크기 |
| 값 저장 | 모든 멤버에 동시에 값을 저장하고 유지 가능 | 한 번에 하나의 멤버만 유효한 값을 가짐 |
| 정의 키워드 | struct | union |
| 주요 용도 | 관련된 서로 다른 데이터를 하나로 묶을 때 | 메모리를 절약하며 같은 공간을 재활용할 때 |
마무리
정리하면, 구조체는 여러 데이터를 독립적으로 보관해야 할 때, 공용체는 메모리를 절약하면서 같은 공간을 여러 용도로 활용해야 할 때 사용하는 것이 좋습니다. 두 자료형의 메모리 할당 방식 차이를 정확히 이해하면 임베디드 프로그래밍이나 메모리 최적화 작업에서 큰 도움이 됩니다.