C_C++

C++, 공용체 (union) 개요

고니자니 2024. 10. 17. 17:41
반응형

C++에서 공용체(union)는 여러 데이터 멤버를 하나의 메모리 공간을 공유하게 하여, 메모리 사용을 절약하는 데 유용한 데이터 구조입니다. 공용체는 모든 멤버가 같은 메모리 공간을 공유하므로, 동시에 하나의 멤버만 값을 가질 수 있습니다. 즉, 하나의 멤버에 값을 저장하면 다른 멤버의 값은 덮어씌워지게 됩니다.

 

공용체의 특징

  1. 메모리 공유: 모든 멤버는 같은 메모리 공간을 공유하므로, 가장 큰 멤버의 크기만큼의 메모리만 할당됩니다.
  2. 동시에 하나의 멤버만 유효: 공용체에 값을 저장할 때는 하나의 멤버만 저장할 수 있습니다. 다른 멤버에 접근하면 예상치 못한 결과가 나올 수 있습니다.
  3. 기본 초기화: 공용체는 기본적으로 첫 번째 멤버만 초기화할 수 있습니다.
  4. 상속 불가: 공용체는 클래스처럼 상속할 수 없습니다.

공용체 정의와 사용 예시

#include <iostream>
using namespace std;

union Data {
    int intValue;
    float floatValue;
    char charValue;
};

int main() {
    Data data;

    data.intValue = 10;
    cout << "intValue: " << data.intValue << endl;

    data.floatValue = 3.14f;  // intValue는 덮어씌워짐
    cout << "floatValue: " << data.floatValue << endl;

    data.charValue = 'A';  // floatValue는 덮어씌워짐
    cout << "charValue: " << data.charValue << endl;

    return 0;
}

(Output)

intValue: 10

floatValue: 3.14

charValue: A

 

C++, 공용체 (union)

주요 개념:

  • 크기: 공용체의 크기는 멤버 중 가장 큰 데이터 타입의 크기와 같습니다. 예를 들어, int가 4바이트, float가 4바이트, char가 1바이트라면 이 공용체는 4바이트의 메모리만 사용합니다.
  • 안전한 사용: 공용체의 값을 읽고 쓸 때 유효한 멤버에만 접근해야 합니다. 다른 멤버에 접근하면 알 수 없는 동작이 발생할 수 있습니다.

C++에서 공용체와 함께 사용할 수 있는 기능:

  1. 익명 공용체: 이름 없이 멤버를 공유하는 공용체를 만들 수 있습니다.
  2. std::variant: C++17부터는 보다 안전하게 여러 타입을 저장하고 관리할 수 있는 std::variant라는 표준 라이브러리를 사용할 수 있습니다.

공용체는 주로 메모리 절약이 중요한 임베디드 시스템이나 하드웨어 인터페이스에서 자주 사용됩니다.

 

 

참고: 구조체(struct)

https://gonyzany.tistory.com/704

 

c++ 구조체 struct

구조체는 다른 데이터 타입의 변수를 하나로 묶어서 사용할 때 유용합니다. 특히, 객체지향 프로그래밍에서 클래스와 유사하지만 기본적으로 구조체의 멤버 변수는 **public(공개)**입니다. 구조

gonyzany.tistory.com

반응형