C언어

[C언어] 구조체와 공용체의 차이점 및 활용법

코딩 메모장 2024. 11. 22. 23:44
728x90

C 언어에서 구조체(struct)와 공용체(union)는 데이터를 묶어서 저장하는데 사용하는 중요한 자료형입니다. 이 두 개념은 비슷해 보이지만, 동작 원리와 메모리 사용 방식에서 큰 차이가 있습니다.

 

1. 구조체(struct)란?

구조체는 여러 개의 데이터를 하나의 묶음으로 관리할 수 있는 사용자 정의 자료형입니다. 구조체의 각 멤버는 서로 독립된 메모리 공간을 가지며, 동시에 접근할 수 있습니다.

특징

  • 각 멤버는 서로 다른 데이터 타입을 가질 수 있습니다.
  • 각 멤버는 고유한 메모리 공간을 차지합니다.
  • 총 메모리 크기는 모든 멤버의 크기의 합입니다.

구조체 예제

#include <stdio.h>

struct Student {
    int id;
    float grade;
    char name[20];
};

int main() {
    struct Student s1 = {1, 95.5, "Alice"};
    printf("ID: %d, Grade: %.2f, Name: %s\n", s1.id, s1.grade, s1.name);
    return 0;
}

 

출력 결과

ID: 1, Grade: 95.50, Name: Alice

 

2. 공용체(union)란?

공용체는 구조체와 비슷하게 여러 데이터를 하나로 묶습니다. 하지만 공용체의 모든 멤버는 하나의 메모리 공간을 공유하며, 한 번에 하나의 멤버만 저장할 수 있습니다.

특징

  • 모든 멤버가 같은 메모리 공간을 공유합니다.
  • 총 메모리 크기는 가장 큰 멤버의 크기입니다.
  • 한 멤버에 값을 저장하면 다른 멤버의 값이 덮어씌워질 수 있습니다.

공용체 예제

#include <stdio.h>

union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    union Data data;
    data.i = 10;
    printf("Integer: %d\n", data.i);

    data.f = 22.5;
    printf("Float: %.2f\n", data.f);

    sprintf(data.str, "Hello");
    printf("String: %s\n", data.str);

    // 이전 값들이 덮어씌워짐
    printf("Integer after String: %d\n", data.i);
    return 0;
}

 

출력 결과

Integer: 10
Float: 22.50
String: Hello
Integer after String: 1819043144  // 덮어씌워짐

3. 구조체와 공용체의 차이점

 

특징
구조체(struct) 공용체(union)
메모리 사용 모든 멤버가 각자의 메모리 공간을 사용 모든 멤버가 하나의 메모리 공간을 공유
메모리 크기 멤버 크기의 총합 가장 큰 멤버의 크기
값 유지 모든 멤버가 독립적으로 값을 유지 한 멤버의 값을 저장하면 다른 멤버의 값이 덮어씌워짐
사용 목적 여러 데이터를 동시에 저장하고 사용할 때 데이터를 효율적으로 저장해야 하거나, 한 번에 하나의 값만 필요할 때
초기화 및 접근 모든 멤버를 개별적으로 초기화 및 접근 가능 한 번에 하나의 멤버만 초기화 및 접근 가능

4. 구조체와 공용체의 활용 사례

구조체의 활용 사례

  • 데이터 모델링: 학생, 직원, 제품 등 여러 속성을 가진 데이터를 표현.
  • 네트워크 프로그래밍: 패킷 헤더와 같은 복잡한 데이터를 표현.

구조체 예제: 학생 데이터 모델링

struct Student {
    int id;
    char name[50];
    float grade;
};

공용체의 활용 사례

  • 메모리 절약: 메모리 사용을 최적화해야 하는 임베디드 시스템.
  • 다른 데이터 타입 처리: 같은 데이터를 여러 형식으로 해석할 때.

공용체 예제: 데이터 변환

union Converter {
    int i;
    float f;
    char bytes[4];
};

5. 요약

  • 구조체(struct): 여러 데이터를 동시에 저장하며 독립적으로 관리할 때 사용합니다.
  • 공용체(union): 메모리를 절약하거나 한 번에 하나의 값만 필요할 때 유용합니다.

구조체와 공용체는 메모리 사용과 동작 원리에서 차이가 있지만, 각각의 강점이 있는 만큼 적절히 사용하면 효율적인 프로그램을 설계할 수 있습니다.

728x90