반응형
C++에서 공용체(union)는 여러 데이터 멤버를 하나의 메모리 공간을 공유하게 하여, 메모리 사용을 절약하는 데 유용한 데이터 구조입니다. 공용체는 모든 멤버가 같은 메모리 공간을 공유하므로, 동시에 하나의 멤버만 값을 가질 수 있습니다. 즉, 하나의 멤버에 값을 저장하면 다른 멤버의 값은 덮어씌워지게 됩니다.
공용체의 특징
- 메모리 공유: 모든 멤버는 같은 메모리 공간을 공유하므로, 가장 큰 멤버의 크기만큼의 메모리만 할당됩니다.
- 동시에 하나의 멤버만 유효: 공용체에 값을 저장할 때는 하나의 멤버만 저장할 수 있습니다. 다른 멤버에 접근하면 예상치 못한 결과가 나올 수 있습니다.
- 기본 초기화: 공용체는 기본적으로 첫 번째 멤버만 초기화할 수 있습니다.
- 상속 불가: 공용체는 클래스처럼 상속할 수 없습니다.
공용체 정의와 사용 예시
#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
주요 개념:
- 크기: 공용체의 크기는 멤버 중 가장 큰 데이터 타입의 크기와 같습니다. 예를 들어, int가 4바이트, float가 4바이트, char가 1바이트라면 이 공용체는 4바이트의 메모리만 사용합니다.
- 안전한 사용: 공용체의 값을 읽고 쓸 때 유효한 멤버에만 접근해야 합니다. 다른 멤버에 접근하면 알 수 없는 동작이 발생할 수 있습니다.
C++에서 공용체와 함께 사용할 수 있는 기능:
- 익명 공용체: 이름 없이 멤버를 공유하는 공용체를 만들 수 있습니다.
- std::variant: C++17부터는 보다 안전하게 여러 타입을 저장하고 관리할 수 있는 std::variant라는 표준 라이브러리를 사용할 수 있습니다.
공용체는 주로 메모리 절약이 중요한 임베디드 시스템이나 하드웨어 인터페이스에서 자주 사용됩니다.
참고: 구조체(struct)
반응형
'C_C++' 카테고리의 다른 글
C++, 인라인 함수란? What is an inline function? (0) | 2024.10.21 |
---|---|
C++, 클래스 기초: 자동차 클래스를 상속한 전기차 (0) | 2024.10.20 |
(C++) 열거형 enum (0) | 2024.10.13 |
c++ typedef, 기존 자료형에 새로운 이름 부여 (0) | 2024.10.12 |
c++ 구조체 struct (0) | 2024.10.10 |