【 C 언어 】 #42 공용체 (union) 이해하기

Language/C & C++ 2018. 5. 8. 15:59 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #42 공용체 (union) 이해하기



 공용체는 구조체와 선언 및 사용 방법이 매우 유사 하다.  구조체 처럼 서로 다른 데이터 유형을 하나로 묶어 사용할 수 있는 장점이 있으며, 구조체와의 차이점은 정의 된 변수들의 메모리 할당 방식에 차이가 있다. ( 변수가 할당 될 때 하나의 메모리 공간에 여러 변수들의 메모리가 공용으로 할당 되어 사용된다 )


▶ 문제  : int i, int j 를 공용체로 묶어 선언하고  i = 3을 대입 후 printf 문으로 i의 값을 출력하고 ,  j = 5  를 대입 후 printf 문으로 j의 값을 출력하고 난 후 ,  다시 i의 값을 출력해 보라. 

 (여러 타입의 변수를 공용체로 묶어 사용할 수 있으나 여기서는 int 타입만 사용하였다.  공용체 변수명 등은 임의로 정하라)


▶ 실행 결과 :


(이미지 클릭, 확대해서 보세요)



▶ 포인트 


- 공용체 또한 구조체와 마찬가지로 실제로 변수를 선언 하는 것은 아니며, 선언하는 변수 들의 틀(템플릿)을 만들어 주는 것에 불과 하다는 점을 기억하라.


- 공용체와 구조체의 차이점 :

 구조체의 경우 선언 하는 변수 만큼 메모리를 할당한다.  

 예) int i , char j , double k  라고 구조체로 묶어 선언 할 경우 

모두  4 byte (int) + 1 byte (char) + 8 byte (double) = 13 byte 의 메모리를 할 당하게 된다.   즉, 메모리 공간을 변수마다 각각 할당하여 사용함


 그러나 공용체는 함께 선언된 변수들을 하나의 메모리에 할당하게 된다. 

단, 이때 함게 선언된 변수들중 사이즈가 가장 큰 것을 기준으로 할당 하게 된다


 예) int i , char j , double k  라고 공용체로 묶어 선언 할 경우 

모두  4 byte (int) , 1 byte (char) , 8 byte (double) , 중 용량이 가장 큰 8 byte 를 기준으로 메모리를 할 당하게 된다.  따라서 위 프로그램의 실행결과를 보면 i = 3 이 입력 되었음에도 불구하고 j=5 가 입력 된 후에는 , (동일 번지의) 메모리를 공유하고 있던 i에도 5가 입력 되어 버린 것이다. 

즉, 메모리 공간을 공용체로 선언된 모든 변수들이 같이 사용함.


- 공용체는 과거 마이크로 보드 처럼 메모리 용량이 작아 프로그램의 제약이 많았던 상황에서 주로 사용되었으며, 메모리를 순차적으로 사용하면 되는 프로그램에서 주로 사용된 기법이었다.  




▶ 프로그램 (답안 예시) : 

(이미지 클릭, 확대해서 보세요)


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


42 공용체 (union) 이해하기.cpp




반응형