WIPIVERSE

공용체

공용체(영어: Union type)는 컴퓨터 과학에서 하나의 메모리 주소 안에서 여러 형식(Type)을 가질 수 있는 값을 가리키는 자료형 개념이다. 일부 프로그래밍 언어는 이러한 값을 지원하기 위한 특별한 자료형을 제공하며, 이를 공용체라 부른다.

공용체는 타입 이론에서 합타입(sum type)에 해당하며, 수학에서의 분리 합집합(disjoint union)과 같은 개념으로 이해될 수 있다. C 언어와 C++를 비롯한 여러 프로그래밍 언어에서 정의되어 사용된다.

C 언어에서 공용체는 union 키워드를 사용하여 정의하며, 구조체(struct)와 문법이 유사하지만 동작 방식에서 근본적인 차이가 있다. 구조체는 각 멤버가 서로 다른 메모리 공간을 각각 차지하는 반면, 공용체는 모든 멤버가 동일한 메모리 공간을 공유한다. 즉, 공용체의 크기는 가장 큰 멤버의 크기만큼으로 결정되며, 한 번에 하나의 멤버만 활성화되어 사용될 수 있다. 메모리 효율을 극대화할 수 있다는 장점이 있으나, 어떤 멤버가 활성화되었는지를 프로그램의 실행 중에 자동으로 파악할 수 없어 프로그래머가 직접 관리해야 한다.

C++에서는 공용체가 클래스와 유사한 형태로 확장되었으나, 참조자와 상속, 가상 함수 등을 사용할 수 없다는 제약을 가진다. C++의 공용체는 생성자와 소멸자가 자동으로 호출되지 않는 등의 문제가 있어, 이후 C++17 표준 라이브러리에 도입된 std::variant가 보다 안전한 대체 수단으로 사용된다.

다른 프로그래밍 언어에서는 공용체가 열거형(enum)이나 태그된 합타입(tagged union)의 형태로 구현되기도 한다. 특히 함수형 언어에서는 자료형의 합집합 연산을 통해 이를 표현하며, Rust 등의 언어에서는 열거형이 공용체와 유사한 기능을 언어 차원에서 제공한다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기