[Rust] trait: Associated types

Associated types์€ ํŠธ๋ ˆ์ž‡ ๋‹จ์œ„์— ๋‚ด๋ถ€ ํƒ€์ž…์„ ์ •์˜ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์ผ์ข…์˜ ์ œ๋„ˆ๋ฆญ ๊ธฐ๋Šฅ์ด๋‹ค.
์‚ฌ์‹ค ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋Œ€๋‹จํ•œ๊ฑธ ํ•˜๋Š”๊ฑด ์•„๋‹ˆ๊ณ , ๊ทธ๋ƒฅ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œ์ผœ์ฃผ๋Š” ์ •๋„์˜ ์—ญํ• ๋งŒ ํ•œ๋‹ค.

๋งŒ์•ฝ, ํŠธ๋ ˆ์ž‡์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐ์—ด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ตฌํ˜„์—๋„ ๋ฌธ์ œ๋Š” ์—†๋‹ค.

์ €๊ธฐ์„œ T๋ผ๋Š” ์ œ๋„ˆ๋ฆญ ํƒ€์ž…์€ ์ „๋ฐ˜์ ์œผ๋กœ ๊ฝค ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ฐฐ์—ด ์š”์†Œ์— ๋Œ€ํ•œ ํƒ€์ž…์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋Ÿฌํ•œ ์˜๋ฏธ์—์„œ ์ด๋Ÿฐ๊ฑด Associated types์œผ๋กœ ์ •์˜ํ•˜๋ฉด ์ข€๋” ์ง๊ด€์ ์œผ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.
์ œ๋„ˆ๋ฆญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๊ทธ๊ฑธ Associated type ์ •์˜๋กœ ๋Œ€์น˜ํ–ˆ๋‹ค.

์ €๋Ÿฌ๋ฉด ์ด์ œ type Item์ด๋ผ๋Š” ํƒ€์ž… ์ •์˜๋Š” ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„์ž๊ฐ€ ์žฌ์ •์˜๋ฅผ ํ•ด์•ผํ•˜๋Š” ํƒ€์ž…์ด ๋œ๋‹ค. ์‚ฌ์‹ค ์ œ๋„ˆ๋ฆญ์œผ๋กœ ์ดˆ๊ธฐํ•˜๋˜ ๊ฒƒ๊ณผ ๋ณ„๋กœ ๋‹ค๋ฅด์ง€๋Š” ์•Š๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ๊ตฌํ˜„์ž ์ธก์—์„œ๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋‹ค.

์ข€๋” ๊ดœ์ฐฎ์•„ ๋ณด์ด๋‚˜?
์ทจํ–ฅ์ด ์กฐ๊ธˆ ๊ฐˆ๋ฆด ์ˆ˜๋„ ์žˆ๊ธด ํ•œ๋ฐ, ๋ณดํ†ต ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ์„ ๋งŽ์ด ํ•˜๋Š” ํŽธ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ €๋Ÿฐ๊ฒƒ ์™ธ์—๋„ ๋‚ด๋ถ€์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์“ฐ์ผ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ aliasํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ์—๋„ ๊ดœ์ฐฎ๋‹ค.
์ ํ•ฉํ•œ ์˜ˆ์‹œ๋ผ๊ณ  ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ, ์ธ๋ฑ์Šค์— ์‚ฌ์šฉํ•˜๋Š” usize ํƒ€์ž…์„ ์ผ๋ฐ˜ํ™”ํ•ด์„œ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.



์ž ์กฐ
https://doc.rust-lang.org/rust-by-example/generics/assoc_items/types.html