Page 17 -
P. 17

이미 C#에 대해 충분한 경험이 있는 독자라면 이번 장은 그저 C#이 얼마나 많이 바뀌었는지 재확
               인하고, 헌신적이며 똑똑한 C# 설계 팀에게 다시 한 번 감사하는 장이 될 것이다. 제네릭 없이 C#
               프로그래밍을 해본 적이 없다면, 도대체 이런 기초적인 기능조차 포함되어 있지 않은 언어를 어떻
                                             1
               게 출시했는지 의아해할지도 모르겠다.  어찌 되었건 이 장을 통해서 미처 알지 못했던 내용을 발
               견할 수도 있고, 이전에는 알지 못했던 세부적인 내용을 발견할 수도 있을 것이다.
               C# 2가 Visual Studio 2005와 함께 출시된 지 10년이 훨씬 더 지났다. 출시된 지 한참이나 지난

               기능을 다시 살펴보면서, 정말 대단한 기능이라며 흥분하기는 쉽지 않은 일이다. 하지만 해당 기
               능이 추가된 시기를 고려한다면 그 가치를 평가 절하할 수는 없을 것이다. 실제 현장에서 C# 1과
               .NET 1.x를 C# 2와 .NET 2.0으로 업그레이드하는 과정은 매우 오랜 기간에 걸쳐 서서히 진행되

               었으며, 고통스러운 과정이었다. 다행히도 그 이후에는 비교적 업그레이드 속도가 빨라졌다. C#
               2에 추가된 기능 중 처음으로 알아볼 기능은 대부분의 개발자가 가장 중요하게 평가하는 제네릭
               이다.






               2.1      제네릭                                               C# IN DEPTH






               제네릭은 범용적 타입을 작성하기 위한 방법으로, 이 기능을 이용하면 특정 타입을 작성할 때 내
               부적으로 사용할 타입을 사전에 정확히 알지 못하더라도 컴파일 타임에서조차 타입 안정적으로
               동작하는 코드를 작성할 수 있다. 제네릭이 처음 소개되었을 당시만 해도 주로 컬렉션에 국한하여
               제한적으로 사용되었지만, 현대적인 C# 코드에서는 폭넓게 제네릭을 사용한다. 특히 다음에 나열

               한 몇 가지 경우에 제네릭의 활용도가 매우 높다.

                 ●   컬렉션(제네릭은 그 자체만으로 예전의 컬렉션만큼이나 유용하다.)

                 ●   델리게이트(특히 LINQ에서)

                 ●   비동기 코드, Task<T>는 향후 T 타입의 값을 갖게 될 프라미스(Promise)다.     2
                 ●   null 가능 값 타입. 이에 대해서는 2.2절에서 자세히 다룰 것이다.




               1   이에 대한 나의 답은 비교적 간단하다. 당시에는 자바보다 C# 1이 훨씬 더 생산적인 언어였다.
               2    역주 프라미스는 1976년 다니얼 프리드먼(Daniel P. Friedman)과 데이비드 와이즈(David Wise)가 제안한 개념으로, 미래에 설정할 수 있
                 는 값을 가지는 컨테이너를 말한다.

         058
   12   13   14   15   16   17   18   19   20   21   22