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

C언어 구조체(struct)와 공용체(union)의 차이점 – 예제 코드로 쉽게 이해하기

C언어에서 구조체(structure)공용체(union)는 서로 다른 자료형의 데이터를 하나의 이름으로 묶어 관리할 수 있게 해주는 사용자 정의 자료형입니다. 두 개념은 선언 문법이 매우 비슷해 혼동하기 쉽지만, 메모리 할당 방식과 사용 목적에서 본질적인 차이가 있습니다. 아래 표에서 항목별로 자세히 비교해 보겠습니다.

구조체와 공용체의 차이점 비교표

번호구조체 (Structure)공용체 (Union)
1정의
서로 다른 자료형의 데이터들을 하나의 이름으로 그룹화한 이질적(heterogeneous) 데이터 집합입니다.
정의
서로 다른 자료형의 여러 변수가 하나의 메모리 공간을 공유하는 자료형입니다.
2문법
struct 태그이름 {
    자료형 멤버1;
    자료형 멤버2;
    ...
};
문법
union 태그이름 {
    자료형 멤버1;
    자료형 멤버2;
    ...
};
3선언 예시
struct sample {
    int a;
    float b;
    char c;
};
선언 예시
union sample {
    int a;
    float b;
    char c;
};
4키워드 – struct키워드 – union
5메모리 할당
모든 멤버에게 각각 독립적인 메모리가 할당되며, 전체 크기는 각 멤버 크기의 합입니다. (위 예시 기준 7바이트)
메모리 할당
모든 멤버가 하나의 메모리를 공유하며, 전체 크기는 가장 큰 멤버의 크기와 같습니다. (위 예시 기준 4바이트)
6특정 시점에도 모든 멤버가 동시에 메모리에 존재하므로, 여러 값을 함께 저장·유지해야 할 때 적합합니다.특정 시점에는 단 하나의 멤버만 유효하게 존재하며, 마지막에 대입한 값으로 덮어써집니다.

구조체 예제 프로그램

다음은 구조체의 메모리 크기를 확인하는 C 프로그램입니다.

#include <stdio.h>

struct size {
    double a;  // 8바이트
    int b;      // 4바이트
    char c;     // 1바이트
    float d;    // 4바이트
};

int main() {
    printf("%ld", sizeof(struct size));
    return 0;
}

실행 결과

24

멤버 크기를 단순히 더하면 17바이트지만, 컴파일러가 자료형 정렬(alignment)을 위해 패딩(padding)을 삽입하기 때문에 실제 크기는 24바이트가 됩니다.

공용체 예제 프로그램

다음은 공용체의 메모리 크기를 확인하는 C 프로그램입니다.

#include <stdio.h>

union size {
    double a;  // 8바이트
    int b;      // 4바이트
    char c;     // 1바이트
    float d;    // 4바이트
};

int main() {
    printf("%ld", sizeof(union size));
    return 0;
}

실행 결과

8

공용체는 모든 멤버가 같은 메모리를 공유하므로, 가장 큰 멤버인 double(8바이트)의 크기가 곧 공용체 전체 크기가 됩니다.

핵심 정리

  • 구조체: 각 멤버가 독립된 메모리를 가지며, 전체 크기는 멤버 크기의 합(패딩 포함)입니다.
  • 공용체: 모든 멤버가 하나의 메모리를 공유하며, 전체 크기는 가장 큰 멤버의 크기입니다.
  • 활용: 구조체는 학생 정보처럼 여러 속성을 동시에 저장할 때, 공용체는 같은 메모리를 상황에 따라 다른 자료형으로 해석해야 할 때 유용합니다.