C# 8.0
값이 없을 수 있다는 것을 타입에 적게 되었습니다.
무엇이 더해졌나
C# 8.0은 .NET Core 3.0과 함께 2019년 9월에 나왔습니다. 이 판의 가장 큰 것은 값이 없을 수 있다는 사실을 타입에 적게 된 것이고, 그 밖에도 경우를 나누고 자리를 세는 방법이 여럿 더해졌습니다.
- nullable 참조 형식 — 비어 있을 수 있는지를 타입에 적습니다.
- switch 식 — 값을 고르는 일을 식 하나로 적습니다.
- 인덱스와 범위 —
^1,1..3 - using 선언 — 다 쓴 것을 닫는 일을 맡깁니다.
- 비동기 스트림 — 하나씩 도착하는 것을 기다리며 탐색합니다.
고르는 일을 식으로
switch 문은 경우마다 break 를
적어야 했고, 값을 고르는 것이 목적일 때도 담을 변수를 미리 만들어 두어야 했습니다.
식으로 적으면 고른 값이 그대로 나옵니다.
string msg; switch (grade) { case "A": msg = "훌륭합니다"; break; default: msg = "좋습니다"; break; }
string msg = grade switch { "A" => "훌륭합니다", _ => "좋습니다" };
_ 는 "그 밖의 모든 것" 입니다. 모든 경우를
덮어야 하며, 어느 것에도 걸리지 않는 값이 들어오면 실행 중에 예외가 납니다.
C# 1.5 조건문 에서 자세히 다룹니다.
끝에서 세고, 잘라 내기
마지막 것을 꺼내려면 개수에서 1을 빼는 계산을 늘 손으로 해야 했습니다.
^ 를 붙이면 끝에서부터 셉니다. 두 점으로는 일부만
잘라 냅니다.
var last = n[n.Length - 1]; var part = new int[2]; Array.Copy(n, 1, part, 0, 2);
var last = n[^1]; var part = n[1..3];
범위의 뒤쪽 번호는 포함되지 않습니다.
1..3 은 1번과 2번, 두 개입니다.
C# 1.7 배열과 컬렉션 기초 에서 자세히 다룹니다.
nullable 참조 형식과 using 선언
그때까지 string 은 언제나 비어 있을 수 있었고, 그것을
모르고 쓰다 실행 중에 멈추는 일이 가장 흔한 사고였습니다. C# 8.0부터는
비어 있을 수 있는지를 타입에 적고, 적어 둔 것과 다르게 쓰면
컴파일러가 미리 알려 줍니다.
string name = null; // 경고 — 비어 있을 수 없다고 적었습니다 string? nick = null; // 괜찮습니다 — 비어 있을 수 있다고 적었습니다
그리고 다 쓴 것을 닫는 일도 맡길 수 있게 되었습니다.
using 을 변수 앞에 붙여 두면 그 자리를 벗어날 때 알아서
닫히므로, finally 에 닫는 코드를 손수 적지 않아도 됩니다.
using var file = File.OpenText("a.txt"); // 이 자리를 벗어날 때 알아서 닫힙니다
- 이 판이 겨눈 것은 실행하기 전에 알 수 있게 하는 것입니다.
- 가장 흔하던 사고(비어 있는 것을 건드리기)를 타입에 적어 미리 잡습니다.
switch식과 범위는 손으로 하던 셈을 문법이 대신하게 했습니다.