제네릭

강성현
∙∙조회 3

제네릭(generic)이란?

클래스나 메서드가 다룰 형식을 정하지 않고, 쓰는 쪽에서 정하게 하는 문법입니다.

.

문법형식 :

public class <클래스 이름>  

{

// T를 형식처럼 씁니다

}

 


1. 제네릭 메서드

메서드 이름 뒤에 형식 매개변수를 붙여 그 메서드 안에서만 형식을 열어 두는 것입니다.

 

문법 형식 :

<접근 제한자> <반환형> <메서드 이름>  (<매개변수>)

csharp
public static void PrinArray<T>(T[] array)
    {
        for (int i = 0; i < array.Length; i++)
        {
            Console.WriteLine(array[i]);
        }
    }

 


2. 제약 조건

형식 매개변수  에 들어올 수 있는 형식의 범위를 좁혀, 그 범위에 있는 멤버를 쓸 수 있게 하는 문법입니다.

 

문법형식 : public class <클래스 이름>   where T : <제약>

csharp
MonsterBox<Slime> box = new MonsterBox<Slime>();
MonsterBox<int> wrong = new MonsterBox<int>();

public class MonsterBox<T> where T : Monster
{
    private T[] items = new T[10];
    private int count = 0;
    public void Add(T item)
    {
        items[count] = item;
        count++;
    }
    public void PrintAll()
    {
        for (int i = 0; i < count; i++)
        {
            items[i].Attack(); // Monster의 멤버라 쓸 수 있다.
        }
    }
}

 

2-1) 제약의 조건

제약뜻
where T : <클래스 이름>그 클래스이거나 그것을 상속한 것만
where T : <인터페이스 이름>그 인터페이스를 구현한 것만
where T : class참조 형식만
where T : struct값 형식만
where T : new()매개변수 없는 생성자가 있는 것만