[Rust] lifetime: PhantomData
PhantomData์ ๋นก๋นกํ ๋ผ์ดํํ์ ๊ฒ์ฌ๋ฅผ ํํผ/๋ณด์ํ๊ธฐ ์ํด ์ ๊ณต๋๋ ํน์ํ empty ๋ง์ปค ํ์
์ด๋ค.
์ด๊ฑธ ์ด๋ค๊ณ ๋ฑํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋จน๊ฑฐ๋ ๋๋ ค์ง์ง๋ ์๊ณ , ๊ทธ๋ฅ ํํธ๋ง ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
๋ค๋ฅธ ํฌ์คํธ๋ค์ ๋ณด๋๊น Vec ํ์
์ ์๋ก ๋ค๋ฉด์ Drop์ ํ์ํ ์ด์ฉ๊ณ ์ ์ฉ๊ณ ... ํ๋ฉด์ ์ค๋ช
ํ๋๋ฐ, ์ด๊ฑด 2016๋
์ฏค ์ดํ๋ก๋ ์ ํจํ์ง ์์ ์ค๋ช
์ด๋ค.
๊ทธ๋ฐ๊ฑด ํ์ํ์ง ์๋ค. ๊ทธ๋ฅ ์์์ ์ dropํด์ค๋ค.
์ด๊ฒ ํ์ํ ๊ฒฝ์ฐ๋ ํน์ ํ์
์ ๋ํด ์์์ ์ผ๋ก ์์ ๊ถ์ ๊ฐ์ง๋ ํ๋ก์ ํ์
์ ๊ตฌํํ ๋๋ค.
๊ฐ์ฅ ๋ํ์ ์ธ ๊ฒ์ iterator ๊ฐ์ ํ์
์ด๋ผ๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค.
์์
์. ๋์ ๋ฐฐ์ด๊ณผ ๋์ ๋ฐฐ์ด์ ํน์ ์ง์ ์ ๊ฐ๋ฆฌํค๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํ๊ฒ ๋ค.
๋ฐฐ์ด์ ์ด๋ ๊ฒ ๊ตฌํํ๊ณ

์ดํฐ๋ ์ดํฐ๋ ์ด๋ ๊ฒ ๊ตฌํํ๋ค.

ํน์ ์ด์ํ ์ ์ด ๋ณด์ด๋๊ฐ?
์๋ณด์ธ๋ค๊ณ ? ๊ทธ๋ผ ์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ด๋ค๊ฐ?
๋ฐฐ์ด์ ๋ด๋ถ ์ค์ฝํ์ ๊ฐ๋ฌ๋์ ๊ทธ ์์์ ์ด๊ณ ์ฃฝ๋๋ฐ, iterator๋ ๋ฐ๊นฅ ์ค์ฝํ๊น์ง ๋ฆฌํด๋ผ์ ์ด์์๋ ์ฒ์ ํ๊ณ ์๋ค.
์ด๋ฌ๋ฉด iterator๊ฐ ์ด๋ฏธ ์ฃฝ์ ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์ด์ํ ์ํฉ์ด ๋ฐ์ํ ์๊ฐ ์๋ค.
๋ผ์ดํํ์ ์ ํํ๊ธฐ
์ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ๋ถํฐ ๋ง์ผ๋ ค๋ฉด, ์ iterator์ ๋ผ์ดํํ์์ ์์ฑ ์์ ์ ๊ณ ์ ํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ค๋ฉด ์ฐ์ Iterator ๊ฐ์ฒด์๋ ๋ผ์ดํํ์์ ๋งํนํด์ผ ํ๋๋ฐ...
์? ๋ผ์ดํํ์์ ์ถ๊ฐํ๊ธด ํ๋๋ฐ, ํ๋์ ํด๋น๋๋๊ฒ ์์ผ๋ ์๋ฌ๊ฐ ๋๋ค.
๊ทผ๋ฐ ๊ทธ๋ ๋ค๊ณ raw pointer์ ๋ผ์ดํํ์์ ๋ฌ ์๋ ์๊ณ ...
PhantomData๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ฐ๋ก ์ด๋๋ค.
๊ทธ๋ฅ ๋๋นต์ด๋ค.
๊ทธ๋ผ ์ปดํ์ผ์ด ๋ ๊ฒ์ด๋ค.
iterator ์์ฑ ํจ์์๋ ์ด๋ฐ์์ผ๋ก ๋ผ์ดํํ์์ ๋ฃ์ด์ฃผ๋ฉด

์ง์.
์ด์ ์ ๊ฒ์ฌํด์ค๋ค.
๋์ถฉ ์ด๋ฐ์์ผ๋ก ์จ๋จน์ผ๋ฉด ๋๋ค.
์ฐธ์กฐ
https://doc.rust-lang.org/std/marker/struct.PhantomData.html
https://stackoverflow.com/questions/41533508/what-is-the-phantomdata-actually-doing-in-the-implementation-of-vec/42720413
https://doc.rust-lang.org/nomicon/phantom-data.html