본문 바로가기
언어/C++

[C++ 기본 공부정리] 10. 공용체(union), 열거체(enum)

by 민-Zero 2019. 12. 3.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다.

틀린 부분에 대한 지적은 감사합니다.

다양한 경우에 대비하기 위해 사용자가 직접 정의하는 사용자 정의형 타입인 구조체를 정리했다. 이번에는 구조체처럼 사용자 정의형 타입인 공용체와 열거체에 대해 정리하자.

 

1. 공용체(union)

공용체는 구조체와 매우 흡사 하지만 메모리 할당받는 부분에서 차이점이 존재한다. 공용체의 모든 멤버는 같은 메모리 공간에 자리 잡는다. 가장 큰 멤버 변수의 크기로 메모리를 할당받아 같은 공간에 자리잡기 때문에 한 번에 하나의 멤버 변수만 사용할 수 있다. 따라서 메모리의 크기가 제한되어 있거나 메모리를 절약하고 싶을 때 유용하지만 하나의 데이터 사용 후 데이터를 변경할 경우 원래의 데이터를 잃어버린 다는 단점이 존재한다.

문법)

union 공용체명{

    데이터1;

    데이터2;

    ....

};

union 키워드를 사용하여 선언할 수 있다.

공용체 Share의 멤버 변수 a에만 67이란 값을 저장하고 a, b, c를 출력하면 모두 출력이 된다. 출력된 값과 크기를 확인하면 각자 선언한 데이터 타입으로 변형되어 출력되는 것을 확인할 수 있다. 

즉, 공용체에 저장된 값의 의미는 값을 저장할 때 공용체의 어떤 멤버 변수를 사용했는지에 따라 달리 해석되며 공용체의 한 멤버 변수만 초기화하여도 나머지 멤버 변수도 그 값을 동시에 공유하는 것을 확인할 수 있다.

 

2. 열거체(enum)

열거체는 선언하게 되면 모든 값이 기호 상수(열거형)로 타입이 정의되며 그 타입이 가질 수 있는 정수형 상수값도 같이 명시할 수 있다. 열거형을 정의해도 메모리가 할당되지 않고 열거형 변수가 선언이 되어야 메모리가 할당된다. 사용자가 이름 짓는 새로운 데이터 타입인 것이다. 프로그램의 가독성을 높이고자 할 때 사용하며 오류 코드를 나타 낼 때 사용하기도 한다.

문법)

enum 열거체명 {

    열거형1,

    열거형2,

     .....

};

각 열거형을 ;(세미콜론) 이 아닌 ,(쉼표) 로 구분한다.

열거형에 아무런 정수를 입력하지 않으면 0부터 시작하여 다음 열거형은 1씩 증가된 정수가 들어간다. 이처럼 상수값  데이터에 의미를 부여하여 가독성을 높여 사용할 수 있다.

 

열거체는 고유한 데이터 타입이므로 다른 열거체의 열거형을 저장할 수는 없다.

 

어떤 상수값을 열거형에 대입 후 그다음 열거형에는 대입하지 않으면 그 위에 저장한 상수값의 +1 한만큼의 상수가 자동으로 할당되는 것을 확인할 수 있다.

댓글