1. 일반화(Generic)
일반화(Generic)는 공통적으로 사용되는 부분을 추상화 한 것을 의미한다.
//1
void PrintInt(int value)
{
Debug.Log(value);
}
//2
void PrintFloat(float value)
{
Debug.Log(value);
}
두 함수는 데이터타입을 제외하고 모두 동일한 기능을 가진다.
void PrintValue<T>(T value)
{
Debug.Log(value);
}
이때 데이터타입을 뭉퉁그려 T로 일반화하여 사용한다.
2. 일반화(Generic)를 사용할 때 주의할 점
void Sum<T>(T valueA, T valueB)
{
return valueA + valueB;
//오류가 뜨는 이유 : +연산자를 사용할 수 있는 데이터 타입인지 확인 할 수 없음
//물론 다이나믹을 사용하면 가능함.
}
해당 코드는 오류를 배출할 것이다.
오류가 뜨는 이유는 +연산자를 사용할 수 있는 데이터 타입인지 확인 할 수 없기 때문이다.
3. where T :
void DestrorComponent<T>(T value) where T : Component
{ //where은 T에 대한 정보를 알려준다.
Destroy(value);
//where이 없다면 <T>가 컴포넌트 인지 알 수 없음.
}
public static void DestroyComponent<T>(this T value) where T : Component
{
// Component 상속받는 자식들을 포함한다. ex) Renderer, Rigidbody 등
// ----- //
Debug.Log("컴포넌트 제거");
}
굳이 where을 사용하여 데이터타입을 특정해야하는 이유는 무엇일까?
확장메서드를 좀더 용이하게 사용하기 위해서다.