본문 바로가기
Software/C++

[C++ 기초] 10. 공용체(Union)와 열거체(Enum)

by 리미와감자 2023. 3. 12.
728x90
반응형

공용체(Union)

정의

서로 다른 데이터형을 한 시점에 한 가지 데이터만 보관하는 데이터형.

구조체(Struct)와 생김새가 비슷함.

 

선언

union UnionName

{

타입 멤버변수1

타입 멤버변수2

...

}

 

특징

  • 공용체의 모든 멤버들이 같은 메모리 공간을 사용.
  • 동시에 데이터를 저장할 수 없고, 이전 데이터는 소실된다.
  • 주로 메모리 절약을 위해 사용됨.
  • OS, HW 데이터 구조에 사용.

 

#include <iostream>

using namespace std;

int main() {

    union MyUnion
    {
        int intVal;
        long longVal;
        float floatVal;

    };
    
    MyUnion test;
    test.intVal = 3;
    cout << test.intVal << endl;

    test.longVal = 33;
    cout << test.intVal << endl;
    cout << test.longVal << endl;

    test.floatVal = 3.3;
    cout << test.intVal << endl;
    cout << test.longVal << endl;
    cout << test.floatVal << endl;





    return 0;
}

 

결과

더보기

3
33
33
1079194419
1079194419
3.3

 

 


 

 

열거체(Enum)

정의

기호 상수를 만드는 또다른 방법이며, 주로 가독성을 위해 사용.

 

예를 들어, 아래와 같이 숫자에 해당 개념을 대입하여 코딩하려 할때

 

0 = 매우 나쁨

1 = 나쁨

2 = 보통

3 = 좋음

4 = 매우 좋음

 

2이 뭐였는지 헷갈리는 경우가 있다.

그럴 때 '보통'이라는 기호 상수를 사용하면 2의 값을 그대로 사용하면서도 가독성을 높일 수 있다. 

 

선언

enum EnumName { 열거자1, 열거자2, ... };

 

 

 

특징

  • 열거체로 정의된 변수는 열거체가 가지고 있는 열거자들만 대입될 수 있다.
  • 열거체 안에 포함된 요소들을 열거자라고 한다.
  • 열거체 데이터형은 산술연산이 적용되지 않는다.
  • 열거자들은 int형 변수에 대입해서 사용 가능하다.
  • 열거자들은 수를 지정해주지 않으면, 즉 초기화 하지 않으면 0, 1, 2, 3, ... 순으로 대입된다.
  • 열거자들은 초기화할 때 정수만 대입해야하고, 초기화 하지 않은 열거자들은 그 전의 수 + 1이 대입된다.

 

#include <iostream>

using namespace std;

int main() {

    enum spectrum { red, orange, yellow, green, blue, violet, indigo, ultraviolet};

    /*
    1. spectrum은 나만의 데이터 타입
    2. spectrum 안의 각각의 요소들(열거자)이 어떠한 수를 대변한다.
    ex) red = 0, orange = 1, ... ultraviolet = 7
    */

    spectrum a = orange;
    //spectrum a = orange + yellow; 불가능
    cout << a << endl;

    int b = blue; // 열거자들은 대입 가능
    int c = blue + 3; // 열거자들은 대입 가능
    cout << b << endl;
    cout << c << endl;


    return 0;
}

결과

더보기

1
4
7

 

 

#include <iostream>

using namespace std;

int main() {

    enum spectrum { red = -1, orange, yellow = 4, green = 4, blue, violet, indigo = 11, ultraviolet};


    cout << red << endl;
    cout << orange << endl;
    cout << yellow << endl;
    cout << green << endl;
    cout << blue << endl;
    cout << violet << endl;
    cout << indigo << endl;
    cout << ultraviolet << endl;



    return 0;
}

결과

더보기

-1
0
4
4
5
6
11
12

728x90
반응형

'Software > C++' 카테고리의 다른 글

[C++ 기초] 12. new 연산자와 delete 연산자  (0) 2023.03.20
[C++ 기초] 11. 포인터 기초  (0) 2023.03.20
[C++ 기초] 9. 구조체(Struct)  (0) 2023.03.12
[C++ 기초] 8. String형  (0) 2023.03.10
[C++ 기초] 7. 사용자 입력  (0) 2023.03.10

댓글