프로그래밍 언어/C++

[자료형(data type)] C++ 파생형 공용체와 열거체 총정리

순정법사 2023.09.13

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을 정수로 사용하고 싶지 않아도 int 변수에 들어감

 

💙 따라서 이걸 해결하기 위해 새로운 문법 enum class가 생김

 

이렇게 이름이 겹쳐도 ok, 캐스팅 해야만 int로 사용가능

 

 

 

 


출처 : http://www.tcpschool.com/cpp/cpp_struct_unionEnum

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com