[Rust] ์ ๋๋ฆญ(Generic)
Rust์๋ ์ ๋๋ฆญ์ด ์๋ค.
๋ค๋ฅธ ์ธ์ด๋ค์ฒ๋ผ ํจ์์ด๋ฆ ๋ค์ ๊บฝ์ ๊ดํธ๋ฅผ ์จ์ฃผ๋ฉด ๋๋ค.
์ ๋๋ฆญํ์
๋ช
์ ๊ฐ ํ๋๋ฉด T๋ฅผ ์ฐ๊ณ ํจ์ํ์
ํ๋๋ฉด F๋ฅผ ์ฐ๋๊ฒ ๊ด๋ก๋ค.

์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๊ฐ์ ํ์
์ ๋ง์ถฐ์ T๋ฅผ ๋์ฒดํด๋๊ณ ์คํ์ ํด์ผ...ํ๋๋ฐ ์๋๋ค.

println ๊ฐ๋ณ์ธ์์ ํ์
์ ์ฝ์ด ์์ด์ ๊ทธ๋ ๋ค.
์ ๋ฌ๋ฉด T์ println!์ด ๋ฐ์ ์ ์๋ ๊ฒ ์ฌ์๋ ์์ผ๋๊น... ๋ฐ์ ์ ์๋๊ฑด ์์ ๋ง์๋ฒ๋ฆฌ๋๋ก ์ ์ฝ์ ๊ฑธ์ด์ค์ผ ํ๋ค.

T๋ Display ํธ๋ ์์ ๊ตฌํํ๋ ํ์
์ด์ด์ผ ํ๋ค!๋ ์๋ฏธ๋ค.
์ where์ ์ ์์ผ๋ก ๋น๊ธธ์๋ ์๋ค.

๋ญ๋ก ํ๋๋๋ ๊ทธ๋ฅ ๊ฐ๋
์ฑ๋ฌธ์ ๋ ์ข์๋๋ก ์ฐ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ ์ ๋๋ฆญํ์ ์ ์ฌ๋ฌ๊ฐ์ ํธ๋ ์ ์ ์ฝ์ ๋ถ์ผ ๊ฒฝ์ฐ์๋ +๋ก ์ด์ด์ฃผ๋ฉด ๋๋ค
์ด๊ฒ๋ค์ ๋ฐํ์ผ๋ก ํด์ ์ ๋๋ก ๋ for_each ํจ์๋ฅผ ์ง๋ณผ ์ ์๋ค.

์กฐ๊ธ ๋ณต์กํ๋ค.
์ผ๋จ ๋ฃจํ ๋ด์ ๋ด์ฉ๋ง ๋ณด๋ฉด, ๋ฐฐ์ด์ด๋ ๋ฒกํฐ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๋ฐ์์ ์์๋๋ก ์ ๋ฌ๋ฐ์ ์ฝ๋ฐฑํจ์ func์ ์ ๋ฌํ๋ค๋ ๊ฒ ์ ๋๋ ์ ์ ์๋ค.
๊ณจ์น์ํ ์ ์๋ ๊ฑด where๋ก ๋นผ๋์ ํ์ ์ ์ฝ๋ค์ด๋ค.
C๋ ์ปจํ ์ด๋ ํ์ ์ด๋ฉด์, into_iter()๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ IntoIterator ํธ๋ ์์ ๊ตฌํํด์ผ๋ง ํ๋ค. ๊ทธ๋ฆฌ๊ณ <Item=T>์ C๊ฐ ์๋ ์ปจํ ์ด๋ ์์์ ํ์ ์ธ T๋ฅผ ์ํ ์ ์ฝ์ด๋ค.
๊ทธ๋ฆฌ๊ณ F๋ Fn(T)->()๋ก ์ ์ฝ๋๋ค. C์ ์์ํ์ T ํ๋๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ผ๋ฉฐ, ๋ฆฌํดํ์ ์ด ์๋ ํจ์๋ผ๋ ๋ป์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋ก์ ๊ฐ ์ ๋ฌ๋๋ฉด์ ์์ฑ๋๋ค.
์ ๋๋ฆญ์ ํจ์๋ฟ๋ง์ด ์๋๋ผ ๊ตฌ์กฐ์ฒด,์ด๊ฑฐ์๋ ์ฌ์ฉ๋ ์์๋ค.
์ฐ๋ฆฌ๊ฐ ํํ ์ฐ๋ ๋ฒกํฐ๋ถํฐ๊ฐ ์ ๋๋ฆญ ๊ตฌ์กฐ์ฒด๋ค.
๊ฐ๋จํ๊ฒ ์๋ฌด๊ฑฐ๋ ๋ฎ์ด์์ฐ๋ ๋ํผํ์
์ ์ ์ํด๋ณผ ์ ์๋ค.

๋ฉ์๋๋ ์ผ๋ฐ์ ์ผ๋ก ๊ตฌํํ๋ ค๋ฉด impl
์ด๊ฑฐ๋ ๋น์ทํ๊ฒ ์จ๋จน๋๋ค.
๋ํ์ ์ผ๋ก ๊ฐ์ null์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ์ด๊ฑฐ์ธ ์ต์ ์ ์ด๋ ๊ฒ ๊ตฌํ๋์ด์๋ค.
enum Option
{
ย ใ
คSome(T), //๊ฐ์ด ์์ผ๋ฉด ๊ทธ ๊ฐํ์
T๋ก ๋ด์
ใ
ค None, //์์ผ๋ฉด ์ ๋ด์
}
์ฌ์ฉ๋ฐฉ๋ฒ์ ์ ๋๋ฆญ ํจ์์ ํฌ๊ฒ ๋ค๋ฅผ ๊ฒ ์๋ค.