Union (union)
공용체
- 서로 다른 데이터형을 한 번에 한 가지만 보관할 수 있는 데이터 형식이다.
- 서로 다른 데이터형을 한꺼번에 저장할 수 있는 Structure(구조체) 형식과 대조된다.
- 공용체 변수의 크기는 가장 큰 멤버가 차지하는 메모리 크기에 의해 결정된다.
- 여러 가지 데이터형을 사용해야 하면서 그것들을 동시에 사용할 필요는 없을 때, 공요체를 사용하면 메모리를 절약할 수 있다.
ex) 상품태그 중 일부는 정수ID, 일부는 문자열ID로 식별하는 시스템의 경우
- 공용체는 OS나 H/W 데이터 구조 설계에 사용되기도 한다.
Ex. union declaration & usage
union one4all {
int int_val;
long long_val;
double double_val;
};
one4all pail;
pail.int_val = 15;
pail.double_val = 1.38254; // int형 값 15가 소실됨
멤버로써의 공용체
- 공용체 또한 복합데이터형으로, 어떠한 자료구조의 멤버가 될 수 있다.
- 멤버로 들어간 공용체에 이름이 있다면 이름을 통해 공용체 내부의 멤버로 접근할 수 있고,
공용체에 이름을 부여하지 않았다면, 공용체 이름을 생략하고 바로 공용체 내부의 멤버로 접근할 수 있는데,
여기서 이름이 없는 공용체를 익명 공용체(Anonymous union)이라 한다.
Example. Union as data member
// i. 공용체의 이름이 있는 경우
struct widget {
char brand[20];
int type;
union id {
long id_num;
char id_char[20];
} id_val;
};
widget prize;
cin >> prize.id_val.id_num;
// 공용체 이름(id_val)을 이용해 접근
// ii. 공용체의 이름이 없는 경우 (Anonymous union)
struct widget {
char brand[20];
int type;
union id {
long id_num;
char id_char[20];
}; // 공용체의 이름이 없음
};
widget prize;
cin >> prize.id_num;
// 공용체의 이름이 없으므로 생략