Game Development, 게임개발/개발

제너릭, Generics [Unity]

게임이 더 좋아 2021. 3. 24. 18:20
반응형
728x170

 

cpp의 템플릿과 비슷하다고 보면 된다.

제너릭을 구현하는 경우는 내 경험이 부족해 아직 많이 못봤지만

제너릭을 가져다 쓰는 것이 보통이다.

 

알아보자

 


 

제너릭은 일반적으로 다양한 데이터 타입으로 같은 기능을 수행하게 하는 것이다.

 

어차피 기능이 같을 거라면.. 정수형, 문자열, 실수형...을 일일이 지정해주는 것은 정말 힘들다. 

그래서 무슨 타입이든.. 받을 수 있게 하였는데

 

예를 들어보자

using UnityEngine;
using System.Collections;

public class SomeClass 
{
    //여기 원래 자료형이 들어가는 자리에 T라는 것이 들어가있고
    //메서드 뒤에 <T>라는 것이 나왔다. T는 어떤 자료형으로도 인식된다.
    //그래서 정수형, 실수형을 넣어도 알아서 인식이 된다.
    public T GenericMethod<T>(T param)
    {
        return param;
    }
}

 

그러니까... 우리가 무엇으로도 바꿀 수 있다는 말이 된다.

사실 메서드를 정의할 때, 들어갈 인자의 자료형을 정해야 정의가 되는데

얘는 정하지 않고 Runtime에 정해도 된다는 말이다.

 

using UnityEngine;
using System.Collections;

public class SomeOtherClass : MonoBehaviour 
{
    void Start () 
    {
        SomeClass myClass = new SomeClass();

        //그니까 여기서 바로 메서드가 재정의되는 것이라고 보면 되겠다.
        // int 형의 값을 넣어서 해당 메서드를 쓰겠다는 말이다.
        myClass.GenericMethod<int>(5);
    }
}

 

즉, 어떤 메서드를 정의할 때 기능은 같은데 메서드가 나누어져있다면 

제너릭을 이용해서 하나로 만들 수도 있다는 말이다.

코드 수 줄이기에 딱 좋다.

 

 


 

제너릭 메서드만 있느냐???

제너릭 클래스도 있다.

 

using UnityEngine;
using System.Collections;

//클래스를 정의할 때도 T를 사용한다.
//인스턴스를 만들 때 T가 사용되는 것이다.
public class GenericClass <T>
{
    T item;

    public void UpdateItem(T newItem)
    {
        item = newItem;
    }
}

 

?? 뭐 어떻게 사용하는거지??

 

using UnityEngine;
using System.Collections;

public class GenericClassExample : MonoBehaviour 
{
    void Start () 
    {        
        //제너릭 클래스를 사용하려면 내가 원하는 클래스 타입을 입력해야 한다.
        GenericClass<int> myClass = new GenericClass<int>();
        //int로 선언을 했다.

        myClass.UpdateItem(5);
        //int = 5가 되겠다.
    }
}

 

 

 

아마 리팩토링 때 쓰지 않을까 싶다.

 

GetComponent<RigidBody>()랑 비슷한 느낌 난다 그치?

 

learn.unity.com/

 

728x90
반응형
그리드형