[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์ ๊ฑฐ์ ๊ฐ๋ค.