소스 생성기 쿡북 / roslyn

이 문서는 공통 패턴에 대한 일련의 지침을 제공하여 소스 생성기 생성을 돕는 가이드가되는 것을 목표로합니다. 또한 현재 설계에서 가능한 생성기 유형과 배송 기능의 최종 설계에서 명시 적으로 범위를 벗어날 것으로 예상되는 생성기를 설정하는 것을 목표로합니다.

1 Like

Source Generator는 많은 이야기를 들었는데 잘 와닿지가 않는 것 같아요.
혹시 이를 사용하는 시나리오가 어떤 것들이 있을까요?

1 Like

쿡북을 살펴보면 다양한 사례가 나옵니다.

1 Like

아까 운전하면서 댓글을 달아 ( 친절한 답변이 되지 못해; ) 좀 더 보충 설명을 하자면,

  1. NativeAOT에 대응하기 위해 .NET 6에서는 리플렉션으로 구현한 대부분의 기능들을 소스 생성기로 변경작업을 하고 있습니다. 대표적인 예로, System.Text.Json에서 클래스 인스턴스와 JSON 간의 직렬/역직렬을 소스 생성기를 통해 구현하고 있는것으로 알고 있습니다.

  2. 반복적인 코드 패턴을 소스 생성기를 통해 단순화 할 수 있습니다.
    이것도 어떻게 보면 1. 의 기존 리플렉션으로 구현되어 있는 것을 코드 생성기로도 가능하다는 것으로 말 할 수 있을텐데요, 예를 들어 INotifyPropertyChanged 인터페이스를 직접 매번 구현하는 것은 번거롭기도 하고 지루하기도 하고 코드 가독성이 떨어지는 코드를 만들게 될 텐데요, INotifyPropertyChanged를 구현해야 하는 이유는 바인딩과 깊은 관련성이 있을텐데, 이를 소스 생성기를 통해 간략히 다음과 같이 (Fody의 구현체와 유사하게!) 변경할 수 있게 됩니다.

using AutoNotify;

public partial class UserClass
{
    [AutoNotify]
    private bool _boolProp;

    [AutoNotify(PropertyName = "Count")]
    private int _intProp;
}

다시 정리해보자면, 런타임에 결정되지 않아도 되는 모든것들이 대상이 될 수 있겠네요.

3 Likes