클래스에서 미리 타입을 지정해 놓는 것이 아닌, 사용자가 지정한 타입을 사용하도록 하게 해주는 타입을 일반화 시킨 것을 의미한다.

사용자가 타입을 지정해서 사용할 수 있기 때문에 확장성이 좋고, 여러 상황에 대하여 기능을 만들 수 있다.

where절


private void Start()
{
		TestGeneric<int>();
    TestGeneric<string>();
    TestGeneric<Vector3>();
}
private void TestGeneric<T>()
{
    List<T> genericList = new List<T>();

    Debug.Log(genericList.GetType());
}
//실행 결과 : 
//						System.Collections.Generic.List`1[System.Int32]
//						System.Collections.Generic.List`1[System.String]
//						System.Collections.Generic.List`1[UnityEngine.Vector3]
private void Start()
{
		TestGeneric<int>();
    TestGeneric<string>();
    TestGeneric<Vector3>();		
}
private void TestGeneric<T>() where T : UnityEngine.Component
{
		
}
//Start에서 호출해 주려는 TestGeneric<T>()은 int, string, Vector3로 유니티엔진의 컴포넌트가 아니기에, 오류가 발생한다.