프로그래밍 공부
작성일
2023. 3. 29. 15:54
작성자
WDmil
728x90

Union 은 다양한 자료형을 한대 묶어서사용하는, 구조체처럼 사용한다.

스트럭쳐는 내부에 데이터들이 각기 다른공간에 들어가있는 특징이 있다.

그러나 Union은 다양한 데이터가 하나의 데이터공간을 활용하여 연결되어있다.

 

코드 예시를 살펴보자.

각기 구조체의 데이터 사이즈를 확인할 수 있다.

구조체는 데이터의 가장 큰 사이즈로 데이터를 잡게 된다. 즉, 윗부분 구조체의 데이터가 1,4 이기 때문에

5가 되고 8이 들어가야하는데 8사이즈가 못들어가기 때문에, 다음줄 8바이트를 넣어서

8 ( 1 + 4 + 빈공간 3)

8 ( double)

이 되기떄문에 16바이트를 사용한다.

 

Union은 8바이트가 뜬다. 이친구는 구조체와 다르게 맴버 각각이 자신의 공간을 따로 사용하는것이 아니다.

한줄 에 따로

(8byte 전부 같이 사용함)

8byte 의 공간을 할당하고, 그 공간을 모든 변수가 공유하면서 사용하게 된다.

주소를 찍어보면 어떻게 나오는지 알아보자.

위와 같이 나오는걸볼 수 있다.

각기 구조체가 다른 주소값을할당받는것을 볼 수 있고

Union은 각기 같은 주소의 첫 값을 받아오는걸 볼 수 있다.

유니온에 데이터를 넣었을 때 어떤식으로 나오는지 확인해보자.

유니온에 각각 데이터를 입력하면 위와같이 나타나게 된다.

전값이 있더라도 더 상위의 데이터값이 들어가게 되면, 전 값의 위치데이터에 다른 값이 덮어씌워지기 때문에

전 값을 출력하더라도 이상한 값이 나오게 된다.

 

즉, Union에는 우선순위가 존재한다.

Union의 우선순위는 가장 최근의 값에 기반한다. 전 값은 덮어씌워진다. 라는 걸 알 수 있다.

 

유니온의 사용 예시를 살펴보자.

같은 데이터 공간을 사용해도 다른 데이터가 출력되는것 을 알 수 있다.

 

이렇게 사용함으로써 스트럭쳐와 다르게 데이터 공간을 절약 할 수 있다.


 


Enum을 사용할 수 있다. Enum은 define처럼 동작하는 별명부여 방식인데,

define과 다르게 내부의 데이터주소를 자동으로 부여해주는 기능이 있다. 예시를 살펴보자.

잘린부분은 이런식으로 증가한다. 라고 써져있다.

즉, enum은 define을 다른방식으로 사용할 수 있는것 임 을 알 수있고,

enum에 데이터를 입력하여 더 쉽게 별명을 지정하고 직관적으로 프로그래밍 할 수 있다.

728x90