태그 보관물: 공용체

C언어 구조체 및 공용체

 C언어는 복합 데이터 타입을 지원하며, 주요한 두 가지가 바로 구조체(struct)와 공용체(union)입니다. 구조체와 공용체의 활용법, 메모리 사용 방식, 예제 코드를 통해 그 차이점을 명확히 이해해 봅시다.

구조체

구조체의 정의 및 사용

 구조체(struct)는 다양한 데이터 타입을 하나의 데이터 타입으로 만들 수 있게 해줍니다. 예를 들어, 사람의 정보를 저장할 때, 이름(문자열), 나이(정수), 키(실수) 등을 하나의 구조로 표현할 수 있습니다.

#include <stdio.h>

struct Person {
    char name[50];
    int age;
    float height;
};

int main() {
    struct Person person1;
    strcpy(person1.name, "Alice");
    person1.age = 25;
    person1.height = 5.5;

    printf("Name: %s\n", person1.name);
    printf("Age: %d\n", person1.age);
    printf("Height: %.2f\n", person1.height);

    return 0;
}

구조체의 메모리 사용 방식

 구조체는 각 변수의 메모리 크기를 합한 값을 사용합니다. 예를 들어, 위의 Person 구조체는 문자열(50 bytes), 정수(4 bytes), 실수(4 bytes)로 총 58 bytes의 메모리를 차지하게 됩니다. 다음 그림은 이를 나타낸 것입니다.

|    name      |    age    | height  |
|---50 bytes---|--4 bytes--|-4 bytes-|

구조체의 장단점

 구조체의 주요 장점은 다양한 데이터 타입을 하나의 타입으로서 묶어서 재사용할 수 있다는 점입니다. 그러나 메모리를 절약하는 데에는 효율적이지 않을 수 있습니다.

공용체

공용체의 정의 및 사용

 공용체(union)는 모든 멤버 변수가 하나의 메모리 공간을 공유합니다. 즉, 한 변수의 값이 변하면 다른 변수의 값도 함께 변할 수 있습니다.

#include <stdio.h>

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 = 220.5;
    printf("data.f : %.2f\n", data.f);

    strcpy(data.str, "C Programming");
    printf("data.str : %s\n", data.str);

    return 0;
}

공용체의 메모리 사용 방식

 공용체는 가장 큰 변수의 메모리 크기만큼의 공간만 차지합니다. 예를 들어, 위의 Data 공용체는 정수(4 bytes), 실수(4 bytes), 문자열(20 bytes) 중 가장 큰 값인 20 bytes만을 사용합니다. 다음 그림은 이를 나타낸 것입니다.

|         str        |
|------20 bytes------|

공용체의 장단점

 공용체의 가장 큰 장점은 메모리를 절약할 수 있다는 점입니다. 그러나 각 변수들이 메모리를 공유하기 때문에 사용 시 주의를 요합니다. 변수를 잘못 사용하면 데이터가 손상될 수 있습니다.

구조체와 공용체 비교

 아래 표는 구조체와 공용체의 주요 차이점을 요약합니다.

비교 항목 구조체 공용체
메모리 사용 멤버 변수들의 총합 가장 큰 멤버 변수 크기
데이터 접근 독립적인 멤버 접근 공유된 메모리 접근
장점 독립적 데이터 관리 메모리 절약
단점 메모리 낭비 가능성 데이터 손상 가능성

구조체와 공용체 선택 기준

 어떤 상황에서 구조체를 사용하고, 어떤 상황에서 공용체를 사용해야 할까요? 프로젝트의 용도와 메모리 사용 효율을 고려하여 선택할 수 있습니다.

언제 구조체를 사용할 것인가?

 구조체는 각 데이터를 독립적으로 관리하고자 할 때 유용합니다. 다양한 데이터 타입을 포함할 때도 구조체를 사용하는 것이 좋습니다.

언제 공용체를 사용할 것인가?

 공용체는 메모리가 제한적인 환경에서 효과적입니다. 하나의 변수만 사용할 길 때, 메모리 절약을 위해 공용체를 사용하는 것이 유리합니다.