XAML의 사용에 평소 약간의 불만이 있는 개발자라면 흥미로울 수 있는 내용입니다.
요약
ENAMEL은 XAML을 작성하는 새로운 대안으로, UI를 정의하는 간결한 마크업 언어입니다. 기존 XAML의 장황함과 여러 문제점을 해결하고, UI 마크업을 일반 코드 파일처럼 다루도록 하는 것을 목표로 합니다.
ENAMEL 파일은 WPF, .NET MAUI, WinUI 앱에서 사용되는 XAML 파일로 자동 변환됩니다. 따라서 기존 개발 도구나 코드베이스를 변경할 필요 없이, 선택적으로 도입하여 위험 부담을 줄일 수 있습니다. 예를 들어, .NET MAUI의 빈 페이지를 정의하는 여러 줄의 XAML 코드는 ENAMEL에서는 'ContentPage’라는 한 단어로 표현 가능합니다.
ENAMEL은 더 간단하고, 사람이 읽기 쉬우며, 유지보수가 용이한 UI 마크업을 지향합니다. 현재 아이디어를 구체화하고 확장하는 단계에 있으며, GitHub에서 자세한 내용을 확인할 수 있습니다.
상세
-
ENAMEL 개요:
- XAML 기반 UI 개발을 위한 새로운 제안(RFC)으로, 더 간결하고 현대적인 마크업 언어입니다.
.enml
파일로 작성하면 기존 XAML 파일(.xaml
)로 자동 변환되어 WPF, .NET MAUI, WinUI 등에서 컴파일됩니다.- "Experimental Native Application Markup Extension Language"의 약자입니다.
-
개발 동기:
- XAML은 약 20년간 큰 변화 없이 사용되어 왔으며, 장황하고 가독성이 낮으며 작업하기 어렵다는 평가를 받습니다.
- 직접적인 XAML 변경은 기존 코드 및 도구 호환성 문제로 어렵기 때문에, XAML을 생성하는 새로운 언어를 제안합니다.
-
주요 장점:
- 간결성: XAML 대비 코드량이 현저히 줄어듭니다 (예: MAUI의 빈
ContentPage
를 한 단어로 표현). - 가독성 및 유지보수성 향상: 사람이 읽기 쉽고 이해하기 쉬운 문법을 지향합니다.
- 낮은 도입 위험: 기존 XAML 파일은 그대로 유지되며, 부분적/점진적 도입이 가능합니다. 실험 후 미채택 시에도 프로젝트는 문제없이 작동합니다.
- 기존 도구 호환성: 생성된 XAML을 사용하므로 기존 컴파일러, IDE, CI/CD 시스템 변경이 불필요합니다.
- 유연성 및 확장성: XAML 자체의 제약을 받지 않아 새로운 기능 추가가 용이합니다.
- 간결성: XAML 대비 코드량이 현저히 줄어듭니다 (예: MAUI의 빈
-
주요 기능 및 문법:
- 기본 문법:
- 요소(Element)는 이름만으로 정의하며, 각 요소는 새 줄에서 시작하고 들여쓰기로 부모-자식 관계를 표현합니다.
- 속성(Attribute)은 요소 이름 뒤 또는 다음 줄에 정의하며, 공백 없는 값은 따옴표를 생략할 수 있습니다.
- 여러 속성에 동일한 값을 지정하거나(
&
사용), 자식 요소로 속성을 정의할 때 부모 요소 이름을 생략할 수 있습니다(.
접두사 사용). #
기호로 줄 전체를 주석 처리하거나,~
기호로 개별 속성을 생성 결과에서 제외할 수 있습니다.
- 설정 파일 (
enamel-settings.json
):- XAML 네임스페이스 자동 추가, 기본 속성(예: Label의 Text), 기본 마크업 확장(예: Binding), 약어(축약어) 확장(예: ItemTemplate → ItemTemplate, DataTemplate), 요소/속성 이름 대체(예: VSL → VerticalStackLayout) 등 다양한 사용자 정의 설정을 통해 유연성을 제공합니다.
- 고급 기능 (키워드):
AUTOGRID
: Grid의 자식 요소에 자동으로Grid.Row
,Grid.Column
값을 할당합니다.FOR
/FOREACH
: 숫자 범위 또는 문자열 목록을 반복하여 UI 요소를 생성합니다.
- 인라인 C# 이벤트 핸들러:
- 이벤트 속성 값으로
@
기호로 감싼 C# 코드를 작성하면, 해당 코드를 포함하는 이벤트 핸들러가 별도의 C# 파일에 자동으로 생성됩니다. (예:Clicked="@ count=0; @"
)
- 이벤트 속성 값으로
- 기본 문법:
-
명칭 이유 (“ENAMEL”):
- 실제 단어, 기술 분야에서 중복되지 않음, 발음 용이, 좋은 약자, XAML과의 철자 유사성, 견고함/미려함(도자기 에나멜) 등의 긍정적 연관성을 가집니다.
-
현재 상태 및 목표:
- ENAMEL은 아이디어와 가능성에 대한 논의를 촉진하기 위한 RFC(Request for Comments) 단계입니다.
- 개념 증명용 프로토타입은 존재하지만, 언어 사양 및 컨셉 논의에 집중하기 위해 현재 공개되지 않았습니다.
- XAML 개발 방식에 대한 작고 점진적인 개선이 아닌, 과감하고 큰 변화를 모색하는 것을 목표로 합니다.