3.0 · 버전 이력

C# 3.0

질의(LINQ)와 그것을 떠받치는 문법들이 한꺼번에 더해졌습니다.

2007 .NET Framework 3.5
한눈에

무엇이 더해졌나

C# 3.0은 2007년에 나왔습니다. 목표는 하나, LINQ였습니다. 데이터를 거르고 고르고 모으는 일을 코드 안에서 질의처럼 적게 하려던 것인데, 그것을 떠받치려 여러 문법이 한꺼번에 들어왔습니다.

  • var — 오른쪽을 보고 타입을 추론합니다.
  • 람다식 — 이름 없는 메서드를 짧게 적습니다.
  • 확장 메서드 — 남의 형식에 메서드를 덧붙입니다.
  • 익명 형식 — 이름 없는 형식을 그 자리에서 만듭니다.
  • 컬렉션 이니셜라이저 — 값을 늘어놓아 채웁니다.

이 가운데 var 와 컬렉션 이니셜라이저는 1부 기초에서, 나머지는 3부 LINQ에서 다룹니다.

var

타입을 적는 수고만 줄이기

var타입을 없애는 것이 아닙니다. 오른쪽 값을 보고 컴파일러가 대신 정할 뿐이며, 정해진 뒤에는 다른 타입을 담을 수 없습니다. 형식 이름이 길어질수록 이득이 커집니다.

C# 2 까지
Dictionary<string, List<int>> map =
    new Dictionary<string, List<int>>();
C# 3 부터
var map =
    new Dictionary<string, List<int>>();

오른쪽만 보고 무엇인지 알기 어렵다면 타입을 적는 편이 낫습니다. var n = Get(); 는 짧지만 읽는 사람이 Get 을 찾아가 보아야 합니다.

C# 1.3 변수와 데이터 타입 에서 자세히 다룹니다.

컬렉션 이니셜라이저

값을 늘어놓아 채우기

만들어 두고 Add 를 줄줄이 부르는 대신, 중괄호 안에 값을 늘어놓으면 됩니다.

C# 2 까지
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
C# 3 부터
var list = new List<int> { 1, 2, 3 };

C# 12.0에서는 형식 이름까지 생략하고 대괄호만으로 적을 수 있게 되었습니다 — List<int> list = [1, 2, 3]; 처럼 씁니다.

C# 1.7 배열과 컬렉션 기초 에서 자세히 다룹니다.

배경
  • 이 판이 겨눈 것은 데이터를 다루는 코드를 읽히게 하는 것이었습니다.
  • 여기 들어온 문법 대부분은 LINQ 하나를 떠받치려고 마련된 것입니다.
  • 그런데 그것들이 LINQ 밖에서도 널리 쓰이며 지금의 C# 모습을 만들었습니다.