22. [C++] ํ…œํ”Œ๋ฆฟ (Template)

2019. 6. 18. 06:01ใ†PROGRAMMING/C & C++

 

ํ…œํ”Œ๋ฆฟ (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์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค"๋ผ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด

ํ—ค๋”ํŒŒ์ผ ์•ˆ์— ์„ ์–ธ๊ณผ ์ •์˜๋ฅผ ๊ฐ™์ด ์ž‘์„ฑํ•ด์ค€๋‹ค.