Page 24 -
P. 24
이제 List<T>가 제공하는 메서드와 속성 등을 살펴보자. 그림 2-2처럼 list 변수를 사용하고 있
다면, API에서 T라고 정의한 부분은 모두 string이 된다. 예를 들어 List<T> 내의 Add 메서드의
2
원형은 다음과 같다.
public void Add(T item) C# 2
하지만 Visual Studio에서 list.Add라고 입력하면 인텔리센스는 item 매개변수가 마치 string으
로 선언된 것처럼 결과를 보여준다. 이때 해당 인수로 다른 타입을 전달하면 컴파일 오류가 발생
한다.
그림 2-2에서 살펴본 제네릭 클래스의 예와 같이 메서드도 제네릭으로 선언할 수 있다. 제네릭
메서드를 선언할 때는 타입 매개변수를 메서드 원형의 일부로 포함시키면 된다. 메서드의 타입 매
개변수는 종종 제네릭 타입의 타입 인수를 그대로 사용하곤 한다. 다음 예제에서는 기존 컬렉션의
첫 번째 요소부터 N번째 요소까지를 담고 있는 새로운 컬렉션을 반환하며, 정적으로 타이핑된
방식으로 동작하는 메서드를 구현한 예를 보여준다. 이전에는 이런 방식으로 코드를 구현할 수
없었다.
예제 2-5 컬렉션 내의 요소 중 일부만을 복사하는 예 ▶ GenericMethod.cs
public static List<T> CopyAtMost<T>( 타입 매개변수 T를 이용하여 메서드를 선언하고,
List<T> input, int maxElements) 메서드의 일반 매개변수와 반환 타입으로 활용
{
int actualCount = Math.Min(input.Count, maxElements);
List<T> ret = new List<T>(actualCount); 메서드 본문에서도 타입 매개변수를 사용
for (int i = 0; i < actualCount; i++)
{
ret.Add(input[i]);
}
return ret;
}
static void Main()
{
List<int> numbers = new List<int>();
numbers.Add(5);
numbers.Add(10);
numbers.Add(20);
List<int> firstTwo = CopyAtMost<int>(numbers, 2); 타입 매개변수로 int를 지정하여
Console.WriteLine(firstTwo.Count); 메서드를 호출
}
065