-
.Net Multiplatform칼럼 2023. 11. 3. 23:08
Kotlin Multiplatform???
요즘 멀티 플랫폼 업계는 매우 혼란합니다.
React Navtive , Flutter, DotNet Maui, Avaloinia, Uno Platform, Kotlin Multiplatform 까지
수 많은 개발 플랫폼이 나와 있고 서로 경쟁적으로 릴리즈를 이어가고 있습니다.
오늘은 닷넷 기술을 사용하는 멀티 플랫폼 기술에 대해 설명하고자 합니다.
닷넷으로 개발되는 멀티 플랫폼은 아래와 같습니다.
- Maui
- Avalonia
- Uno Platform
각 플랫폼을 살펴 보겠습니다.
1. .Net Maui
닷넷 마우이는 자마린 Next로 만든 멀티 플랫폼입니다.
자마린의 한계를 극복하고자 새로운 방식, 각 플랫폼의 Native Control에 바인딩한다는 개념으로 만들어진 플랫폼 입니다.
[maui의 button 동작]
닷넷 마우이의 단점은 Native Control에 바인딩 하는 것이 문제 입니다.
이것이 의미하는 바는 이렇습니다.
개발자는 하나의 버튼만 만듭니다.
바로 마우이의 선언된 버튼 컨트롤(실제로 존재하지 않는)이죠.
그리고 그 선언된 버튼은 각 플랫폼, 예를들어, IOS, Windows, Android 이렇게 3개의 플랫폼의 Native 버튼에 바인딩 됩니다. (실제로 존재하는)
버튼이 동작하는 것에서는 문제가 없습니다. 클릭하거나 터치하면 버튼이 눌리고 이벤트가 발생합니다.
하지만 UI 관점에서는 각 플랫폼의 버튼 UI가 모두 다릅니다.
모서리에 대한 라운드도 다르고 기본 길이(Pixcel)에 대한 처리도 모두 다릅니다.
UI 개발자가 각 플랫폼마다 모두 다르게 처리해야 하는 문제가 아직도 해결되지 못한 것입니다.
이 부분이 MAUI와 Flutter 간에 극명한 온도차 입니다.
Flutter는 Material Design에 따라 똑같이 그리는 것입니다.
- 실제로 버튼을 그리고 있습니다. -
MAUI는 Navtive UI에 따라 똑같이 바인딩 하는 것입니다.
- 추상화된 선언에 따라 네이티브 UI를 그리고 추상화된 버튼을 실제 버튼에 바인딩 합니다. -
따라서, UI관점에서는 Flutter가 모든 점에 있어서 좋아 보입니다.
하나의 코드로 똑같이 그리고(aka. Skia) 있습니다.
2. Avalonia
Avalonia는 데스크탑 어플리케이션을 멀티 플랫폼화 하기 위해 출발한 프로젝트입니다.
그 근본은 WPF입니다.
따라서, xaml을 사용한 선언형 UI tag를 사용하여 UI 개발을 하게 됩니다.
특이하게도 Avalonia가 취한 형태는 Flutter와 같습니다.
Avalonia의 UI 컨트롤은 Native 컨트롤이 아닙니다. Avalonia가 SkiaSharp 엔진을 사용하여 화면을 그리고 있습니다.
따라서, WPF개발자가 데스크탑 네이티브 개발을 해야 하고 윈도우, 리눅스와 MacOS에서 모두 개발해야 한다면 사용할 수 있는 유일한 데스크탑 멀티 플랫폼 입니다.
단점은, 안타깝게도, 미러한 UI형태를 보여주지 못합니다.
극명한 대비는 WinUI와 Avalonia로 개발된 화면을 보면 드러납니다.
도드라지는 픽셀,
각진 컨트롤,
낮은 해상도로 표시되는 것 같은 컨트롤들...
Avalonia는 아주 소규모(상대적으로)의 Community이고 따라서 메인 프로그래머들이 급여나 이슈들을 모두 해결해 나갈 여력이 적습니다.(상대적으로)
그리고 올해 발표되었던
의 유료 서비스의 성공 여하에 따라 Avalonia의 미래가 달려 있습니다.
(사실, 그 동안 Avalonia의 대부분의 개발 인력은 XPF 개발에 투입되었습니다.)
3. Uno Platform
사실 이렇게 글을 작성하게된 계기가 Uno Platform 5.0 버전이 출시 되어서 입니다.
Uno Platform이 개발되기 시작한 시기는 Maui가 처음 개발되기 시작한 시점과 같습니다.
Maui와 직접적으로 비교될 수 있는 모바일 플랫폼입니다.
Uno Platform이 취한 방식은 Flutter와 동일합니다.
초기에는 xaml을 사용한 MVVM 개발 방식을 취했고 WPF 개발자와 자마린 개발자를 유입하기 위해 노력했습니다.
하지만, 5.0 부터는 Flutter, React Native의 MVU 방식을 드디어 지원합니다.
아직, 정확한 정보가 없지만 HotReload 도 이에 따라 개선된다고 합니다.
만약, Uno Platform이 Flutter와 비슷한 코드 패턴과 Maui의 네이티브 바인딩 사용 등의 장점을 모두 흡수할 수 있다면
진정한 네이티브 멀티 플랫폼의 경쟁자가 될 수 있습니다.
4. 요약
지금까지 닷넷으로 개발할 수 있는 멀티 플랫폼에 대해 알아 보았습니다.
개발자가 닷넷으로 선택할 수 있는 경우의 수는 아래와 같습니다.
1. Window Only : WinUI, WPF, Avalonia
2. Windows + MacOS + Linux : Avalonia
3. IOS + Android + Windows : Maui, Uno Platform
결정적으로 "Maui를 선택해야 할까?" 라는 질문에는 확신있게 대답할 수 없습니다.
그럼 대안은?
Maui + blazor 입니다.
다음에는 maui + blazor 대해 소개해 보겠습니다.
'칼럼' 카테고리의 다른 글
데이터베이스 기술은 '있으면 좋은' 것이 아닙니다. (0) 2023.11.14 개발에 관하여 하고 싶은 이야기 : 파트 2 - 데이터베이스 다중화 (1) 2023.11.14 개발에 관한 하고 싶은 이야기 : 파트1 - 웹 개발과 분산 (1) 2023.11.14 웹 개발자가 되기 전에 반드시 알아야 하는 내용 (0) 2023.11.12 안전한 코드를 작성하는 10가지 방법. (By NASA) (0) 2023.11.04