[Unity]/[C#]

[C#] 일반화 프로그래밍

극꼼 2022. 9. 30. 20:58
반응형


* 일반화 대상 = 데이터 형식.

* 형식 매개 변수 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