๊ธ€ ์ž‘์„ฑ์ž: ๋˜ฅํด๋ฒ .
๋ฐ˜์‘ํ˜•

1. ์„ค๋ช…


 C++03๊นŒ์ง€์˜ enum์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž C++11๋ถ€ํ„ฐ enum class๋ผ๋Š” ๊ฒƒ์ด ๋“ฑ์žฅํ–ˆ๋‹ค. ๊ธฐ์กด enum์˜ ๋ฌธ์ œ์ ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1.1) ๊ธฐ์กด enum์˜ ๋ฌธ์ œ

1.1.1) ์ „๋ฐฉ ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ

 ๊ธฐ์กด enum์€ enumerator์— ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด์žˆ์„์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฉด ๊ทธ ํฌ๊ธฐ๋ฅผ ์ •ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ „๋ฐฉ ์„ ์–ธ์„ ํ•  ์ˆ˜ ์—†๋‹ค.

enum Fruit; // ์ „๋ฐฉ ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ

void main()
{
    Fruit f = Apple; // ๋”ฐ๋ผ์„œ ํ•ด๋‹น enum์„ ์ฐพ์„์ˆ˜ ์—†์Œ
}

enum Fruit
{
    Apple,
    Banana,
    Peach,
};

 ๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์ด ์ปดํŒŒ์ผ์„ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋งค ํŒŒ์ผ ์ƒ๋‹จ์— enum์„ ์ •์˜ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค.

 

1.1.2) ์ด๋ฆ„์˜ ๋ฒ”์œ„๊ฐ€ ํ•œ์ •๋˜์ง€ ์•Š์Œ

enum Fruit
{
    Apple,
    Banana,
    Peach,
};

enum Food
{
    Banana, // ์œ„์˜ Fruit์˜ Banana์™€ ์ด๋ฆ„ ์ค‘๋ณต!
    Kimchi,
    Meat,
};

 ์œ„์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ์„œ๋กœ ๋‹ค๋ฅธ enum์ด ์ค‘๋ณต๋œ ์ด๋ฆ„์„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ enum class๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „์—๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ๋”ฐ๋กœ ๋‘๊ฑฐ๋‚˜ ์ด๋ฆ„์„ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์ง€์ •ํ•ด์ค˜์•ผ ํ–ˆ๋‹ค.

 

1.1.3) ์•”์‹œ์  ๋ณ€ํ™˜

enum Fruit
{
    Apple,
    Banana,
    Peach,
};

void main()
{
    int a = Apple; // ๋ณ€ํ™˜ ํ—ˆ์šฉ
}

 ๊ธฐ์กด์˜ enum์€ int ๋“ฑ์˜ ๊ฐ’์œผ๋กœ ์ž๋™์ ์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ด๋Ÿฐ ์ ์ด ํŽธ๋ฆฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์‹ค์ˆ˜๋ฅผ ์•ผ๊ธฐํ•˜๊ธฐ ์‰ฝ๋‹ค.

 

 

1.2) enum class

 ์œ„์˜ ์–ธ๊ธ‰ํ•œ enum์˜ ๋ฌธ์ œ์ ์„ enum class๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋‘ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

enum class Fruit
{
    Apple = 1,
    Banana, // ์ด๋ฆ„ ์ค‘๋ณต OK
    Peach,
};

enum class Food; // ์ „๋ฐฉ ์„ ์–ธ OK

void main()
{
    Fruit f = Fruit::Apple;
    Food f2;
    int a = static_cast<int>(f); // ๋ช…์‹œ์  ๋ณ€ํ™˜ OK
}

enum class Food
{
    Banana,
    Kimchi,
    Meat,
};

์ฝ”๋“œ ํ•˜๋‚˜๋กœ ์„ค๋ช…์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

1. ์ „๋ฐฉ์„ ์–ธ์„ ํ†ตํ•ด ํ—ค๋”์™€ CPP ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋“ฑ์˜ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์กŒ๋‹ค.
2. enum class์•ˆ์˜ ์ด๋ฆ„์ด ์ค‘๋ณต๋˜์–ด๋„ ์ƒ๊ด€์—†๋‹ค.
3. static_cast ๋ช…์‹œ์  ๋ณ€ํ™˜์„ ํ†ตํ•ด ์‹ค์ˆ˜ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์—ฌ์ค€๋‹ค.

 

 

 

 

2. ์ฐธ๊ณ  ๋ฐ ์ถœ์ฒ˜


https://blog.seulgi.kim/2015/11/cpp-enum-class.html
https://unikys.tistory.com/376
๋ฐ˜์‘ํ˜•

'Language > C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++11] keyword: static_assert  (1) 2020.07.23
[C++] keyword: static_cast, dynamic_cast, reinterpret_cast, const_cast  (0) 2020.07.23
[C++] keyword: noexcept  (0) 2020.07.23
[C++11] keyword: constexpr  (0) 2020.07.23
[C++] keyword: using  (0) 2020.07.23