[Rust] ์ œ๋„ˆ๋ฆญ(Generic)

Rust์—๋„ ์ œ๋„ˆ๋ฆญ์ด ์žˆ๋‹ค.

๋‹ค๋ฅธ ์–ธ์–ด๋“ค์ฒ˜๋Ÿผ ํ•จ์ˆ˜์ด๋ฆ„ ๋’ค์— ๊บฝ์‡ ๊ด„ํ˜ธ๋ฅผ ์จ์ฃผ๋ฉด ๋œ๋‹ค.

์ œ๋„ˆ๋ฆญํƒ€์ž…๋ช…์€ ๊ฐ’ ํ•˜๋‚˜๋ฉด T๋ฅผ ์“ฐ๊ณ  ํ•จ์ˆ˜ํƒ€์ž… ํ•˜๋‚˜๋ฉด F๋ฅผ ์“ฐ๋Š”๊ฒŒ ๊ด€๋ก€๋‹ค. image

image ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ๊ฐ์˜ ํƒ€์ž…์— ๋งž์ถฐ์„œ T๋ฅผ ๋Œ€์ฒดํ•ด๋†“๊ณ  ์‹คํ–‰์„ ํ•ด์•ผ...ํ•˜๋Š”๋ฐ ์•ˆ๋œ๋‹ค.


image

image println ๊ฐ€๋ณ€์ธ์ž์— ํƒ€์ž…์ œ์•ฝ์ด ์žˆ์–ด์„œ ๊ทธ๋ ‡๋‹ค.

์ €๋Ÿฌ๋ฉด T์— println!์ด ๋ฐ›์„ ์ˆ˜ ์—†๋Š” ๊ฒŒ ์˜ฌ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ๊นŒ... ๋ฐ›์„ ์ˆ˜ ์—†๋Š”๊ฑด ์•„์˜ˆ ๋ง‰์•„๋ฒ„๋ฆฌ๋„๋ก ์ œ์•ฝ์„ ๊ฑธ์–ด์ค˜์•ผ ํ•œ๋‹ค.



image

image T๋Š” Display ํŠธ๋ ˆ์ž‡์„ ๊ตฌํ˜„ํ•˜๋Š” ํƒ€์ž…์ด์–ด์•ผ ํ•œ๋‹ค!๋Š” ์˜๋ฏธ๋‹ค.

์ € where์ ˆ์„ ์•ž์œผ๋กœ ๋‹น๊ธธ์ˆ˜๋„ ์žˆ๋‹ค.


image

image ๋ญ˜๋กœ ํ•˜๋А๋ƒ๋Š” ๊ทธ๋ƒฅ ๊ฐ€๋…์„ฑ๋ฌธ์ œ๋‹ˆ ์ข‹์„๋Œ€๋กœ ์“ฐ๋ฉด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•œ ์ œ๋„ˆ๋ฆญํƒ€์ž…์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŠธ๋ ˆ์ž‡ ์ œ์•ฝ์„ ๋ถ™์ผ ๊ฒฝ์šฐ์—๋Š” +๋กœ ์ด์–ด์ฃผ๋ฉด ๋œ๋‹ค

์ด๊ฒƒ๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•ด์„œ ์ œ๋Œ€๋กœ ๋œ for_each ํ•จ์ˆ˜๋ฅผ ์งœ๋ณผ ์ˆ˜ ์žˆ๋‹ค. image

image ์กฐ๊ธˆ ๋ณต์žกํ•˜๋‹ค.

์ผ๋‹จ ๋ฃจํ”„ ๋‚ด์˜ ๋‚ด์šฉ๋งŒ ๋ณด๋ฉด, ๋ฐฐ์—ด์ด๋‚˜ ๋ฒกํ„ฐ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐ›์•„์„œ ์ˆœ์„œ๋Œ€๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ฝœ๋ฐฑํ•จ์ˆ˜ func์— ์ „๋‹ฌํ•œ๋‹ค๋Š” ๊ฒƒ ์ •๋„๋Š” ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ณจ์น˜์•„ํ”Œ ์ˆ˜ ์žˆ๋Š” ๊ฑด where๋กœ ๋นผ๋†“์€ ํƒ€์ž… ์ œ์•ฝ๋“ค์ด๋‹ค.

C๋Š” ์ปจํ…Œ์ด๋„ˆ ํƒ€์ž…์ด๋ฉด์„œ, into_iter()๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” IntoIterator ํŠธ๋ ˆ์ž‡์„ ๊ตฌํ˜„ํ•ด์•ผ๋งŒ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  <Item=T>์€ C๊ฐ€ ์•„๋‹Œ ์ปจํ…Œ์ด๋„ˆ ์š”์†Œ์˜ ํƒ€์ž…์ธ T๋ฅผ ์œ„ํ•œ ์ œ์•ฝ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  F๋Š” Fn(T)->()๋กœ ์ œ์•ฝ๋œ๋‹ค. C์˜ ์š”์†Œํƒ€์ž… T ํ•˜๋‚˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์œผ๋ฉฐ, ๋ฆฌํ„ดํƒ€์ž…์ด ์—†๋Š” ํ•จ์ˆ˜๋ผ๋Š” ๋œป์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํด๋กœ์ €๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด์„œ ์™„์„ฑ๋œ๋‹ค.


์ œ๋„ˆ๋ฆญ์€ ํ•จ์ˆ˜๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ์ฒด,์—ด๊ฑฐ์—๋„ ์‚ฌ์šฉ๋ ์ˆ˜์žˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์“ฐ๋Š” ๋ฒกํ„ฐ๋ถ€ํ„ฐ๊ฐ€ ์ œ๋„ˆ๋ฆญ ๊ตฌ์กฐ์ฒด๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์•„๋ฌด๊ฑฐ๋‚˜ ๋ฎ์–ด์”Œ์šฐ๋Š” ๋ž˜ํผํƒ€์ž…์„ ์ •์˜ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. image

image ๋ฉ”์†Œ๋“œ๋„ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด impl์ฒ˜๋Ÿผ ํƒ€์ž…ํŒŒ๋ผ๋ฏธํ„ฐ ๊ทธ๋Œ€๋กœ ๋ถ™์ด๋ฉด ๋œ๋‹ค.


์—ด๊ฑฐ๋„ ๋น„์Šทํ•˜๊ฒŒ ์จ๋จน๋Š”๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ ๊ฐ’์˜ null์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋Š” ์—ด๊ฑฐ์ธ ์˜ต์…˜์€ ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.

enum Option
{
ย ใ…คSome(T), //๊ฐ’์ด ์žˆ์œผ๋ฉด ๊ทธ ๊ฐ’ํƒ€์ž… T๋กœ ๋‹ด์Œ
ใ…ค None, //์—†์œผ๋ฉด ์•ˆ ๋‹ด์Œ
}

์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ์ œ๋„ˆ๋ฆญ ํ•จ์ˆ˜์™€ ํฌ๊ฒŒ ๋‹ค๋ฅผ ๊ฒƒ ์—†๋‹ค.