IT프로그램 언어/C 언어

C언어 기초(구조체와 공용체)

필립곽 2024. 11. 13. 08:11
반응형

C언어 기초: 구조체와 공용체

 C언어는 시스템 프로그래밍 및 임베디드 시스템 개발에 널리 사용되는 프로그래밍 언어입니다. 그 중에서도 데이터 구조를 효율적으로 관리하기 위해 **구조체(struct)**와 **공용체(union)**는 매우 유용한 기능입니다. 이 글에서는 구조체와 공용체의 개념 및 사용법에 대해 자세히 살펴보겠습니다.

 

1. 구조체 (Structure)

 구조체는 서로 다른 데이터 타입을 묶어 하나의 데이터 타입으로 정의할 수 있는 사용자 정의 데이터 구조입니다. 이를 통해 관련된 데이터를 그룹화하여 관리할 수 있습니다. 구조체를 사용하면 코드의 가독성과 유지보수성을 높일 수 있습니다.

 

1.1 구조체 정의

구조체는 `struct` 키워드를 사용하여 정의합니다. 기본적인 구조체 정의 및 사용법은 다음과 같습니다.

 

[예제]
#include <stdio.h>

// 구조체 정의
struct Student {
    char name[50];
    int age;
    float grade;
};

int main() {
    // 구조체 변수 선언
    struct Student student1;

    // 구조체 멤버 초기화
    strcpy(student1.name, "Alice");
    student1.age = 20;
    student1.grade = 3.8;

    // 구조체 멤버 출력
    printf("Name: %s\n", student1.name);
    printf("Age: %d\n", student1.age);
    printf("Grade: %.2f\n", student1.grade);

    return 0;
}

위의 코드에서는 `Student`라는 구조체를 정의하고, 이름, 나이, 성적을 멤버로 가집니다. `student1`이라는 변수를 선언하여 멤버에 값을 할당한 후 출력하고 있습니다.

 

1.2구조체 배열

구조체를 배열로 선언하여 여러 개의 데이터를 관리할 수도 있습니다.

[예제]
#include <stdio.h>
#include <string.h>

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

int main() {
    struct Student students[3];

    // 구조체 배열 초기화
    strcpy(students[0].name, "Alice");
    students[0].age = 20;
    students[0].grade = 3.8;

    strcpy(students[1].name, "Bob");
    students[1].age = 21;
    students[1].grade = 3.6;

    strcpy(students[2].name, "Charlie");
    students[2].age = 22;
    students[2].grade = 3.9;

    // 구조체 배열 출력
    for (int i = 0; i < 3; i++) {
        printf("Name: %s, Age: %d, Grade: %.2f\n", students[i].name, students[i].age, students[i].grade);
    }

    return 0;
}

위의 예제에서는 `students`라는 구조체 배열을 사용하여 3명의 학생 정보를 저장하고 출력하고 있습니다.

 

2. 공용체 (Union)

공용체는 구조체와 유사하지만, 여러 데이터 타입 중 하나만 저장할 수 있는 데이터 구조입니다. 공용체는 메모리 사용을 최적화할 수 있는 방법입니다. 즉, 공용체의 크기는 가장 큰 멤버의 크기로 결정됩니다.

 

2.1공용체 정의

공용체는 `union` 키워드를 사용하여 정의합니다.

[예제]
#include <stdio.h>

// 공용체 정의
union Data {
    int intValue;
    float floatValue;
    char charValue;
};

int main() {
    union Data data;

    // 정수 값 저장
    data.intValue = 5;
    printf("Integer: %d\n", data.intValue);

    // 실수 값 저장 (이전 값이 덮어씌워짐)
    data.floatValue = 3.14;
    printf("Float: %.2f\n", data.floatValue);

    // 문자 값 저장 (이전 값이 덮어씌워짐)
    data.charValue = 'A';
    printf("Character: %c\n", data.charValue);

    // 공용체의 메모리 사용 예
    printf("Size of union: %lu bytes\n", sizeof(data));

    return 0;
}

이 코드에서는 `Data`라는 공용체를 정의하고 정수, 실수, 문자 값을 저장해 보았습니다. 공용체의 특성 상 마지막에 저장한 값만 유효하며, 그 이전의 값은 덮어쓰여집니다.

 

2.2공용체의 활용

공용체는 메모리 절약이 필요할 때 유용합니다. 예를 들어, 다양한 타입의 데이터를 저장할 필요가 있을 때, 각각의 타입을 위해 별도의 메모리를 할당할 필요가 없습니다.

 

3.결론

구조체와 공용체는 C언어에서 데이터 관리를 효율적으로 할 수 있게 도와주는 중요한 도구입니다. 구조체는 관련된 데이터를 그룹화하여 사용할 수 있게 해주고, 공용체는 메모리를 절약하면서 다양한 타입의 데이터를 저장할 수 있는 유연성을 제공합니다. 이 두 가지 개념을 잘 이해하고 활용하면 C언어 프로그래밍의 효율성을 크게 높일 수 있습니다.

반응형