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

2024. 5. 8. 18:40ยท ๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๐ŸŽ  C++
๋ชฉ์ฐจ
  1. 1. ํ…œํ”Œ๋ฆฟ
  2. 2. ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ
  3. 3. ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ
  4. ๐ŸŒŸ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ๊ณผ ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜, ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ๊ณผ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค

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

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ > ๐ŸŽ  C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++] String ํด๋ž˜์Šค ๋””์ž์ธ  (0) 2024.05.06
[C++] ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ  (0) 2024.04.30
[C++] ๊ฐ€์ƒ์˜ ์›๋ฆฌ์™€ ๋‹ค์ค‘์ƒ์†  (0) 2024.04.29
[C++] ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ | ๊ฐ€์ƒํ•จ์ˆ˜(virtual function) | ์ฐธ์กฐ์ž  (1) 2024.04.26
[C++] ์ƒ์†  (0) 2024.04.23
  1. 1. ํ…œํ”Œ๋ฆฟ
  2. 2. ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ
  3. 3. ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ
  4. ๐ŸŒŸ ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ๊ณผ ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜, ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ๊ณผ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค
'๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๐ŸŽ  C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C++] String ํด๋ž˜์Šค ๋””์ž์ธ
  • [C++] ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
  • [C++] ๊ฐ€์ƒ์˜ ์›๋ฆฌ์™€ ๋‹ค์ค‘์ƒ์†
  • [C++] ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ | ๊ฐ€์ƒํ•จ์ˆ˜(virtual function) | ์ฐธ์กฐ์ž
peewoong
peewoong
peewoong
peewoong.log
peewoong
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ๐Ÿ™‚ Info
    • ๐ŸŽฎ ๊ฒŒ์ž„ ๊ด€๋ จ ๊ฐœ๋…
    • ๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • ๐ŸŽญ C
      • ๐ŸŽ  C++
      • ๐Ÿ• C#
      • โœจ ์ž๋ฃŒ๊ตฌ์กฐ
      • ๐ŸŽ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • ๐Ÿ”ข ์ˆ˜ํ•™
      • ๐ŸŽจ ๊ทธ๋ž˜ํ”ฝ์Šค
    • โš™๏ธ ์—”์ง„
      • ๐Ÿง€ VS
      • ๐Ÿค ์œ ๋‹ˆํ‹ฐ
      • ๐Ÿซ ์–ธ๋ฆฌ์–ผ
      • ๐Ÿน DirectX
      • ๐Ÿฆฅ error
    • ๐Ÿ“ฝ๏ธ ํ”„๋กœ์ ํŠธ
    • ๐Ÿง ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.0
peewoong
[C++] ํ…œํ”Œ๋ฆฟ(Template)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.