프로그래밍/C#

C# 제네릭(generic) 간단 사용법

Jaebins 2024. 11. 7. 00:18
반응형

때론 상황에 따라 메소드에 전달하는 인자의 타입을 바꾸고 싶을 때가 있다.

"제너릭 메소드(generic method)" 은 이 고민을 해결해준다.

 

1. 제너릭 메소드

제네릭 메소드는 다음과 같이 정의한다.

class Test
{
    private T TestGeneric<T>(T n1)
    {
        ....
    }
}

리턴 타입을 T로 지정하고, 메소드 이름 뒤에 <T>를 붙이고, 매개변수 타입을 T로 지정한다.

여기서 T는 우리가 직접 정의할 타입이다.

 

실제로 사용을 해보겠다.

class Test
{
    public static void Main(string[] args)
    {
        object rs_1 = GetCode<int>(30); // int 타입으로 정의
        object rs_2 = GetCode<double>(30); // double 타입으로 정의

        Console.WriteLine($"Result_1(\"{rs_1.GetType()}\") : {rs_1}");
        Console.WriteLine($"Result_1(\"{rs_2.GetType()}\") : {rs_2}");
    }

    static T GetCode<T>(T num)
    {
        return num;
    }
}

/* ========== 출력 ===========
Result_1("System.Int32") : 30
Result_1("System.Double") : 30 */

 

2. 제너릭 클래스

다음과 같이 클래스에도 제너릭을 정의할 수 있다. 

class TestGeneric<T>
{
    public T CompareMe<T>(T t1, T t2) where T : IComparable<T> // 제네릭 형식 제약 조건
    {
        if(t1.CompareTo(t2) > 0) return t1;
        else return t2;
    }
}

class Test
{
    public static void Main(string[] args)
    {
        TestGeneric<int> testGenric = new TestGeneric<int>();
        int largeNum = testGenric.CompareMe(5, 4);
        Console.WriteLine($"LargeNum : {largeNum}");
    }
}

// 출력
/* LargeNum : 5 */
제네릭 형식 제약 조건
특정 타입에만 사용될 수 있는 제약 조건을 추가하여 타입간 무결성을 강력히한다.
(해당 코드에서는 IComparable<T> 가 들어갔으나 class, struct 등 다양하게 넣을 수 있음.)

 

반응형