Programming Language/C,C++

C] 공용체(Union) 간단 정리

TwinParadox 2018. 6. 25. 16:39
728x90

공용체(Union)는 기본적으로 구조체와 같은 선언 문법과 사용법이 동일한데, 가장 큰 차이점은 구조체 내의 멤버 변수들은 각자에게 할당된 메모리가 있으며 서로의 공유하지 않는데, 공용체는 멤버 변수 중 가장 큰 자료형의 공간을 공유하는 특성을 가지고 있음.


공용체를 선언할 때는 union 키워드를 사용.


union {

int i;

short s[2];

} u;


위 공용체의 크기를 sizeof()를 이용해 확인하면 4가 반환된다. 가장 큰 자료형이 int형이고 int형은 4바이트를 차지하기 때문이다. 만약 공용체 u가 구조체였다면 sizeof()를 통해 구조체 크기를 확인하면 4+2*2=8로 나왔을 것이다.


공용체는 기본적으로 공용체의 선두 번지와 같은 공간에 배치되어서 i의 번지와 s의 번지가 동일하게 된다. i의 값을 바꿨을 때 s도 바뀌고 s의 값을 바꿨을 때도 i의 값이 바뀔 수 있다.


이런 위험성을 인지하고 사용해야 하는 경우가 있다. 메모리를 절약하고자 할 때, 여러 자료형의 데이터를 하나의 장소에 기억시켜 놓고 필요한 작업을 하고자 할 때 주로 사용된다.


구조체의 개념으로 공용체를 사용하려고 시도하거나, 굳이 공용체를 사용하지 않아도 될만한 하드웨어 스펙을 가지고 있는 상황에서는 공용체를 사용하는 것은 낭비 같다. 메모리 공유라는 위험성 있는 부분을 다루는 것보다는 안정적인 구조체를 이용하는 것이 좋을 듯 싶다.

728x90