일부 기사와 논문 등을 읽다 보면 제네릭이 컬렉션과 함께 사용될 때만 유용한 것처럼 이야기 하곤

하지만 이는 사실이 아니다. 제네릭은 컬렉션 외에도 인터페이스, 이벤트 핸들러, 공통 알고리즘 구현

등 매우 다양한 분야에서 유용하게 활용될 수 있다.

커뮤니티를 중심으로 많은 개발자가 C#의 제네릭과 C++의 템플릿을 비교하는 토론을 이어왔는데,

주된 토론 내용을 살펴보면 둘 중 어느 쪽이 더 우수한지를 주장하는 내용이 대부분이었다.

C#의 제네릭과 C++의 템플릿을 비교하는 것은 문법적인 이해를 돕기 위해서는 유용할지 모르지만

그 외의 다른 주장들은 이제 그만둘 때도 됐지 싶다. 일부 관용구는 C++ 템플릿을 이용해서

표현하는 것이 자연스럽지만, 또 다른 구조는 C# 제네릭을 이용하는 편이 더 자연스럽다.

둘 중 어느 것이 나은가를 견주어보는 것은 이 둘을 제대로 이해하는 데 오히려 방해만 될 뿐이다.

그러니 이제 이러한 단순 비교는 그만두자.

마이크로소프트의 개발팀은 관리 환경에 제네릭을 추가하기 위해서 C# 컴파일러는 물론이고, JIT

컴파일러 , CLR 등을 모두 수정해야 한다. C# 컴파일러는 제네릭 타입으로 작성한 코드를 적절한

MSIL(Microsoft Intermediate Language)로 생성하기 위해 수정돼야 했고, JIT 컴파일러는 닫힌

제네릭 타입을 생성하기 위해서 제네릭 타입에 대한 정의부와 타입 매개변수를 결합할 수 있도록

수정돼야 했다. CLR은 런타임에 이 두가지를 모두 지원하기 위해서 변경돼야 했다.

타입을 제네릭으로 정의하면 장점도 있고 그에 따른 비용도 발생한다. 일반적으로 코드를