C# 10 로드맵 ✅ 새로운 기능 노출

🔄 C# 10의 가능한 새로운 기능 정보



며칠 전 Microsoft의 C# 언어 수석 디자이너인 Mads Torgersen은 C# 10에 포함될 멋진 새 기능에 대해 설명했습니다.
오픈 소스 소프트웨어의 가장 큰 이점 중 하나는 시간이 지남에 따라 프로젝트가 어떻게 발전하는지 확인할 수 있다는 것입니다. 이를 통해 GitHub의 진행 상황을 추적하고 주요 뉴스를 볼 수 있으므로 동일한 C#을 참조하려고 합니다.

✅ 가능한 새로운 C# 10 기능


🔼 C# 10 필수 속성



이전에는 개체가 올바르게 생성되었는지 확인하기 위해 항상 클래스 생성자가 사용되었습니다. 오늘날 우리는 이 레지스트리 👇에서와 같이 자체 구현 속성과 같은 더 가벼운 구조를 사용할 수 있습니다.

public record Employee
 {
  public string Name { get; init; }
  public decimal Salary { get; init; }
  public DateTime Date{ get; init; }
 }


경량 개체를 인스턴스화할 때 우리는 항상 개체 이니셜라이저 구문을 사용하여 빠르게 수행하는 것을 선호합니다 👇

var theNewGuy = new Employee
 {
  Name = "Chris Smith",
  Salary = 1000m,
  Date = DateTime.Now()
 };


괜찮아

But what if the object doesn't make sense until some properties are set? 🤔



생성자를 추가할 수 있지만 더 많은 표준 텍스트를 추가해야 합니다. 매개변수 값을 속성에 복사하는 것과는 별개입니다.
C# 10에서는 이 문제가 사라집니다 👇

public record Employee
 {
  public required string Name { get; init; }
  public decimal Salary { get; init; }
  public DateTime Date{ get; init; }
 }



🔼 C# 10 파일 수준 네임스페이스



모든 C# 프로그래머는 가장 단순한 프로그램도 네임스페이스에 블록 구조를 사용한다는 것을 알고 있습니다 👇

namespace HelloWorld
 {
  class Hello
  { 
  static void Main(string[] args)
  {
  System.Console.WriteLine("Hello World!");
  }
  }
 }


이것은 단순히 블록을 중첩하여 네임스페이스를 겹칠 수 있으므로 매우 유연합니다. 유일한 문제는 Java 또는 JavaScript와 같은 다른 언어와 비교할 때 약간의 추가 들여쓰기를 추가한다는 것입니다.

이 시점에서 우리가 스스로에게 묻는 질문은 다음과 같습니다.

Is it possible to keep that functionality, but at the same time reduce excess indentation? 🤔



네 ✅

How is it possible? 🤔



파일 범위 네임스페이스를 입력할 때 들여쓰기를 제거하여 전체 파일에 자동으로 적용되는 기본 네임스페이스를 설정할 수 있다는 것이 방금 열렸습니다 👇

NameSpace HelloWorld; public class Hello 
 { 
 static void Main (string [] args) 
 { 
 System.Console.WriteLine ("¡Hello World!"); 
 } 
 }


파일 범위 네임스페이스를 사용하여 파일에 네임스페이스 블록을 추가하고 중첩된 네임스페이스를 생성한다고 가정합니다.

간단한 예를 살펴보겠습니다 👇

namespace Company.Product;
 Company.Product.Componentnamespace Component{
 }



🔼 C# 10 필드 키워드



상당한 시간이 지난 후 전체 C# 개발 팀이 코드를 최적화했습니다. 자체 배포 속성은 훌륭하지만 지금까지만 사용할 수 있습니다.

여러 번 클래스에 지원 필드를 추가하고 평소와 같이 속성 메서드를 작성해야 합니다.

C# 10의 새로운 기능에는 자동으로 생성된 지원 필드를 노출하는 field 키워드가 있는 새로운 백도어가 있습니다.

public record Employee
 {
 public required string Name { get; init; }
 public decimal Salary { get; init; }
 public DateTime Date{ get; init => field = value.Date(); }
 }


청소 코드는 매우 훌륭하고 매우 간단하며 거의 선언적입니다. 가장 좋은 점은 field 키워드를 사용하여 set, init 또는 get 등 모든 프로세스에서 백업 필드에 액세스할 수 있다는 것입니다.

속성이 일반 클래스에서 어떻게 유효한지 봅시다 👇

private string _firstName;public string Name
{
 get
 {
 return _tName;
 }
 set
 {
 if (value.Trim() == "")
 throw new ArgumentException("No blank strings");_Name = value;
}
}


이제 자동 구현 속성 및 필드를 사용할 수 있습니다 👇

public string tName {get;
    set
    {
        if (value.Trim() == "")
            throw new ArgumentException("No blank strings");        field = value;
    }
}


백업 필드를 선언할 필요가 없기 때문에 데이터 유형을 변경할 필요가 없는 경우입니다.


🔼 C# 10 개체 초기화



C# 팀이 집중하고 있는 목표 중 하나는 개체 초기화를 더 쉽게 만드는 것입니다. 그렇기 때문에 필요에 따라 클래스, 구조체, 레코드 또는 레코드 구조체의 속성에 플래그를 지정할 수 있습니다. 해당 속성을 반드시 입력해야 합니다.
보자 👇

class Person
{
public required string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}


이는 생성자를 통해 수행하거나 개체 초기화를 통해 수행할 수 있습니다. 아래의 두 클래스 정의는 동일합니다. 필수 키워드로 작성하면 Name 속성을 설정하지 않고 Person을 인스턴스화할 수 없습니다.

컴파일러는 오류를 발생시키고 컴파일에 실패합니다 👇

class Person
{
public Person(string name) => Name = name;
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}


속성을 더욱 개선하기 위해 지원 필드를 모두 제거할 수 있습니다. 새 키워드 필드는 해당 지원 필드에 대한 액세스를 제공합니다.

이것은 초기화 전용 속성으로 두 setter 모두에 사용할 수 있습니다.

class Person
{
public string Name { get; init => field = value.Trim(); }
public DateTime DateOfBirth { get; set => field = value.Date; }


다음 버전에서도 몇 가지 멋진 작은 개선 사항이 있을 것입니다. 하나는 with 연산자가 익명 유형도 지원한다는 것입니다.

var ByteHide = new
{
Name = "ByteHide",
Email = "[email protected]"
};
var bar = ByteHide with {Name = "Bar"};



🟢 결론:



이 기사를 마무리하기 위해 ByteHide에서 우리의 결론은 C#이 아직 앞으로 몇 년이 남았고 프로그래밍 작업을 훨씬 더 쉽고 최적으로 만들기 위해 추가해야 할 것이 여전히 많다는 것입니다.

어떻게 생각해?🤔

좋은 웹페이지 즐겨찾기