C# 제네릭 | 오버로드를 방지할 수 있다

제네릭은 가져다가 쓰는 경우는 많아도 직접 구현하는 경우는 거의 없습니다. 그러므로 이 게시글로 제네릭은 어떤 것이다 정도로 이해해 주시면 좋겠습니다.

간단한 예제


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를 선언할때와 굉장히 비슷하죠.

제네릭은 제약조건, 제한조건이라는 데이터 타입을 한정 짓는 문법이 존재하는데 유니티에서는 제네릭으로 우리만의 클래스를 만드는 경우는 거의 없으므로 굳이 알 필요는 없습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다