[Zig] union

[์›๋ณธ ๋งํฌ]

union์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ํƒ€์ž…์„ ํ•˜๋‚˜์˜ ์ €์žฅ๊ณต๊ฐ„์— ์šฐ๊ฒจ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ณต๋ณ€ ํƒ€์ž…์ด๋‹ค.
C์˜ union๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•˜๋‹ค.




๊ธฐ๋ณธ ํ˜•ํƒœ

๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ ํ˜•ํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์—ฌ๋Ÿฌ๊ฐœ์˜ ํƒ€์ž… ํ•„๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด ํƒ€์ž…์€ i64์ผ์ˆ˜๋„ ์žˆ๊ณ , f64์ผ์ˆ˜๋„ ์žˆ๊ณ , bool์ผ์ˆ˜๋„ ์žˆ๋Š” ํƒ€์ž…์ด ๋œ๋‹ค.
๊ทธ๋Œ€์‹  ์ƒํƒœ๋Š” ํ•ญ์ƒ ํ•˜๋‚˜๋‹ค.

์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋‹ค.

union ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ• ๋•Œ๋Š” ํƒ€์ž…ํ•„๋“œ๋ฅผ ์ง€์ •ํ•ด์„œ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ , ๊บผ๋‚ผ๋•Œ๋„ ํ•„๋“œ๋ช…์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.


์—ฌ๊ธฐ์„œ C์˜ union๊ณผ ๋‹ค๋ฅธ ์ ์€, safety๋ฅผ ์–ด๋А์ •๋„ ๋ณด์žฅํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ’์ด int๋กœ ์ €์žฅ๋œ ์ƒํƒœ์—์„œ๋Š” float๋กœ ๊บผ๋‚ด์˜ฌ ์ˆ˜ ์—†๋‹ค. ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.




Tagged Union

๊ทผ๋ฐ ์ € union์„ ์ƒ์งœ๋กœ ์“ฐ๋ ค๋ฉด ์กฐ๊ฑด์ ˆ์„ ๊ฑธ๊ธฐ๋„ ์–ด๋ ต๊ณ  ์‘์šฉํ•˜๊ธฐ๊ฐ€ ์ƒ๋‹นํžˆ ๋ถˆํŽธํ•œ ํŽธ์ด๋‹ค.
Zig์—์„œ ๊ถŒ์žฅํ•˜๋Š” ์‚ฌ์šฉ ํ˜•ํƒœ๋Š” ํƒœ๊ทธ๋ฅผ ๋‹ฌ๊ณ , ๊ทธ๊ฑธ ํ†ตํ•ด์„œ switch ๋‹ค์ค‘๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๊ฒƒ๋„ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์“ธ๋ฐ์—†์ด ๋ณต์žกํ•˜๊ธด ํ•˜๋‹ค. ์™œ ์ด๋ ‡๊ฒŒ ์„ค๊ณ„ํ•œ๊ฑฐ์ง€?

๋จผ์ € union ํ•„๋“œ์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ Tag enum์„ ์ •์˜ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฑธ union ์ •์˜์— ์šฐ๊ฒจ๋„ฃ์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ € 2๊ฐ€์ง€๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
๊ฐ union variant๋“ค์ด ์ง€์ •ํ•œ Tag๋กœ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„์ด ๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ์ด๋Ÿฐ ๋А๋‚Œ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

union ๊ฐ’์ด tag ๊ฐ’์œผ๋กœ ํŒจํ„ด๋งค์นญ์ด ๋˜๊ณ , ๊ทธ๊ฑธ ํ†ตํ•ด ๊ฐ’์„ ๊บผ๋‚ด์™€์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฐ–๋‹ค์“ธ ์ˆ˜ ์žˆ๋‹ค.

๊ทผ๋ฐ ์–ด๋–ป๊ฒŒ ๋ด๋„ Rust enum์˜ ํ•˜์œ„ํ˜ธํ™˜์ด๋‹ค. ๋ถˆํŽธํ•˜๊ธฐ๋งŒ ํ•˜๋‹ค.




๋ฉ”์„œ๋“œ

union๋„ enum, struct์™€ ๋™์ผํ•˜๊ฒŒ ๋ฉ”์„œ๋“œ ๋“ฑ์„ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋ญ˜ ๊ณ„์† ๊ตฌ๊ฒจ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

๋™์ž‘๋ฐฉ์‹๋„ struct์™€ ๊ฑฐ์˜ ๊ฐ™๋‹ค.


์ฐธ์กฐ
https://ziglang.org/documentation/master/#union