11.0 · 버전 이력
C# 11.0
적기 까다롭던 글과 규칙을 담을 자리가 생겼습니다.
한눈에
무엇이 더해졌나
C# 11.0은 .NET 7과 함께 2022년 11월에 나왔습니다. 적기 까다롭던 글과, 형식이 스스로 지켜야 할 규칙을 담을 자리가 마련된 판입니다.
- 원시 문자열 — 따옴표와 역슬래시를 그대로 담습니다.
- required 멤버 — 만들 때 반드시 담게 합니다.
- list 패턴 — 늘어놓은 값의 모양으로 견줍니다.
- 제네릭 수학 — 숫자 형식을 하나로 묶어 다룹니다.
- UTF-8 문자열 — 바이트로 바로 담습니다.
원시 문자열
따옴표가 든 글을 그대로 옮기기
JSON이나 정규식처럼 따옴표와 역슬래시가 많은 글을 코드에 옮겨 적는 일이 잦은데, 그때마다 하나하나 겹쳐 적어야 했습니다. 눈으로 읽기 어렵고 옮겨 적다 빠뜨리기도 쉬웠습니다.
C# 10 까지
string json = "{ \"name\": \"홍길동\" }";
C# 11 부터
string json = """ { "name": "홍길동" } """;
큰따옴표 셋으로 여닫습니다. 닫는 따옴표의 들여쓰기만큼이 모든 줄에서 걷힙니다 — 그래서 코드 안에서는 들여쓴 채로 두고, 담기는 글은 왼쪽에 붙게 할 수 있습니다. 안에 따옴표 셋이 들어가야 한다면 넷으로 감싸면 됩니다.
앞에 $ 를 붙이면 값도 끼울 수 있습니다.
C# 1.9 문자열 처리 에서 문자열의 여러 모양을 다룹니다.
그 밖에
required 멤버와 list 패턴
값을 담아야 하는데 빠뜨린 채 만들어지는 일을 막으려면 생성자로 강제하는 수밖에
없었습니다. required 를 붙이면 담지 않고
만들려 할 때 컴파일러가 막습니다.
class User { public required string Name { get; init; } } var u = new User(); // 컴파일 오류 var v = new User { Name = "홍길동" }; // 괜찮습니다
그리고 패턴 매칭이 늘어놓은 값에도 닿았습니다. 몇 개인지, 앞이 무엇인지를 그대로 적어 견줍니다.
int[] n = { 1, 2, 3 }; string what = n switch { [] => "비었습니다", [var only] => $"하나뿐: {only}", [1, ..] => "1로 시작합니다", _ => "그 밖" };
배경
- 이 판이 겨눈 것은 있는 그대로 적게 하는 것입니다.
- 원시 문자열은 겹쳐 적다 빠뜨리는 실수를 없앴습니다.
required는 지켜야 할 규칙을 형식 자신이 들고 있게 했습니다.