제네릭은 클래스, 인터페이스, 메서드에서 데이터 타입을 일반화하여 다양한 타입을 처리할 수 있도록 한다.
컴파일 시점에서 타입이 결정되므로, 코드의 재사용성을 높이고 타입 안정성을 제공하는 기능이다.
제네릭 클래스
class Box<T>
{
private T item;
public void SetItem(T item)
{
this.item = item;
}
public T GetItem()
{
return item;
}
}
제네릭 클래스를 사용하면 여러타입에 대응하는 클래스를 만들 수 있다.
제네릭 메서드
class Test
{
public static void Print<T>(T data)
{
Console.WriteLine(data);
}
}
제네릭 메서드는 특정 타입에 종속되지 않고 여러 타입을 지원할 수 있다.
제네릭 인터페이스
// 제네릭 인터페이스 정의
interface IStorage<T>
{
void Add(T item);
T Get(int index);
}
// 제네릭 인터페이스 구현
class Storage<T> : IStorage<T>
{
private List<T> list = new List<T>();
public void Add(T item)
{
list.Add(item);
}
public T Get(int index)
{
return list[index];
}
}
인터페이스에서도 제네릭을 사용할 수 있다
제네릭 타입 제한
class Calculator<T> where T : struct
{
private T number;
public Calculator(T number)
{
this.number = number;
}
public T GetNumber()
{
return number;
}
}