A. 공용체와 열거체
1. 공용체
a. 공용체란?
🌟 구조체와 거의 동일하지만 모든 멤버 변수가 하나의 메모리 공간을 공유
- union 키워드를 사용하여 선언
- 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장할 수 있도록 설계된 타입
- 모든 멤버 변수가 같은 메모리를 공유(메모리 절약)해 한 번에 하나의 멤버 변수밖에 사용할 수 없음
b. 공용체의 메모리 할당
- 멤버 변수가 같은 메모리 위치를 공유해 마지막 값만 유효함 (나머지는 덮어쓰임)
- 크기가 가장 큰 멤버 변수의 크기로 메모리를 할당받음
- 👉 따라서 공용체 배열을 사용하면, 같은 크기로 구성된 배열 요소에 다양한 크기의 데이터를 저장할 수 있음
🎨 도식화
🤓 예제 : 공용체의 데이터 공유
#include <iostream>
using namespace std;
union ShareData
{
unsigned char a;
unsigned short b;
unsigned int c;
};
int main(void)
{
ShareData var;
var.c = 0x12345678;
cout << hex;
cout << var.a << endl;
cout << var.b << endl;
cout << var.c;
return 0;
}
✨ 실행결과
x
5678
12345678
👉 이와같이 공용체에 저장된 값의 의미는 어떤 멤버 변수를 사용했는지 따라 달라짐
따라서 어떤 멤버 변수를 사용했는지 별도로 저장해, 접근할 때에도 같은 멤버 변수를 사용해야 함
2. 열거체
a. 열거체란?
🌟 새로운 타입을 선언하면서, 동시에 해당 타입이 가질 수 있는 정수형 상숫값도 같이 명시할 수 있는 타입
- enum 키워드를 사용하여 선언
- 상숫값을 명시하지 않으면 0부터 시작, 그 다음 멤버의 값은 1만큼 증가
- 이러한 열거체를 이용하면 프로그램의 가독성이 높아지고, 변수가 지니는 값에 의미를 부여
- 주로 프로그램에서 고유한 상수 값을 정의하고 사용할 때 유용 (유지 보수에 도움)
🤓 예제 : 열거체의 자동 인덱스 증가
#include <iostream>
// 열거체 선언
enum Color {
RED, // 0
GREEN, // 1
BLUE // 2
};
int main() {
// 열거체 변수 선언 및 초기화
Color selectedColor = GREEN;
// 열거체 값 출력
std::cout << "Selected color: " << selectedColor << std::endl;
// 열거체 값 비교
if (selectedColor == GREEN) {
std::cout << "It's green!" << std::endl;
} else {
std::cout << "It's not green." << std::endl;
}
return 0;
}
✨ 실행결과
Selected color: 1
It's green!
b. 열거체의 값 지정하기
아래와 같이 열거체의 값을 따로 지정할 수도 있다
enum Weather {SUNNY = 0, CLOUD = 10, RAIN = 20, SNOW = 30};
👉 입력받은 값(0, 10, 20, 30)에 따른 타입에 맞춰 코드를 작성할 수 있음
c. 새로운 열거체 문법
위 열거체는 두 가지 문제점이 있음
1) 겹치는 이름 에러
2) 타입 오류
💙 따라서 이걸 해결하기 위해 새로운 문법 enum class가 생김
더보기
👉 사용한 곳
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 범위 : C++ 네임스페이스 (0) | 2023.09.13 |
---|---|
C++ 범위 : 유효범위와 연결 (0) | 2023.09.13 |
[자료형(data type)] C++ 파생형 구조체 총정리 (0) | 2023.09.13 |
[게임 프로그래머 입문 올인원] 객체지향 : static과 싱글톤 (33강) (0) | 2023.09.12 |
[게임 프로그래머 입문 올인원] 객체지향 : 연산자 오버로딩 (32강) (0) | 2023.09.12 |