[C] 공용체

728x90

공용체란 동일한 기억장소에 여러 유형의 자료를 저장하기 위해서 프로그래머가 선언한 자료형을 말합니다.

이 때 공용체 안에 포함된 자료들은 같은 기억장소를 공유합니다.

사용될 자료의 자료형이 유동적일 경우 공용체를 사용하 기억공간을 효율적으로 사용할 수 있습니다.

 

공용체는 멤버들이 완전히 다른 자료형을 가질 때 기억공간을 절약하기 위해 사용하는 이러한 예시로는 급여관리 프로그램을 들 수 있습니다. 

글로벌회사에서 한국인은 원하로 월급을 받을 것이고 외국인은 달러로 월급을 받을 것입니다. 이 때 원하는 정수형으로 처리해야하고 달러는 실수형으로 처리해야합니다. 따라서 자료형이 달라지기 때문에 공용체를 사용하면 필요에 따라 메모리의 자료형을 선택하여 값을 저장하는 것이 가능합니다.

1. 공용체의 정의

1) 정의

형식은 아래와 같습니다.

union 공용체명{
  멤버1;
  멤버2;
...
};

 

이를 예제로 표현하면 아래와 같습니다.

union var{
  char a;
  int b;
  float c;
};

 

2) 공용체 변수의 선언

선언은 구조체와 유사하지만 struct 대신에 union을 사용합니다.

union 공용체명 변수명;

 

예컨대 아래와 같습니다;

union var abc;

 

3) 사용예제

union var { //공용체 정
  char a; //공용체 멤버
  int b; //공용체 멤버
  float c; //공용체 멤버
};
union var abc ; //공용체 변수 선언

 

2. 공용체의 사용

공용체가 사용되면 공용체의 멤버중에서 자료크기(byte 수)가 가장 큰 멤버에 대해서만 기억공간이 할당되고 기억공간의 시작 위치부터 각 부분을 다른 멤버가 공용으로 사용합니다.

 

union hold{
  short int digit;
  double big;
  char letter;
};
union hold fit;

fit.digit=23; //23이 저장(2byte만 사용)
fit.big=1234.567; //23이 지워지고 1234.567이 저장(8byte 사용)
fit.letter='b'; //1234.567이 지워지고 b가 저장(1byte 사용)

 

위 코드에 대해 기억공간을 어떻게 사용하는지 살펴보면 아래와 같습니다.

공용체 변수의 사용 예제는 아래와 같습니다.

#include<stdio.h>
void main()
{
  union test{
    short int i;
    float f;
    double d;
  };
  union test u;//공용체 변수 선언
  u.i = u.f = u.d = 0;
  printf("%d byte\n",sizeof(u)); //8 byte
  u.i=100; //공용체 멤버의 참조
  printf("%d %f %f\n",u.i,u.f,u.d); //100 0.000000 0.000000
  u.f=0.5; //공용체 멤버의 참조
  printf("%d %f %f\n",u.i,u.f,u.d); //0 0.500000 0.000000
  u.d=0.016667; //공용체 멤버의 참조
  printf("%f\n",u.d); //0.016667
}

'C Programming > C' 카테고리의 다른 글

[C] 구조체  (0) 2024.05.31
[C] 포인터  (0) 2024.05.17
[C] 배열  (1) 2024.05.02
[C] 기억 클래스  (1) 2024.04.26
[C] 함수  (0) 2024.04.26