1.3 Source Generator 란?
1️⃣ Source Generator 개요
📚 Microsoft Docs: Microsoft Learn / Learn / .NET / MVVM

✅ 소스코드 생성기(SG, Source Generator)란?
소스 생성기는 .NET 5부터 도입된 기능으로, 우리가 반복적으로 작성하던 MVVM 관련 C# 코드를 컴파일 타임에 자동으로 생성하여 프로젝트에 생성해 주는 컴파일러 확장 도구입니다.
✅ 사용 방법
개발자가 특정 어트리뷰트[attribute]와 클래스에 partial 키워드 추가와 같은 작업을 해주면
CommunityToolkit.Mvvm 패키지의 Source Generator가
프로젝트가 빌드될 때, MVVM 구현에 필요한 소스코드를 자동으로 생성합니다.
✅ 예제 소스코드
2️⃣ Attribute [어트리뷰트] 란?
✔️ 참고
*Attribute를 '특성'으로 해석해 사용하면, '속성' 등의 용어와 혼동될 상황이 많아서 '어트리뷰트'로 사용한다.
✔️ 사용 문법
[AttributeName]
[AttributeName(parameter1, parameter2, ...)]
※ [RelayCommand]는 실제로 RelayCommandAttribute입니다. Attribute로 끝나지만, 사용할 땐 생략 가능합니다.
✔️ [ObservableProperty] 사용법
[ObservableProperty]
private string userName;
- userName 필드에 [ObservableProperty] 어트리뷰트를 추가하면,
- 빌드 시점에서 자동으로 public string UserName 프로퍼티와
- PropertyChanged 와 같은 이벤트 구현부의 소스코드가 자동 생성됩니다.
✔️ [ICommand ] 사용법
[RelayCommand]
private void ShowGreeting()
- ShowGreetingCommand라는 ICommand 속성을 자동으로 만들어서 XAML에서 사용할 수 있게 해줍니다.
✔️ 핵심 요약
[ ] 안에 사용된 것은 Attribute(어트리뷰트, 특성)이며,
컴파일러나 도구에게 특별한 의미나 동작을 지정하는 메타데이터입니다.
CommunityToolkit.Mvvm 패키지는 어트리뷰트를 활용해 MVVM 코드를 간결하게 자동 생성하게 도와줍니다.
3️⃣ partial 키워드를 사용하는 이유
"수동 작성 코드"와 "자동 생성 코드"를 분리하여 관리 가능하게 함
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Windows;
namespace WpfApp.ViewModels
{
// partial 키워드를 사용하는 이유:
// Source Generator가 자동으로 생성하는 코드(예: UserName 속성, ShowGreetingCommand 명령)를
// 동일 클래스 이름의 다른 partial 파일로 분리하여 추가할 수 있게 해줌
// 즉, 수동 작성 코드와 자동 생성 코드를 분리하여 관리 가능하게 함
namespace WPF_ToolKit01.ViewModel
{
internal partial class MainViewModel : ObservableObject
{
[ObservableProperty]
private string? userName;
[RelayCommand]
private void ShowGreeting()
{
MessageBox.Show($"Hello, {UserName}!");
}
}
}

