1. 제네릭 메소드
저어어어말 예전에
Swap함수를 짠적이 있다.
class Program
{
static void MySwap( ref int a,ref int b)
{
int temp = a;
a = b;
b = temp;
}
static void Main(string[] args)
{
int a = 10;
int b = 20;
MySwap(ref a, ref b);
Console.WriteLine("{0},{1}",a,b);
}
}
요런식으로 짯다.
근데 해당 함수는 int만 가능하다.
여기에 double이나 기타등등 까지 다 스왑하고 싶다면..
static void MySwap( ref int a,ref int b)
{
int temp = a;
a = b;
b = temp;
}
static void MySwap(ref double a, ref double b)
{
double temp = a;
a = b;
b = temp;
}
뭐 이런식으로 함수 오버로딩하여 스왑함수를 만들것이다.
그런데 이런 스왑 함수는 자료형만 다르고 완전하게 동일한 함수이다.
그럼에도 불구하고 다른 자료형에대한 swap이 필요하면 또 만들어줘야한다.
이럴때 사용되는것이 제네릭이다.
class Program
{
static void MySwap<T>(ref T t1, ref T t2)
{
T temp = t1;
t1 = t2;
t2 = temp;
}
static void Main(string[] args)
{
int a = 10;
int b = 20;
MySwap(ref a , ref b );
Console.WriteLine("{0},{1}",a,b);
}
}
}
<제네릭타입> 을 통하여 써주면 이제부터 그 제네릭타입을 일종의 어떤 자료형으로 보고 사용가능하며
그 자료형은 컴파일타임에 알맞게 코드가 생성된다.
여기서는 <T> 를 이용했으면 int형을 사용하여 T가 int로 전부 바뀌어진 MySwap코드가 컴파일시간에 만들어진것이다.
MySwap(ref a , ref b );
MySwap<int>(ref a, ref b);
이런식으로 <int>형이라고 명시적으로 표현해주어도 된다.
이렇게 함수에적용하는게 제네릭 메소드라면
이걸 클래스에 적용하면 제네릭 클래스이다.
2.제네릭 클래스
class GenericClass<T>
{
T t;
public GenericClass(T t)
{
this.t = t;
}
public T GetT()
{
return t;
}
}
class Program
{
static void Main(string[] args)
{
GenericClass<int> a = new GenericClass<int>(10);
GenericClass<string> b = new GenericClass<string>("10");
}
}
걍뭐 이런식으로 이용한다 문법은 위와 동일하고..
왜쓰냐고 하면 ... 다음 컬랙션에서 배운다.
ps. C++ 의 템플릿과 유사한 개념이다. 다만 C++의 템플릿에 비해 훨씬 안전한데 C++ 개발자 입장에서 사용하기에는 무지막지하게 짜증난다.. 제한이 많다. 당장 +,-,*,- 를 사용할수없고 뭐 기타등등..
728x90
'교육 노트 > C# 강의' 카테고리의 다른 글
[C# 때려잡기] C# 강의 36. 제네릭 컬렉션 (0) | 2018.12.08 |
---|---|
[C# 때려잡기] C# 강의 35. 컬렉션 (0) | 2018.12.08 |
[C# 때려잡기] C# 강의 33. 클래스와 구조체 (0) | 2018.12.08 |
[C# 때려잡기] C# 강의 32. 추상클래스와 인터페이스 (0) | 2018.12.08 |
[C# 때려잡기] C# 강의 31. 가상함수, 정적 바인딩, 동적바인딩 (2) | 2018.12.08 |