본문 바로가기
IT/c언어

C 언어 Union: 다양한 데이터를 하나의 메모리 공간으로 효율적으로 관리하기

by 뉴코딩맨 2023. 7. 19.
C 언어에서 Union은 다양한 데이터 타입을 하나의 메모리 공간으로 효율적으로 관리할 수 있게 해주는 기능입니다. C 언어의 Union에 대해 자세히 알아보겠습니다.
 
 

Union의 개념과 특징

Union은 여러 개의 멤버를 하나의 메모리 공간에 저장하는 자료구조입니다. Union의 멤버들은 메모리를 공유하며, Union이 차지하는 메모리 공간은 Union 내에서 가장 큰 멤버의 크기만큼만 할당됩니다. 이는 모든 멤버가 동시에 메모리에 저장되지 않고, 하나의 멤버가 사용되면 다른 멤버들의 데이터는 덮어쓰여질 수 있다는 의미입니다.
 
Union은 다양한 데이터 타입을 하나의 변수로 처리해야 할 때 유용하게 사용됩니다. 예를 들어, 다양한 센서에서 수집한 데이터를 저장해야 할 때, Union을 이용하여 메모리를 절약하고 효율적으로 데이터를 관리할 수 있습니다.
 

Union의 선언과 사용

 

#include <stdio.h>

// Union 정의
union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    union Data data;

    data.i = 10;
    printf("data.i: %d\n", data.i);

    data.f = 3.14;
    printf("data.f: %f\n", data.f);

    strcpy(data.str, "Hello, Union!");
    printf("data.str: %s\n", data.str);

    return 0;
}
 
위의 예제에서는 Union Data를 정의하고 있습니다. 이 Union은 int, float, char 배열로 구성되어 있으며, 모든 멤버들이 하나의 메모리 공간을 공유합니다. main 함수에서 data라는 Union 변수를 선언하고, 각 멤버에 값을 저장하고 출력하는 예제를 보여줍니다.
 

Union과 구조체의 차이점

Union과 구조체는 여러 개의 멤버를 하나의 자료형으로 묶는 점에서 비슷하지만, 메모리 사용 방식에서 차이가 있습니다. 구조체는 각 멤버들이 각자의 메모리 공간을 사용하므로 모든 멤버가 동시에 메모리에 저장되어야 합니다. 반면에 Union은 하나의 메모리 공간만을 사용하므로 오직 하나의 멤버만이 동시에 메모리에 저장될 수 있습니다.
 
또한, 구조체는 각 멤버에 이름을 부여하여 접근이 용이하지만, Union은 모든 멤버가 메모리를 공유하므로 마지막에 저장된 멤버만 접근 가능합니다.

 

 

Union의 활용 예제

 

#include <stdio.h>

union SensorData {
    int temperature;
    float humidity;
    char status[10];
};

void printSensorData(union SensorData data) {
    printf("Temperature: %d\n", data.temperature);
    printf("Humidity: %f\n", data.humidity);
    printf("Status: %s\n", data.status);
}

int main() {
    union SensorData sensor1;

    sensor1.temperature = 25;
    printSensorData(sensor1);

    sensor1.humidity = 60.5;
    printSensorData(sensor1);

    strcpy(sensor1.status, "Normal");
    printSensorData(sensor1);

    return 0;
}
 
위의 예제에서는 다양한 센서 데이터를 처리하기 위해 Union SensorData를 정의하고 있습니다. printSensorData 함수는 해당 센서 데이터를 출력하는 함수로, 다양한 데이터 타입에 대해 일관된 방식으로 출력할 수 있습니다.
 

결론

C 언어의 Union은 다양한 데이터 타입을 하나의 메모리 공간으로 효율적으로 관리할 수 있게 해주는 강력한 기능입니다. Union은 구조체와 비슷하지만 메모리 사용 방식에서 차이가 있으며, 특히 다양한 센서 데이터와 같이 다양한 데이터 타입을 처리해야 할 때 유용하게 사용됩니다. Union을 활용하여 효율적인 메모리 관리를 할 수 있으며, 데이터 처리에 있어서 유용한 기능으로 활용할 수 있습니다.

 

 

C 언어 구조체를 함수의 인자로 전달하는 방법

C 언어에서 구조체는 관련된 여러 변수들을 하나로 묶어서 새로운 데이터 타입을 정의하는 방법입니다. C 언어에서 구조체를 함수의 인자로 전달하는 방법에 대해 설명하겠습니다. 구조체를 함

newcodingman.tistory.com

 

댓글