제네릭은 가져다가 쓰는 경우는 많아도 직접 구현하는 경우는 거의 없습니다. 그러므로 이 게시글로 제네릭은 어떤 것이다
정도로 이해해 주시면 좋겠습니다.
간단한 예제
public void Print<T>(T inputMessage)
{
Debug.Log(inputMessage);
}
void Update()
{
if(Input.GetKeyDown("space"))
{
Print<string>("string 타입도 가능합니다");
Print<int>(486);
}
}
Print 함수를 보면 매개변수를 입력받아 출력해주는 간단한 함수입니다.
그런데 매개변수 데이터 타입이 T
이고 함수 명에 특수문자 꺽쇠에도 T
가 기입되있죠. 업데이트 함수에서 Print 함수 사용방식을 보면 특수문자 꺽쇠에 데이터 타입을 선언해서 사용하고 있습니다.
즉, T
부분에 자신이 원하는 데이터 타입을 선언할 수 있습니다.
이것은 GetComponent<> 사용법과 매우 비슷합니다.
public class Container<T>
{
public T[] messages;
}
public class UnityScript : MonoBehaviour
{
void Start()
{
Container<string> container = new Container<string>();
container.messages = new string[3];
container.messages[0] = "Here";
container.messages[1] = "Is";
container.messages[2] = "Blog";
for(int i = 0; i < container.messages.Length; ++i)
{
Debug.Log(container.messages[i]);
}
}
}
제네릭은 위 처럼 함수에도 사용 가능합니다. 위 방식은 List를 선언할때와 굉장히 비슷하죠.
제네릭은 제약조건, 제한조건이라는 데이터 타입을 한정 짓는 문법이 존재하는데 유니티에서는 제네릭으로 우리만의 클래스를 만드는 경우는 거의 없으므로 굳이 알 필요는 없습니다.