peewoong 2024. 5. 8. 18:40

1. ํ…œํ”Œ๋ฆฟ

  • 'ํ˜•ํ‹€'์ด๋ผ๋Š” ์˜๋ฏธ, ๋ถ•์–ด๋นต ํ‹€ ๊ฐ™์€ ๊ฑฐ
  • ์žฌ๋ฃŒ๋งŒ ๊ฐ€์ง€๊ณ  ๋˜‘๊ฐ™์€ ๋ชจ์–‘์œผ๋กœ ์ฐ์–ด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋„ฃ๋Š” ์žฌ๋ฃŒ์— ๋”ฐ๋ผ ๋‚ด์šฉ๋ฌผ์€ ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ผ์ง„๋‹ค.
  • ๊ธฐ๋Šฅ์€ ์ด๋ฏธ ๊ฒฐ์ •๋˜์–ด ์žˆ์œผ๋‚˜, ์ž๋ฃŒํ˜•์ด ์ •ํ•ด์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ : ํ•จ์ˆ˜๋ฅผ ์ฐ์–ด๋‚ด๋Š” ํ‹€
  • ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ : ํด๋ž˜์Šค๋ฅผ ์ฐ์–ด๋‚ด๋Š” ํ‹€

 

2. ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ

#include <iostream>

using namespace std;

template<typename T>
void Swap(T& num1, T& num2)
{
	T temp = num1;
	num1 = num2;
	num2 = temp;
}

int main()
{
	int num1=10, num2=40;
	cout << "before, num1: " << num1 << ", num2: " << num2 << endl;
	Swap(num1, num2);
	cout << "after, num1: " << num1 << ", num2: " << num2 << endl;

	double num3=15.6, num4=14.44;
	cout << "before, num1: " << num3 << ", num2: " << num4 << endl;
	Swap(num3, num4);
	cout << "after, num1: " << num3 << ", num2: " << num4 << endl;
	return 0;
}
before, num1: 10, num2: 40
after, num1: 40, num2: 10
before, num1: 15.6, num2: 14.44
after, num1: 14.44, num2: 15.6
๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . .

 

T๋ฅผ ์ด์šฉํ•˜์—ฌ, ์•„๋ž˜์— ์œ„์น˜ํ•œ ํ•จ์ˆ˜๋ฅผ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ •์˜ํ•˜๊ฒ ๋‹ค๋Š” ๋œป

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ์ธ์ž์˜ ์ž๋ฃŒํ˜•์„ ๋ณด๊ณ  T์˜ ํƒ€์ž…์„ ์œ ์ถ”ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…์‹œ์ ์œผ๋กœ ํ•ด์„ํ•˜๋„๋ก ํƒ€์ž…์„ ์ง€์ •ํ•ด์ฃผ์–ด๋„ ๋œ๋‹ค.

int num1=10, num2=40;
cout << "before, num1: " << num1 << ", num2: " << num2 << endl;
Swap<int>(num1, num2);
cout << "after, num1: " << num1 << ", num2: " << num2 << endl;

double num3=15.6, num4=14.44;
cout << "before, num1: " << num3 << ", num2: " << num4 << endl;
Swap<double>(num3, num4);
cout << "after, num1: " << num3 << ", num2: " << num4 << endl;

์ฐธ๊ณ ๋กœ, ํ…œํ”Œ๋ฆฟ์„ ์ •์˜ํ•  ๋•Œ ๊ผญ T๋ผ๋Š” ์ด๋ฆ„์ด ์•„๋‹ˆ์—ฌ๋„ ๊ดœ์ฐฎ๋‹ค. T๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์“ฐ๋Š” ์ด๋ฆ„์ด๋‹ค.

๋ง๋ถ™์—ฌ์„œ typename์„ class๋กœ ์จ๋„ ๊ดœ์ฐฎ๋‹ค. ์ฆ‰, typename T = class T ๊ฐ™์€ ์˜๋ฏธ

 

3. ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ

#include <iostream>

using namespace std;

template <typename T>
class Data 
{
private:
	T data;
public:
	Data(T data) : data(data) { }
	void ShowInfo() {
		cout << data << endl;
	}
};

int main()
{
	Data<int> data1(50);
	data1.ShowInfo();

	Data<char> data2('A');
	data2.ShowInfo();

	Data<double> data3(24.377);
	data3.ShowInfo();
}
50
A
24.377
๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . .

ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์—์„œ๋Š” ์ž๋ฃŒํ˜• ์ •๋ณด๋ฅผ ์ƒ๋žตํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

๐ŸŒŸ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ๊ณผ ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜, ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ๊ณผ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค

  • ํ•จ์ˆ˜/ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ : ํ•จ์ˆ˜/ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ…œํ”Œ๋ฆฟ
  • ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜/ํด๋ž˜์Šค : ํ…œํ”Œ๋ฆฟ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜/ํด๋ž˜์Šค
    • ๊ฐ•์กฐํ•˜๋Š” ๋ถ€๋ถ„์ด ๋‹ค๋ฅด๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

https://blog.hexabrain.net/178