반응형
때론 상황에 따라 메소드에 전달하는 인자의 타입을 바꾸고 싶을 때가 있다.
"제너릭 메소드(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 등 다양하게 넣을 수 있음.)
반응형
'프로그래밍 > C#' 카테고리의 다른 글
C# 상속(Inheritance), virtual, override 키워드 정리 (0) | 2024.11.13 |
---|---|
C# 인터페이스(Interface) 정리 (0) | 2024.11.12 |
c# 프로퍼티(property) 간단 사용법 (3) | 2024.11.06 |
c# 파일전송 채팅 프로그램 (3) | 2023.05.02 |
c# 숫자 읽어주는 프로그램 (1) | 2023.05.02 |