프로그래밍 언어/C

[자료형(data type)] C 파생형 공용체와 열거체

순정법사 2023.08.17
더보기
자료형 중 파생형 공용체 공부 https://ddanzimind.tistory.com/32

 

D. 공용체와 열거체

1. 공용체

a. 공용체란?

🌟 union 키워드를 사용하여 선언. 구조체와 거의 동일하지만 모든 멤버 변수가 하나의 메모리 공간을 공유

 

🎨 도식화

 

 

  • 모든 멤버 변수가 같은 메모리를 공유해 한 번에 하나의 멤버 변수밖에 사용할 수 없음
  • 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장할 수 있도록 설계된 타입
  • 크기가 가장 큰 멤버 변수의 크기로 메모리를 할당받음

 

👉 따라서 공용체 배열을 사용하면, 같은 크기로 구성된 배열 요소에 다양한 크기의 데이터를 저장할 수 있음

 

🤓 예제 : 공용체의 데이터를 공유

typedef union
{
    unsigned char a;
    unsigned short b;
    unsigned int c;
} SHAREDATA;

int main(void)
{
    SHAREDATA var;
    var.c = 0x12345678; 

    printf("%x\n", var.a);
    printf("%x\n", var.b);
    printf("%x\n", var.c);

    return 0;
}

✨ 실행결과

78
5678
12345678

 

👉 이와같이 공용체에 저장된 값의 의미는 어떤 멤버 변수를 사용했는지 따라 달라짐

따라서 어떤 멤버 변수를 사용했는지 별도로 저장해, 접근할 때에도 같은 멤버 변수를 사용해야 함

 

 

2. 열거체

a. 열거체란?

🌟 enum 키워드를 사용하여 선언. 새로운 타입을 선언하면서, 동시에 해당 타입이 가질 수 있는 정수형 상숫값도 같이 명시할 수 있는 타입

(상숫값을 명시하지 않으면 0부터 시작, 그 다음 멤버의 값은 1만큼 증가)

 

이러한 열거체를 이용하면 프로그램의 가독성이 높아지고, 변수가 지니는 값에 의미를 부여

 

🤓 예제

enum Weather {SUNNY = 0, CLOUD = 10, RAIN = 20, SNOW = 30};  

int main(void)
{
    enum Weather wt;  
    wt = SUNNY;  

    switch (wt)
    {
        case SUNNY:
            puts("오늘은 햇볕이 쨍쨍!");
            break;
        case CLOUD:
            puts("비가 올락말락하네요!");
            break;
        case RAIN:
            puts("비가 내려요.. 우산 챙기세요!");
            break;
        case SNOW:
            puts("오늘은 눈싸움하는 날!");
            break;
        default: puts("도대체 무슨 날씨인건가요!!!");
    }  

    puts("각각의 열거체에 해당하는 정수값은 다음과 같습니다.");
    printf("%d %d %d %d\n", SUNNY, CLOUD, RAIN, SNOW);

    return 0;
}

✨ 실행결과

오늘은 햇볕이 쨍쨍!
각각의 열거체 멤버에 해당하는 정수값은 다음과 같습니다.
0 10 20 30

 

🤓 예제 : 상숫값을 명시하지 않음

enum Days {MON, TUE, WED, THU, FRI, SAT, SUN};  

int main(void)
{
    enum Days today;  
    today = SAT;  

    if (today >= SAT && today <= SUN)
    {
        puts("오늘은 주말이네요~ 주말에도 열심히 공부하는 여러분은 최고에요!");
    }
    else
    {
        printf("주말까지 %d일 남았어요~ 조금만 더 힘내자구요!", 5 - today);
    }

    puts("각각의 열거체에 해당하는 정수값은 다음과 같습니다.");
    printf("%d %d %d %d %d %d %d\n", MON, TUE, WED, THU, FRI, SAT, SUN);

    return 0;
}

✨ 실행결과

오늘은 주말이네요~ 주말에도 열심히 공부하는 여러분은 최고에요!
각각의 열거체 멤버에 해당하는 정수값은 다음과 같습니다.
0 1 2 3 4 5 6

 

 

 


출처 : http://www.tcpschool.com/c/c_struct_unionEnum

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com