[Unity/C#]Generic

강동현·2023년 12월 30일
0

Unity/C#

목록 보기
4/26

Generic = 일반화

함수클래스박싱 언박싱으로 인한 성능 감소가 없는 상태에서 여러 종류의 데이터 타입을 다룰 수 있도록 하는 방식

1. 제네릭 함수

  • 접근제한지정자 리턴값 함수명<템플릿 매개변수...>(매개변수 목록...)
    * 템플릿 매개변수의 T는 마음대로 설정 가능(A, B, KEY, VALUE 등)
  • 탬플릿 매개변수는 여러개 존재 가능
public class GenericTest : MonoBehaviour
{
	//일반 함수
    public void Copy(int[] source, int[] target)
    {
        for (int i = 0; i < source.Length; i++)
        {
            target[i] = source[i];
        }
    }
    //재네릭 함수1
    public void Copy<T>(T[] source, T[] target)
    {
        for (int i = 0; i < source.Length; i++)
        {
            target[i] = source[i];
        }
    }
    //제네릭 함수2
    public void Copy<A, Bear>(A[] sourceA, A[] targetA, Bear[] sourceB, Bear[] targetB)
	{
    	for (int i = 0; i < sourceA.Length; i++)
    	{
        	targetA[i] = sourceA[i];
    	}
    	for (int i = 0; i < sourceB.Length; i++)
    	{
        	targetB[i] = sourceB[i];
    	}
	}
    private void Start(){
    	int[] SourceArr = { 1, 1, 1 };
		int[] targetArr = { 2, 2, 2 };
		Copy(SourceArr, targetArr);
		Copy<int>(SourceArr, targetArr);
		string[] strArr1 = { "1", "2", "3", "4", "5", "6", };
		string[] strArr2 = { "1", "2", "3", "4", "5", "6", };
		Copy<string>(strArr1, strArr2);
    }
}

2. 제네릭 클래스

  • 접근제한지정자 class 클래스명<템플릿 매개변수...>
    * 템플릿 매개변수의 T는 마음대로 설정 가능(A, B, KEY, VALUE 등)
  • 탬플릿 매개변수는 여러개 존재 가능
//제네릭 클래스1
public class return_Generic<T>
{
    private T num;
    public T Return()
    {
        return num;
    }
}
//제네릭 클래스2
public class return_Generic_Alpha<ALPHA, BETA>
{
    private ALPHA num;
    public ALPHA Return()
    {
        return num;
    }
    private BETA num;
    public void Return(BETA tmp)
    {
        Debug.Log(tmp);
    }
}

3. 제네릭 제약조건

  • 제네릭을 통해 들어오는 타입제한을 걸 수 있다.
 * where T : struct: T는 값 형식만 받아드리도록 제한한다.
 * where T : class: T는 참조 형식만 받아드리도록 제한한다.
 * where T : new(): T는 매개변수 없는 생성자가 있는 클래스
 * where T : 부모 클래스 이름: T는 명시한 부모 클래스의 자식 클래스
 * where T : 인터페이스 이름: T는 명시한 인터페이스로 구현된 클래스
 * where T : U: T는 형식 매개변수 U로부터 상속
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글