unity study #4 - Generic (제네릭, 형식매개변수)

·2022년 9월 3일
0

Unity Study

목록 보기
4/8

Generic이란?

클래스 사용 타입을 클래스를 디자인 할 때 지정하는것이 아니고, 클래스를 사용할 때 지정한 후 사용하는 것을 말한다.

동일한 기능을 하는데, 파라미터의 타입만 다른 함수가 여러개 존재한다면
매개변수를 하나하나 넣어 만들어주기엔 귀찮고 코드가 길어지고 많아진다.

public class Test : MonoBehaviour 
{
    void Print(int value)
    {
        print(value);
    }
   void Print(String value)
    {
        print(value);
    }
    void Print(float value)
    {
        print(value);
    }
   void Start()
    {
        Print(3);
        Print("삼");
        Print(3.5f);
    }

}

이와 같이 인터페이스, 메서드를 사용할 때 동일한 기능을 수행하지만, 입력하는 데이터 형식만 다를 경우에 사용하는 것이 제네릭이다.

제네릭 타입에서는 데이터 요소 타입을 확정하지 않고 데이터 타입 자체를 파라미터로 받아들이도록 클래스를 정의한다.

public class Test : MonoBehaviour 
{
    void Print <T>(T value) //제네릭 타입 사용
    {
        print(value);
    }
   void Start()
    {
        Print<string>("abc");
        Print<float>(4.5f);
    }

}

> abc
> 4.5

형식 매개 변수로 받을 수 있는 타입을 명시적으로 제한해줄 수 있다

public class Test : MonoBehaviour 
{
    void Print <T>(T value) where T : struct // struct 타입만 받겠다
    {
        print(value);
    }
   void Start()
    {
        Print<string>("abc"); // string: class 타입
        Print<float>(4.5f);   // float: struct 타입
    }
}

//string 타입은 받을 수 없어서 에러 발생

제네릭 타입을 통한 클래스 선언

public class Abc<T> 
{
    public T var; // 클래스 선언 시 사용한 타입과 동일.
    public T[] array; // 클래스 선언 시 사용한 타입과 동일.
}
public class Test : MonoBehaviour 
{
    Abc<String> a = new Abc<String>();
    Abc<float> b = new Abc<float>();
    void Start()
    {
        a.var = "abc";
        b.var = 4.5f;

        a.array = new string[1];
        b.array = new float[1];

        a.array[0] = "abc";
        b.array[0] = 4.5f;

        print(a.var);
        print(a.array[0]);

        print(b.var);
        print(b.array[0]);
    }

}

> abc
> abc
> 4.5
> 4.5
profile
삶을 스스로 통제하고 있다는 느낌을 받을 때 더 행복하고 성공한다.🍃

0개의 댓글