반응형
* 일반화 대상 = 데이터 형식.
* 형식 매개 변수 T는 모든 데이터 형식을 대신할 수 있습니다.
* ArrayList, Queue, Stack, Hashtable 컬렉션들은 모두 object 형식을 기반으로 하기 때문에 태생적으로 성능 문제를 안고 있는데, 일반화 컬렉션은 컴파일시 컬렉션에서 사용할 형식이 결정되고, 쓸데없는 형식 변환을 일으키지 않아 성능 저하가 해결됩니다.
- 대표적인 일반화 컬렉션은 List<T>, Queue<T>, Stack<T>, Dictionary<TKey, TValue>가 있습니다.
- List = ArrayList의 일반화 버전, Dictionary = Hashtable의 일반화 버전입니다.
* 타입 일반화 메서드 예시
static void CopyData<T>(T[] source, T[] target)
{
target = source;
for (int i = 0; i < target.Length; i++)
{
Console.Write(target[i] + ", ");
}
}
int[] sourceArray = new int[] { 1, 2, 3, 4, 5 };
int[] target = new int[] {};
CopyData(sourceArray,target); //1, 2, 3, 4, 5, 출력.
* 형식 매개 변수의 조건에 제약을 걸면 특정 조건의 데이터 형식만 사용 가능합니다 : where 절
static void CopyData<T>(T[] source, T[] target) where T : struct
static void CopyData<T>(T[] source, T[] target) where T : class
int[] sourceArray = new int[] { 1, 2, 3, 4, 5 };
int[] target = new int[] {};
CopyData(sourceArray,target); -> where T : class 의 경우 여기서 오류 생김
where T : class | 참조 형식 |
where T : new() | 매개변수가 없는 생성자 |
where T : 기반 클래스 이름 | 명시한 기반 클래스이거나, 기반 클래스의 파생 클래스 |
where T : 인터페이스 이름 | 명시한 인터페이스를 반드시 구현해야 함 |
where T : U | 또 다른 형식 매개 변수 U로부터 상속받은 클래스 |
반응형
'[Unity] > [C#]' 카테고리의 다른 글
[C#] reflection (0) | 2022.10.05 |
---|---|
[C#] partial 클래스 (0) | 2022.10.04 |
[C#] 확장 메서드 기법 (0) | 2022.09.29 |
[C#] 메서드 매개 변수 : params, in, ref, out (0) | 2022.09.28 |
[C#] Tuple(튜플) 형식 (0) | 2022.09.27 |