클래스에서 미리 타입을 지정해 놓는 것이 아닌, 사용자가 지정한 타입을 사용하도록 하게 해주는 타입을 일반화 시킨 것을 의미한다.
사용자가 타입을 지정해서 사용할 수 있기 때문에 확장성이 좋고, 여러 상황에 대하여 기능을 만들 수 있다.
where절
- Generic으로 받는 타입에 주는 제약으로, 제약 조건을 만족하는 타입만 받도록 해준다.
- Generic을 사용하다 보면, Generic으로 받은 Type에 대한 객체를 생성해 주어야 하는 경우가 생긴다. 하지만, 일반적으로는 제네릭에 대해서 생성자를 사용하지 못한다. 이 때 new() 제약으로, 타입에 생성자가 있는 타입을 받아오게 함으로, 받아온 모든 타입에 new()를 사용할 수 있다는 것을 알 수 있다.
- 단, new()제약을 만족하려면, 매개변수가 없는 생성자가 있어야 한다.
private void TestGeneric<T>() where T : UnityEngine.Component, new() { } //제약 조건을 여러개를 입력하기 위해서는 조건마다 ','로 구분해 준다. //타입에 new()라는 제약을 두었기에, 타입에 매개변수 없는 생성자가 존재해야 한다.
private void Start()
{
TestGeneric<int>();
TestGeneric<string>();
TestGeneric<Vector3>();
}
private void TestGeneric<T>()
{
List<T> genericList = new List<T>();
Debug.Log(genericList.GetType());
}
//실행 결과 :
// System.Collections.Generic.List`1[System.Int32]
// System.Collections.Generic.List`1[System.String]
// System.Collections.Generic.List`1[UnityEngine.Vector3]
private void Start()
{
TestGeneric<int>();
TestGeneric<string>();
TestGeneric<Vector3>();
}
private void TestGeneric<T>() where T : UnityEngine.Component
{
}
//Start에서 호출해 주려는 TestGeneric<T>()은 int, string, Vector3로 유니티엔진의 컴포넌트가 아니기에, 오류가 발생한다.
'유니티 > 개념 정리' 카테고리의 다른 글
| 직렬화(Serialize) (0) | 2024.07.24 |
|---|---|
| 리소스 폴더(Resource Folder) (0) | 2024.07.22 |
| New Input System (0) | 2024.07.19 |
| Indexer (0) | 2024.05.09 |
| 대리자 (0) | 2024.04.23 |