Page 36 -
P. 36

예제 2-7 typeof 연산자의 결과를 출력하는 예 ▶ TypeOfExample.cs
                       static void PrintType<T>()
                                                                                                      2
                       {
                           Console.WriteLine("typeof(T) = {0}", typeof(T));    typeof(T)와 typeof(List<T>)의 결과를 출력
                           Console.WriteLine("typeof(List<T>) = {0}", typeof(List<T>));               C# 2
                       }


                       static void Main()
                       {
                           PrintType<string>();    타입 인수로 string을 사용하여 메서드를 호출
                           PrintType<int>();    타입 인수로 int를 사용하여 메서드를 호출
                       }



                    예제 2-7의 출력 결과는 다음과 같다.

                       typeof(T) = System.String
                       typeof(List<T>) = System.Collections.Generic.List`1[System.String]
                       typeof(T) = System.Int32
                       typeof(List<T>) = System.Collections.Generic.List`1[System.Int32]

                    T에 대한 타입 인수로 string을 지정한 첫 번째 예에서 중요하게 살펴볼 부분은 typeof(T)에 대

                    한 출력 결과와 typeof(string)이 완전히 동일하고 typeof(List<T>)와 typeof(List<string>)
                    에 대한 출력 결과도 완전히 동일하다는 점이다. 타입 인수로 int를 지정한 경우에도 typeof(T)
                    와 typeof(int), 그리고 typeof(List<int>)와 typeof(List<string>))의 결과가 정확히 일치한
                    다. 이로써 제네릭 타입이나 제네릭 메서드를 사용하더라도 실제로 코드가 수행될 때는 타입 매개
                    변수가 닫혀 있고 구성된 형태임을 알 수 있다.

                    또한, 출력 결과를 자세히 살펴보면 리플렉션(reflection)을 사용해야 할 경우 제네릭 타입의 이름

                    을 어떻게 작성해야 하는지도 알 수 있다. List`1은 제네릭 애리티가 1(타입 매개변수가 한 개)인
                    List라는 이름의 제네릭 타입을 나타낸다. 타입 인수는 바로 뒤에 대괄호를 이용하여 나타낸다.
                    앞서 typeof(List<>)와 같이 타입 인수를 생략한 채 사용하는 방법도 언급한 바가 있다. 이 문

                    법은 오로지 typeof 내에서만 사용할 수 있는 표기법인데, 제네릭 타입 정의를 가져오기 위한
                    방법이다. 제네릭 애리티가 1인 경우라면 TypeName<>과 같이 쓸 수 있으며, 타입 매개변수가
                    한 개 이상이라면 꺾쇠괄호 내에서 쉼표(,)를 추가하면 된다. Dictionary<TKey, TValue>라면

                    Dictionary<,>와 같이 쓰고, Tuple<T1, T2, T3>라면 Tuple<,,>와 같이 쓰면 된다.





                                                                                                  077
   31   32   33   34   35   36   37   38   39