공용체를 사용하는 곳은 많습니다.
일반적으로 많이 사용하는 곳은 통신쪽 입니다.
prototype 을 정의하다보면 어떤 경우에는 필요하고 어떤 경우에는
필요하지 않는 부분이 있는데 보통 이런 부분을 공용체를 이용 합니다.
특히 통신쪽은 사이즈가 되도록이면 적게설계하는 것이 원칙 입니다.
그래서 많이 사용합니다.
그리고 Transaction 을 DB 가 아닌 일반 flat 파일로 구현할 때도 마찬가지
입니다. Transaction 은 일반적으로 통신에서 처리된 데이터를 저장하는
경우가 많으니까요 ...
//주민번호
typedef struct
{
char number1[6]; //주민번호 앞에것
char number2[7]; //주민번호 뒤에것
}City_Number;
union
{
char name[20]; //이름
City_Number Number; //주민번호
}Info;
예를 들어 이름이 입력되면 주민증록번호를 입력하지 않고,
주민등록번호를 입력하면 이름을 입력하지 않도록 처리 한다고 가정 합시다.
(단지 이해를 위해서 가정을 세웠습니다. 꼭 그렇다는 얘기는 아니고 ...^^)
그러면 일단 이름이 들어갈 공간이 필요하고, 또 주민등록번호가
입력될 경우를 대비해서는 주민번호 입력할 공간이 필요 합니다.
이름은 일단 20 Bytes 로 가정하면
char name[20] 으로 가능하고
주민번호는 City_Number 에 정의한대로 사용하면 됩니다.
이렇게 가정하면 20 + 6 + 7 = 33 Bytes 가 필요합니다.
그러나 Info 처럼 정의하면 20 Bytes 만 있으면 가능합니다.
같은 메모리 20 Bytes 내에서 이름을 입력할 경우는 Info.name 을 사용하면
되고 Info.Number 를 사용하면 주민번호를 저장할 수 있습니다.
이렇게 하면 통신으로 전송할 때도 33 Bytes 보다 20 Bytes 를 보내는 것이
훨씬 수월합니다. 저장할 때도 마찬가지로 사이즈를 적게 잡아 먹습니다.
아주 잘 설계된 프로그램들은 종종 union 을 많이 사용합니다.
꼭 사용할 필요는 없으나 아주 유용하다는 것만 알아 주시기 바랍니다.
네 그걸 몰랐습니다.
c....
흠냥...
다시 한번 말하지만 union은 통신 분야에 사용합니다.
그외 태클과 질문은 환영합니다.