C언어

[C언어] 구조체, 열거형, 공용체란?

_minit 2024. 10. 10. 15:40

C 언어에서는 데이터를 효율적으로 관리하고 코드를 읽기 쉽게 작성하기 위해 구조체(struct), 열거형(enum), 공용체(union)라는 세 가지 중요한 데이터 구조를 제공한다.

구조체 (struct)

구조체(struct)는 서로 다른 데이터 타입을 하나의 단위로 묶어주는 역할을 한다.

 

구조체의 특징

  • 서로 다른 데이터 타입을 하나로 묶을 수 있다.
  • 구조체를 정의하고 나면, 이를 하나의 데이터 타입처럼 사용할 수 있다.

 

구조체 정의 방법

struct 구조체이름 {
    데이터타입 멤버1;
    데이터타입 멤버2;
    ...
};
  • struct : 구조체를 정의하기 위한 키워드이다.
  • 구조체이름 : 구조체의 이름으로, 사용자가 자유롭게 지정할 수 있다.
  • 멤버 : 구조체가 포함하는 데이터 필드로, 서로 다른 데이터 타입의 변수들로 구성된다.

구조체 예

#include <stdio.h>

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

int main() {
    struct Student student1 = {"Alice", 20, 1001};

    printf("Name : %s\n", student1.name);
    printf("Age : %d\n", student1.age);
    printf("Student ID : %d\n", student1.studentID);

    return 0;
}
  • struct Student : 학생 정보를 저장하는 구조체를 정의한다.
  • student1 : Student 구조체의 변수를 선언하고 초기화한다.

 


 

열거형 (enum)

열거형(enum)상수 값들의 집합을 정의하기 위해 사용된다. 

 

열거형의 특징

  • 정수 상수들의 집합을 정의할 수 있다.
  • 기본적으로 0부터 시작하는 정수 값이 할당된다.

열거형 예제

#include <stdio.h>

enum State {
    READY,    // 0
    RUNNING,  // 1
    STOPPED   // 2
};

int main() {
    enum State currentState = READY;

    if (currentState == READY) {
        printf("System is ready to start.
");
    } else if (currentState == RUNNING) {
        printf("System is running.
");
    } else if (currentState == STOPPED) {
        printf("System is stopped.
");
    }

    return 0;
}

 

 


 

공용체 (union)

공용체(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: %f\n", data.f);

    snprintf(data.str, 20, "Hello");
    printf("data.str: %s\n", data.str);

    // 이전 값들이 덮어써짐
    printf("data.i after str: %d\n", data.i);
    printf("data.f after str: %f\n", data.f);

    return 0;
}
  • union Data는 정수, 실수, 문자열을 저장할 수 있지만 한 번에 하나의 값만 유지할 수 있다. data.fdata.str에 값을 저장하면 이전에 저장한 다른 멤버의 값은 덮어써지게 된다.
728x90

'C언어' 카테고리의 다른 글

[C언어] static 키워드란?  (0) 2024.10.11
[C언어] volatile 키워드란?  (0) 2024.10.11
[C언어] 쉬프트 연산과 비트 연산  (0) 2024.10.10
[C언어] (void *) 포인터란?  (0) 2024.10.10
[C언어] memcpy() 함수  (0) 2024.10.10