본문 바로가기

Language/C

공용체


 


●공용체

공용체(Union)란 서로 다른 자료형을 가진 데이터들이 동일한 기억장소를 “공유”하며 기억되는 형태를 말한다.

◎공용체의 정의

<형식>

union union-name{

field-type field-name;

field-type field-name;

};

이는 구조체 와 명령어 외엔 별반 다를게 없다 하지만 구분이 되는 것은 기억장소가 하나만 만들어 진다는 점이다.

ex) union union-name{

long int i_value;

float f_value;

};

라는 두 개의 공용체 필드를 만들었다고 한다면 이 기억 할당은 아래의 그림과 같이 이루어 진다.

 

4바이트로 할당

구조체는 필드 수만큼 매모리가 할당되지만 공용체는 단하나의 매모리가 할당된다. 그리고 i_value와 f_value가 동시에 같은 매모리를 “공유”하는 것인데 i_value로 사용이 되어 값을 넣게 되면 long int 형으로 매모리 자료형이 되는것이고 f_value로 사용되면 float형으로 자료형이 되는 것이다.

○단점

공용체의 단점은 저장된 값이 보호 받을수 없다는 점이다. 간단하게 말해서 구조체는 독립적으로 매모리가 할당되어 있기 때문에 하나의 필드를 바꾸는 것은 다른필드에 영향을 주지 않는다. 하지만 공용체는 하나의 매모리로 여러개의 필드가 공유하기 때문에 한번에 오직 한 필드만 활성화 된다. i_value에 어떤값을 할당하고 f_value에 값을 할당하게 되면 기존의 i_value의 값은 지워진다. 저장을 할때마다 덧씌워 지는 것이다.