[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๋Š” ์‹ ํƒ์Šค ์ฒดํฌ๊ฐ€ ๊ฝค ๋นก๋นกํ•œ ํŽธ์ด๋ผ์„œ,

์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์€ ์ผ€์ด์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋˜์ง„๋‹ค.



์ฐธ์กฐ
https://ziglang.org/documentation/0.11.0/#toc-enum