63 – 공용체

공용체는 구조체와 형식이 동일하지만 구조체와 달리 공용체 내에 있는 각 맴버가 동일한 기억장소를 공유하면서 이를 경우에 따라 다른 용도로 사용한다. 그러므로 공용체는 필요한 유형의 변수에 따라 다르게 사용될 수 있지만 한순간에 하나의 맴버만 사용할 수 있다.

union position {
int class;
char department[10];
};

공용체는 이 예처럼 union 키워드를 이용하여 만든다. position은 태그 이름이고, class와 department라는 두 개의 맴버로 구성되어 있다. 선언하는 방식도 구조체 선언하듯이 하면 된다.

union position my;

그리고 공용체도 구조체처럼 정의와 변수 선언이 동시에 가능하다.

여기서 차이가 어떤 것이 있는지를 보여주도록 하겠다. 동일한 구조의 구조체가 있다고 하면, 해당 구조체의 구조가 어떤 식으로 다른 구조로 되어있는지를 보여주면 다음과 같다.

그림1

공용체형으로 만들게 되면 구조체형과 달리 동일한 기억장소에 공유하게 되어 두 개의 변수 중 하나만을 사용할 수 있도록 되어 있다. 그에 반해 구조체에는 두 개의 변수를 둘 다 별도의 기억장소에 저장하게 되며, 둘 다 사용할 수 있다.

이런 공용체를 만드는 이유가 있다. 공용체는 한정된 기억장소를 절약하기 위해 사용되는 구조이다. 즉, 값으로 들어가는 맴버가 여러 형태가 존재하나 그 여러 맴버가 동시에 사용될 일이 없는 구조에 이용된다. 이걸 예시로 만들어본 것이 아래의 예제이다. 고등학생일 경우에는 사실 반으로 따지지만 대학생이라면 전공으로 따지게 된다. 그런 것을 예시로 하여 직접 예시를 작성해봤다. 단, 값은 어떤 것이 들어가도 된다는 걸 보여주기 위해 임의로 막 넣었다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.