[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