프로그래밍/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 등 다양하게 넣을 수 있음.)
반응형