제니릭이란 .NET 2.0에 새롭게 추가된 개념으로, 형식 매개변수(type parameter)를 사용하는 것이다.
형식 매개변수란 코드에서 클래스 또는 메서드를 선언하고 인스턴스화 할때까지 형식지정을 연기하는 개념을 말한다.
따라서 generics을 사용하면 런타임 캐스팅 또는 boxing 작업에 대한 비용이나 위험이 발생하지 않고 공통 작업에 대한 클래스를 생성할 수 있다.
Generics 사용
Generics을 사용하여 특정 자료형을 저장하고, 반환하는 클래스를 제작해 보았다.
using UnityEngine;
using System.Collections;
public class GenericClass<T>
{
T item;
public void SetItem(T newItem)
{
item = newItem;
}
public T GetItem()
{
return item;
}
}
GenericClassExample에서는 GenericClass는 int 혹은 string의 자료형을 저장, 반환 할 수 있다.
using UnityEngine;
using System.Collections;
public class GenericClassExample : MonoBehaviour
{
void Start()
{
GenericClass<int> myInt = new GenericClass<int>();
myInt.SetItem(10);
Debug.Log("int item : " + myInt.GetItem());
GenericClass<string> myString = new GenericClass<string>();
myString.SetItem("item");
Debug.Log("string item : " + myString.GetItem());
}
}
여러개의 Generics 사용
여러개의 Generics을 사용하는 방법은 아래와 같다.
using UnityEngine;
using System.Collections;
public class GenericClass<T, U>
{
T _itemT;
U _itemU;
public void SetItem(T newItemT, U newItemU)
{
_itemT = newItemT;
_itemU = newItemU;
}
public T GetItemT()
{
return _itemT;
}
public U GetItemU()
{
return _itemU;
}
}
using UnityEngine;
using System.Collections;
public class GenericClassExample : MonoBehaviour
{
void Start()
{
GenericClass<int, int> myInt = new GenericClass<int, int>();
myInt.SetItem(10, 15);
Debug.Log("int item : " + string.Format("{0}, {1}", myInt.GetItemT(), myInt.GetItemU()));
GenericClass<string, float> myString = new GenericClass<string, float>();
myString.SetItem("item", 1.0f);
Debug.Log("string item : " + string.Format("{0}, {1}", myString.GetItemT(), myString.GetItemU()));
}
}