Page 34 -
P. 34

●   default(T)

                       ●   default(int)
                                                                                                      2
                       ●   default(string)                                                            C# 2

                       ●   default(List<T>)

                       ●   default(List<List<string>>)

                    default 연산자의 반환 타입은 피연산자로 지정된 타입과 늘 동일하게 유지된다. 이런 이유로
                    default 연산자의 피연산자로 타입 매개변수를 사용하는 경우를 흔히 볼 수 있다. (초기화는 필

                    연적이기 때문에 다른 방법을 이용해서라도 반드시 수행해야 한다.) 예를 들어 지역 변수의 기본
                    값을 초깃값으로 사용하려는 경우를 생각해 보자(추후 다른 값이 할당될 수도 있겠지만 이는 고
                    려하지 않겠다). 다음 예제 코드는 이미 잘 알고 있을 법한 LastOrDefault 메서드를 간단히 구현
                    한 예다.


                       public T LastOrDefault(IEnumerable<T> source)
                       {
                           T ret = default(T);    지역 변수를 선언하고 T의 기본값을 할당
                           foreach (T item in source)
                           {
                               ret = item;    현재 값으로 지역 변수의 값을 (대체) 할당
                           }
                           return ret;    마지막으로 할당된 값을 반환
                       }

                    typeof 연산자는 이보다 좀 더 복잡하다. 크게 다섯 가지 용례가 있다.


                       ●   제네릭과 무관하게 사용하는 경우. 예: typeof(string)
                       ●   제네릭을 사용하지만 타입 인수를 지정한 경우. 예: typeof(List<int>)

                       ●   타입 매개변수만 사용하는 경우. 예: typeof(T)

                       ●   제네릭을 사용하고 타입 매개변수도 포함하는 경우. 예: typeof(List<TItem>). TItem을 타
                         입 매개변수로 취하는 제네릭 메서드 내에서 이처럼 사용할 수 있을 것이다.

                       ●   제네릭을 사용하지만 타입 매개변수를 제거한 경우. 예: typeof(List<>)

                    첫 번째 경우는 가장 간단한 활용 예로, 그 결과가 변경된 적이 없다. 나머지는 조금 주의 깊게 살
                    펴볼 필요가 있는데, 우선 가장 마지막 예는 새롭게 추가된 문법이다. 기본적으로 typeof 연산자



                                                                                                  075
   29   30   31   32   33   34   35   36   37   38   39