본문 바로가기

Application Dev./C#

C# Generic(제네릭) 사용하기

함수를 작성하다보면 같은 연산을 하지만 자료형이 달라 동일한 작업을 하는 함수를 두개 이상 만들어야 하는 경우가 있습니다. 물론 객체지향 개념에서의 함수 오버로딩(함수 중복)을 이용하면 사용하는데에는 별 문제가 되지 않지만, 그래도 쓰라고 있는 기능이기에...

기본적으로 C++의 Templete 기능과 비슷한 개념입니다.

Generic 사용예제 :

using System;

class Stack<StackType>
{
    private StackType[] stack = new StackType[100];
    private int sp = -1;

    public void Push(StackType element)
    {
        stack[++sp] = element;
    }

    public StackType Pop()
    {
        return stack[sp--];
    }
}

class GenericClassApp
{
    public static void Main()
    {
        Stack<int> stk1 = new Stack<int>();
        Stack<double> stk2 = new Stack<double>();

        // Push
        for (int i = 0; i <= 3; i++)
        {
            stk1.Push(i);
            stk2.Push(i + 0.5);
        }

        // Integer Stack Pop
        Console.Write("정수 스택 :");
        for (int i = 0; i <= 3; i++)
            Console.Write(stk1.Pop() + "\t");

        // Double Stack Pop
        Console.Write("\n실수 스택 :");
        for (int i = 0; i <= 3; i++)
            Console.Write(stk2.Pop() + "\t");

        Console.WriteLine();
    }
}


<StackType>으로 명명한 부분이 원래 변수가 들어가야 할 자리 입니다.
이후에 Stack 객체 생성시 Stack<int> stk1 = new Stack<int>(); 와 같이 사용할 변수 타입을 넣어줍니다.
사용하실 때는 생성하실때 매핑 한 변수 타입으로 사용하시면 됩니다.