22. [C++] ํ ํ๋ฆฟ (Template)
ํ ํ๋ฆฟ (Template)
์๋ฃํ์ ์ฝ๋งค์ด์ง ์๊ณ ๋ชจ๋ ํธํํธ๋๋ก
ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ฒ ๋์์ฃผ๋ C++ ๊ธฐ๋ฅ.
1. ํจ์ ํ ํ๋ฆฟ
ํจ์ ํ ํ๋ฆฟ์ ํจ์๋ฅผ ๋ง๋ค์ด ๋ธ๋ค.
ํจ์์ ๊ธฐ๋ฅ์ ๊ฒฐ์ ๋์ด ์์ง๋ง, ์๋ฃํ์ ๊ฒฐ์ ๋์ด์์ง ์๋ค.
๋์ค์ T๋ฅผ ๋์ ํด์ ์ค์ ์๋ฃํ์ ๊ฒฐ์ ํด์ผํ๋ค.
(typename์ ๋์ ํด์ class๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
T๋ผ๋ ๋ฌธ์ ๋์ ๋ค๋ฅธ ๋ฌธ์๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.)
์์ ๋ณด์ธ ๋ค์์ ์ ์๋ฅผ ๊ฐ๋ฆฌ์ผ
'ํจ์ ํ ํ๋ฆฟ(funtion template)'์ด๋ผ ํ๋ค.
๋ฐ๋ฉด, ์์ ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ์ปดํ์ผ๋ฌ๊ฐ ๋ง๋ค์ด ๋ด๋ ํจ์๋ค์
'ํ ํ๋ฆฟ ํจ์(template funtion)'์ด๋ผ ํ๋ค.
int Add<int>(int a, int b)
{
return a+b;
}
2. ๋ ๊ฐ ์ด์์ typename ์ง์
ํ ํ๋ฆฟ์ ์ ์์๋ ๋ค์ํ ์๋ฃํ์ด ์ ์ธ์ด ๊ฐ๋ฅํ ๋ฟ๋ง ์๋๋ผ,
๋ ์ด์์ type์ ๋ํด์ ํ ํ๋ฆฟ์ ์ ์ธํ ์ ์๋ค.
3. ํจ์ ํ ํ๋ฆฟ์ ํน์ํ(Specialization)
์ํฉ์ ๋ฐ๋ผ์ ํ ํ๋ฆฟ ํจ์์ ๊ตฌ์ฑ๋ฐฉ๋ฒ์ ์์ธ๋ฅผ ๋ ํ์๊ฐ ์๋ค.
์ด ๋ ์ฌ์ฉ๋๋ ๊ฒ์ด 'ํจ์ ํ ํ๋ฆฟ์ ํน์ํ'์ด๋ค.
ํฌ๊ธฐ ๋น๊ต ํจ์๋ฅผ ์๋ก ๋ค๋ฉด,
๋ฌธ์์ด์ ๊ฒฝ์ฐ์๋ ๋จ์ ์ฃผ์ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๊ฒ ๋๊ธฐ ๋๋ฌธ์
๋ฐ๋ก ํน์ํ๋ฅผ ํ์ฌ ์์ฑํด์ค ํ์๊ฐ ์๋ค.
4. ํด๋์ค ํ ํ๋ฆฟ
ํด๋์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ํ ํ๋ฆฟํ ํ ์ ์๋ค.
์ธ์ ๋ชฉ๋ก์ ๋ณ์๋ฅผ ์ ์ธํ ์๋ ์๋ค.
ํด๋์ค ํ ํ๋ฆฟ๋ ๋ฉค๋ฒํจ์๋ฅผ ์ ์ํ ์ ์๋ค.
"ํด๋์ค ํ ํ๋ฆฟ OOOO์ ๋ํ ์ ๋ณด๊ฐ ๋ถ์กฑํฉ๋๋ค"๋ผ๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด
ํค๋ํ์ผ ์์ ์ ์ธ๊ณผ ์ ์๋ฅผ ๊ฐ์ด ์์ฑํด์ค๋ค.