[Zig] enum
enum์ ์ด๊ฑฐํ ๊ฐ์ ์ง์ํ๋ ๋ฉํ๋ฐ์ดํฐ์ฑ ํ์
์ด๋ค.
C/C++์ enum๊ณผ ๋น์ทํ๋ค.
Rust์๋ ๋น์ทํ๊ฐ ์ถ์๋๋ฐ Rust์ enum์ ๋นํ๋ฉด ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๋ค. ๋คํ์ ์ธ ํ์
์ ํํํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ์ ์๋๋ค.
์๋๋ ์์์ ๋ํ๋ด๋ enum์ ์ ์ํ ์์๋ค.
๋ค๋ง ์ฌ๊ธฐ์์๋ enum์ด ๋ฌด์ธ๊ฐ ์๋ฏธ์๋ ๊ฐ์ ๋ํ๋ด์ง๋ ์๋๋ค.
enum์ ํ์ ์ง์
๋ง์ฝ ์ซ์๊ฐ ๋ฑ์ ๋ถ์ฌํ๊ณ ์ถ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ ์ ํ์ ์ ๋ด๋ถ์ ์ง์ ํด์ฃผ๊ณ , ๊ฐ์ ํ ๋นํด์ฃผ๋ฉด ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ํ์
๋ง ์ง์ ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฌ๋ฉด

@intFromEnum ๊ฐ์ ๋ณํํจ์๋ฅผ ํตํด ๊ฐ์ ์ถ์ถํ๊ฑฐ๋ ํ ์ ์๋ค.
๊ทผ๋ฐ ์ด๊ฒ ์ต์ ์ธ๊ฑด๊ฐ? ๋ณ๋ก ๊น๋ํ ๊ตฌ์กฐ ๊ฐ์ง ์๋ค.
C ABI ํธํ
enum์ ๊ธฐ๋ณธ์ ์ผ๋ก c์ ํธํ๋์ง ์๋๋ค.
c abi์ ํธํ๋๊ฒ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด c ์ ์ฉ ์ ์ํ์
์ ๋ฃ์ด์ค์ผ ํ๋ค.

๋ฉ์๋
enum๋ ๊ฐ์ฒด์ฒ๋ผ ๋ค๋ฃฐ ์ ์๋ค. ๊ตฌ์กฐ์ฒด์ฒ๋ผ ๋ด๋ถ ์ ์์ ๋ฉ์๋๋ฅผ ๊ฐ๋ค ๋ฐ์ ์ ์๋ค.

switch
enum์ ํน์ฑ์ switch case๋ฅผ ํตํด ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋์ถฉ ์ด๋ฐ ๋๋์ผ๋ก ์ฌ์ฉ๋ ๊ฒ์ด๋ค.

zig๋ ์ ํ์ค ์ฒดํฌ๊ฐ ๊ฝค ๋นก๋นกํ ํธ์ด๋ผ์,
์ฒ๋ฆฌํ์ง ์์ ์ผ์ด์ค๊ฐ ์์ผ๋ฉด ์ค๋ฅ๋ฅผ ๋์ง๋ค.