본문 바로가기

Language/C++

[C++] 공용체, 열거체

728x90
반응형

공용체 (union)

공용체는 구조체와 달리 메모리를 공유한다. 공용체들의 각 멤버들의 시작 주소는 모두 동일하다. 가장 큰 멤버 변수의 크기로 메모리를 할당받아 같은 공간에 자리잡기 때문에 한 번에 하나의 멤버 변수만 사용할 수 있다. 따라서 메모리의 크기가 제한되어 있거나 메모리를 절약하고 싶을 때 유용하지만 하나의 데이터 사용 후 데이터를 변경할 경우 원래의 데이터를 잃어버린다는 단점이 존재한다.

위 그림의 union A의 경우 j의 값을 변경함으로써 i의 값을 변경할 수 있고 i의 값을 변경함으로써 j의 값을 변경할 수 있게 된다.

공용체 A의 멤버 변수 a에만 67이란 값을 저장하고 a, b, c를 출력하면 모두 각자 선언된 데이터 타입으로 변형되어 출력된다.

 

열거형 (Enum)

프로그래밍을 하다 보면 각 데잍터에 수를 대응시키는 경우가 많다. 예를 들어 색깔을 나타낼 때 빨강에는 0, 흰색에는 1을 대응시켜서 나타낸다. 빨강은 0, 흰색은 1임을 확실하게 기억하고 있다면 상관 없겠지만 기억하지 못한다면 무엇을 대응시켰는지 다시 찾아 보아야 하는 번거러운 일이 발생한다. 하지만 빨강을 RED, 흰색을 WHITE로 하면 알아 듣기 쉽다. 이를 위해 상수를 설정해야되고 메모리가 낭비된다. C++에서는 열거형을 도입해서 이를 해결한다.

열거형을 나타내기 위해서 enum을 쓰고 중괄호 안에 각각에 대해 써주면 된다. 그러면 컴파일러는 열거형에 나타나 있는 각 원소에 0부터 차례로 정수값을 매겨준다. 즉 RED = 0, BLUE = 1, .. BLACK = 3 이 된다. 실질적으로 RED라는 변수가 메모리에 정해지는 것이 아니다. 컴파일 시에 컴파일러는 변환 작업을 하게 된다.

열거형에서 처음 수를 0으로 시작하기 싫다면 원하는 수로 설정하면 된다. RED = 3 부터 해서 BLUE = 4, WHITE = 5, BLACK = 6 이 된다.

위처럼 한다면 수를 지정한 부분에서 다시 시작되는 방식으로 BLUE = 4, BLACK = 4 가 된다. 참고로 열거형에서는 언제나 정수값이어야 한다.

728x90
반응형

'Language > C++' 카테고리의 다른 글

[C++] <string> 라이브러리  (0) 2021.10.03
[C++] OOP - 생성자와 소멸자  (0) 2021.07.09
[C++] 구조체  (0) 2021.07.03
[C++] 동적 할당  (0) 2021.07.01
[C++] 참조자(레퍼런스)  (0) 2021.06.30