25. ์ œ๋„ค๋ฆญ์Šค(Generics)

2022. 4. 7. 09:34ยท๐Ÿ’ป Programming Language/C#
  • ์ œ๋„ค๋ฆญ์Šค(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
'๐Ÿ’ป Programming Language/C#' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 27. ์ œ๋„ค๋ฆญ ์ปฌ๋ ‰์…˜
  • 26. ์ œ๋„ค๋ฆญ์Šค(Generics) ํƒ€์ž… ์ œ์•ฝ
  • 24. yield ํ‚ค์›Œ๋“œ
  • 23. ์ปฌ๋ ‰์…˜ ์ดˆ๊ธฐํ™”, ์ธ๋ฑ์„œ
S.Honey
S.Honey
  • S.Honey
    Algo ์“ฐ์ž
    S.Honey
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (123)
      • ํšŒ๊ณ  (0)
        • ์ทจ์—… ํ›„ ํšŒ๊ณ  (0)
      • ๐Ÿƒ Frontend Road-Map (2)
        • ๐Ÿšฉ Summary (1)
        • ๐Ÿ“š Road-Map Contents (1)
        • ๐ŸŸง HTML (0)
        • ๐ŸŸฆ CSS (0)
        • ๐ŸŸจ Javascript (0)
        • โฌœ React (0)
        • ๐ŸŸช Redux (0)
      • Backend (0)
        • QueryDSL (0)
      • ๐Ÿ’ป Programming Language (54)
        • C# (51)
        • Flutter-Dart (3)
        • Java (0)
      • ๐Ÿ“š Computer Science (4)
        • Algorithms (4)
        • Database (0)
        • Network (0)
        • Operating System(OS) (0)
      • ๐Ÿ’ฏ CodingTest (60)
        • BaekJoon (22)
        • Programmers (34)
        • CodeTree (4)
      • โœ’๏ธ Design Pattern (1)
      • ๐Ÿฑ Etc (2)
        • Jenkins Plugin ์ œ์ž‘๊ธฐ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

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

      • ๐Ÿ“– ๊ณต๋ถ€ ์ฐธ๊ณ  ๊ต์žฌ ๋ฐ ์ž๋ฃŒ
    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      ์“ฐ์…จ์ž–์•„
      ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      DART
      JavaScript
      Flutter
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      ๋ฐฑ์ค€
      c#
      BFS
      programmers
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      Java
      BAEKJOON
      ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
      JS
      ํŒŒ์ด์ฌ
      ๊ตฌํ˜„
      ์‚ผ์„ฑsw์—ญํ…Œ
      ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ์Šคํ„ฐ๋””
      ์‹œ๋ฎฌ๋ ˆ์ด์…˜
      ์ž๋ฃŒ๊ตฌ์กฐ
      sort
      ์นด์นด์˜ค
      ์ด์ง„ํƒ์ƒ‰
      DP
      ์ฝ”๋“œํŠธ๋ฆฌ
      ๋ฌธ์ž์—ด ํŒŒ์‹ฑ
      Algorithm
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
    S.Honey
    25. ์ œ๋„ค๋ฆญ์Šค(Generics)
    ์ƒ๋‹จ์œผ๋กœ

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