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