- ์ ๋ค๋ฆญ์ค(Generics) : int, float, double ๋ฑ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํ์
์ ํ์ ํ์ง ์๊ณ , ์ด ๋ฐ์ดํฐ ํ์
์์ฒด๋ฅผ ํ์
ํ๋ผ๋ฏธํฐ(Type Parameter)๋ก ๋ฐ์๋ค์ด๋๋ก ํ๋ ๊ธฐ๋ฅ
- ์ ๋ค๋ฆญ์ค(Generics)๋ผ๊ณ ํ๋ฉด ์ผ๋ฐํ๋ผ๊ณ ํํ ์๋ ค์ ธ์๋ค.
Generic ๋ฉ์๋ ์ ์ธ ๋ฐฉ์
์ ๊ทผ์ ํ์ ๋ฐํํ์ ๋ฉ์๋ ์ด๋ฆ <ํ์ ๋งค๊ฐ ๋ณ์> (๋งค๊ฐ๋ณ์)
{
...
}
Ex)
void CopyData(int a, int b)
{
b = a; b์ a๋ฅผ ๋ณต์ฌ
}
void CopyData(string a, string b)
{
b = a; b์ ๋ฌธ์์ด a๋ฅผ ๋ณต์ฌ
}
... ๋ค๋ฅธ ํ์
์ ๋ํ CopyData ๋ฉ์๋๋ค...
์์ ๋ฐฉ์์ ๋ฐ์ดํฐ ํ์์ ๋ฐ๋ผ์ ์ฌ๋ฌ ๊ฐ์ ๋ฉ์๋๊ฐ ํ์ํ๋ค. ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ
์์ ๋ฐฉ์์ Generic ๋ฉ์๋๋ก ๋ณํํ๋ฉด
Ex)
void CopyData<T>(T a, T b) // ์ฌ๊ธฐ์ T๋ Type์ ๋ปํจ
{
b = a;
}
์์ ๊ฐ์ ์ฝ๋๊ฐ ๋๋ฉฐ ์ด์๊ฐ์ด ๋ค๋ฅธ ํ์ ๋ค์ ๋ํด์๋ ๊ฐ๋จํ๊ฒ ์ ์ธํ ์ ์๋ค.
Generics ์ฌ์ฉ์์
namespace GenericsEx
{
class Program
{
static void CopyData<T>(T[] a, T[] b)
{
for(int i = 0; i < a.Length; i++)
{
b[i] = a[i];
}
}
static void Main(string[] args)
{
int[] a = { 11, 22, 33, 44, 55 };
int[] b = new int[a.Length];
CopyData<int>(a, b);
foreach(int i in b)
{
Console.Write(i + " ");
}
Console.WriteLine();
string[] aa = { "์ฌ๊ณผ", "๋ฐฐ", "์๋ฐ", "๋ธ๊ธฐ", "๋ณต์ญ์" };
string[] bb = new string[aa.Length];
CopyData<string>(aa, bb);
foreach(string i in bb)
{
Console.Write(i + ' ');
}
}
}
}
Output
11 22 33 44 55
์ฌ๊ณผ ๋ฐฐ ์๋ฐ ๋ธ๊ธฐ ๋ณต์ญ์
์ผ๋ฐํ ํด๋์ค
์ผ๋ฐํ ํด๋์ค ์ ์ธ ๋ฐฉ์
์ผ๋ฐํ ํด๋์ค
๋ ๋๊ฐ์ ๊ธฐ๋ฅ์ ํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋๋ฐ์ดํฐ ํ์์ด ๋ค๋ฅผ ๊ฒฝ์ฐ
์ ์ฌ์ฉ
class ํด๋์ค๋ช
<T>
{
}
class DemoList
{
private int[] array;
public int GetItem(int idx){ return array[idx];}
}
class DemoList2
{
private double[] array;
public double GetItem(int idx){ return array[idx];}
}
... ๋ค๋ฅธ ํ์
์ ๋ํ DemoList ํด๋์ค๋ค...
- ์์ ๊ฐ์ด ๋ฐ์ดํฐํ์
๋ง ๋ค๋ฅธ ํด๋์ค๋ค์
์ผ๋ฐํ ํด๋์ค
๋ก ์์ฑํ๋ฉด ํ๋์ ํด๋์ค๋ง์ผ๋ก ์ปค๋ฒํ ์ ์๋ค.
class DemoList<T>
{
private T[] array;
public T GetItem(int idx){return array[idx]}
}
์ฌ์ฉ๋ฒ :
DemoList<int> demoList1 = new DemoList<int>();
DemoList<double> demoList2 = new DemoList<double>();
- ์ด์ ๊ฐ์ด ํ๋์
์ผ๋ฐํ ํด๋์ค
๋ฅผ ์ฌ์ฉํด ๋ค๋ฅธ ํ์ ๋ค์ ์ปค๋ฒํ ์ ์๋ค.
namespace GenericsEx2
{
class Program
{
class MyList<T>
{
private T[] array;
public MyList()
{
array = new T[4];
}
public T this[int idx]
{
get { return array[idx]; }
set
{
if (idx >= array.Length)
{
Array.Resize<T>(ref array, idx + 1);
Console.WriteLine($"๋ฐฐ์ด ์ฌ์ด์ฆ ์กฐ์ : {array.Length}");
}
array[idx] = value;
}
}
public int Length
{
get { return array.Length; }
}
}
static void Main(string[] args)
{
MyList<string> mylist = new MyList<string>();
mylist[0] = "A";
mylist[1] = "B";
mylist[2] = "C";
mylist[3] = "D";
mylist[4] = "E"; // set์์ ๋ฐฐ์ด ์ฌ์ด์ฆ ์กฐ์ ์ผ ์ผ์ด๋จ.
for(int i = 0; i < mylist.Length; i++)
{
Console.WriteLine(mylist[i]);
}
MyList<int> mylist2 = new MyList<int>();
mylist2[0] = 100;
mylist2[1] = 200;
mylist2[2] = 300;
mylist2[3] = 400;
mylist2[4] = 500;
mylist2[5] = 600;
mylist2[6] = 700;
for (int i = 0; i < mylist2.Length; i++)
{
Console.WriteLine(mylist2[i]);
}
}
}
}
Output
๋ฐฐ์ด ์ฌ์ด์ฆ ์กฐ์ : 5
A
B
C
D
E
๋ฐฐ์ด ์ฌ์ด์ฆ ์กฐ์ : 5
๋ฐฐ์ด ์ฌ์ด์ฆ ์กฐ์ : 6
๋ฐฐ์ด ์ฌ์ด์ฆ ์กฐ์ : 7
100
200
300
400
500
600
700
'๐ป Programming Language > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
27. ์ ๋ค๋ฆญ ์ปฌ๋ ์ (0) | 2022.04.07 |
---|---|
26. ์ ๋ค๋ฆญ์ค(Generics) ํ์ ์ ์ฝ (0) | 2022.04.07 |
24. yield ํค์๋ (0) | 2022.04.07 |
23. ์ปฌ๋ ์ ์ด๊ธฐํ, ์ธ๋ฑ์ (0) | 2022.04.07 |
22. Queue, Stack, Hashtable ์ฌ์ฉ (0) | 2022.04.07 |