함수나 클래스를 박싱 언박싱으로 인한 성능 감소가 없는 상태에서 여러 종류의 데이터 타입을 다룰 수 있도록 하는 방식
- 접근제한지정자 리턴값 함수명<템플릿 매개변수...>(매개변수 목록...)
* 템플릿 매개변수의 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); } }
- 접근제한지정자 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); } }
- 제네릭을 통해 들어오는 타입에 제한을 걸 수 있다.
* where T : struct: T는 값 형식만 받아드리도록 제한한다. * where T : class: T는 참조 형식만 받아드리도록 제한한다. * where T : new(): T는 매개변수 없는 생성자가 있는 클래스 * where T : 부모 클래스 이름: T는 명시한 부모 클래스의 자식 클래스 * where T : 인터페이스 이름: T는 명시한 인터페이스로 구현된 클래스 * where T : U: T는 형식 매개변수 U로부터 상속