Maui: .NET 5์šฉ ํฌ๋กœ์Šค ํ”Œ๋žซํผ UX

์— ๋งŒ๋“  2017๋…„ 07์›” 18์ผ  ยท  31์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dotnet/maui

.NET Core๋Š” ๋ฐ์Šคํฌํ†ฑ ๋˜๋Š” ๋ชจ๋ฐ”์ผ UI๋ฅผ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ v2.1.0๊นŒ์ง€๋Š” ๊ทธ๋Ÿฐ ๋ชฉํ‘œ ์—†์ด ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋งค์šฐ ํฌ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Visual Studio UserVoice์—์„œ๋„ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๊ฐ€์žฅ ๋งŽ์ด ํˆฌํ‘œ๋œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

Microsoft์™€ Xamarin์€ .NET 5 UX ์Šคํƒ์˜ ๊ธฐ๋ฐ˜์„ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ๋Š” XAML ๊ธฐ๋ฐ˜ UX ์ฝ”๋“œ ์Šคํƒ(WPF, UWP, Xamarin Forms, WinUI)์„ ๊ณต๋™์œผ๋กœ ์†Œ์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ XAML-Standard ์— ๋Œ€ํ•œ ์ž‘์—…์€ IMHO๊ฐ€ .NET 5์—์„œ UX์— ๋Œ€ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ธฐ์— ์ข‹์€ ์žฅ์†Œ๊ฐ€ ๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ›จ์”ฌ ๋” ์ค‘์š”ํ•œ Microsoft Fluent Design ์€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ๋Š” ์ ์–ด๋„ ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ์•„๋‹ˆ๋”๋ผ๋„ ์ตœ์†Œํ•œ Windows์—์„œ๋Š” Core UX์— ์ฑ„ํƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ .NET Core๋ฅผ ํ˜„๋Œ€์ ์ด๊ณ  ๋ณดํŽธ์ ์ธ xplat ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœ์˜ ์ตœ์ฒจ๋‹จ์— ๋†“์ด๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ €๋Š” Mac์—์„œ Microsoft Fluent API ๊ธฐ๋ฐ˜ ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. Windows Vista์™€ 7์—์„œ๋Š” ์ƒ๋‹นํžˆ ๋‹ฌ๋ž์Šต๋‹ˆ๋‹ค(์ €๋Š” Mac๊ณผ Windows์—์„œ ๋งค์ผ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค).

๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๋Š” ํ•˜๋“œ์›จ์–ด ์ง€์›์ž…๋‹ˆ๋‹ค. MSFT์™€ Xamarin์ด ํ˜„์žฌ DirectX ๋ฐ OpenGL ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ƒ๋‹นํ•œ ํˆฌ์ž๋ฅผ ํ†ตํ•ด ์ตœ์‹  ํ•˜๋“œ์›จ์–ด ๊ฐ€์† ๊ทธ๋ž˜ํ”ฝ/๋ฏธ๋””์–ด ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐฑ์—”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” .NET Core v2.1.0์šฉ์œผ๋กœ ๋ถ€ํ™œ๋œ ์˜ค๋ž˜๋œ System.Drawing API ์— ๋Œ€ํ•œ ๋Œ€์•ˆ์œผ๋กœ ์ตœ์‹  ๊ทธ๋ž˜ํ”ฝ API๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€์ ์ธ ์ด์ ์ž…๋‹ˆ๋‹ค.

DotNet ๋ฌธ์ œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ด€๋ จ:

System.Xaml์„ .NET Core๋กœ ํฌํŒ…

ํ‘œ์ค€์— WPF ํฌํ•จ(XAML ํ‘œ์ค€)

CoreFX์— Winforms ํฌํŒ…

XAML ํ‘œ์ค€ ๋ฒ”์œ„ ํ† ๋ก 

WinUI 3.0 ๋กœ๋“œ๋งต - ๊ท€ํ•˜์˜ ์˜๊ฒฌ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

WPF, WindowsForms ๋ฐ WinUI(UWP XAML)๋Š” ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค!!!

๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ ์ด์‹ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค.

์ตœ์ข… ์—…๋ฐ์ดํŠธ 2019-05-20

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” Linux ๋ฐ macOS ํฌํŠธ์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@4creators ์ž์‹ ์ด ์†Œ์œ ํ•˜๊ณ  ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ํฌํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

CI ์ธํ”„๋ผ

.NET Core CI ์ธํ”„๋ผ๋Š” ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ง€์ • Jenkins ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜ ๋Œ€์‹  ์ผ๋ฐ˜ Azure DevOps๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Azure DevOps์—๋Š” ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ฌด๋ฃŒ ์ œํ’ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  31 ๋Œ“๊ธ€

๋‚˜๋Š” ์ด ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” Xamarin.Forms ํŒ€์—์„œ ์ฒ˜๋ฆฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์€ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.
์•„๋งˆ๋„ Core ํŒ€์€ UX ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ "๋” ๋‚˜์€"(CoreFxLab์ด ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด)์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ €์ˆ˜์ค€ ๊ตฌ์„ฑ์— ๊ธฐ์—ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: WebAssembly๋„ ์ง€์›๋˜๋Š” ํ”Œ๋žซํผ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ UI ๊ธฐ์ˆ ๋กœ ๊ณ ํ†ต๋ฐ›๋Š” ์‚ฌ๋žŒ๋“ค(์ €๋ฅผ ํฌํ•จํ•˜์—ฌ)์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฏธ๋ž˜์— corehost ์˜ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Android ๋ฐ iOS ๊ธฐ๊ธฐ๋กœ ์ด์‹๋œ .net ์ฝ”์–ด๋ฅผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, UI ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2D xplat ๋“œ๋กœ์ž‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๊ฐ€์† ๋“œ๋กœ์ž‰ ํฌํ•จ)์˜ ๊ฒฝ์šฐ ์˜ˆ๋ฅผ ๋“ค์–ด Skia๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ XAML-Standard๋Š” Fluent Design ์ง€์นจ๊ณผ ํ•จ๊ป˜ UI๋ฅผ "์„ค๋ช…"ํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ .Net Team์—์„œ xplat System.Drawing.X ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•  ๊ณ„ํš์ด ์žˆ๋Š”์ง€ ํšŒ์˜์ ์ž…๋‹ˆ๋‹ค...

@4creators ์•„๋งˆ๋„ ์ด ํ† ๋ก  ์ด ๋‹น์‹ ์—๊ฒŒ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค

@vibeeshan025 WebAssembly๋Š” JavaScript๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€ ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์˜๊ฒฌ์ด ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. WebAssembly๋ฅผ DOM๊ณผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ JavaScript๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์•„๋‹ˆ์š”. ๋‹จ์ˆœํžˆ ๋ฌด์–ธ๊ฐ€๋ฅผ wasm์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  ์ด์ „์— JavaScript๋กœ ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์„ ๋Œ€์ฒดํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ž‘๋™ ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. UI ๊ธฐ์ˆ ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์–˜๋“ค์•„, ์—ฌ๊ธฐ ๋‚ด 5c๋ฅผ ๋„ฃ๊ณ  ์‹ถ๋‹ค.
System.Drawing.X๋Š” .NET Core ๊ฐœ๋ฐœ์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. (๋ฐฉ๊ธˆ https://github.com/dotnet/corefx/issues/20325์—์„œ ์™”์Šต๋‹ˆ๋‹ค)

UI ํ˜„์žฌ - ์›น(ํ”„๋ก ํŠธ ์—”๋“œ) ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋“ค์€ ํ•ซ ๋ฆฌ๋กœ๋“œ์™€ ๊ฐ™์€ ํ˜„๋Œ€์ ์ธ ํŠธ๋ฆญ์„ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ React/ReactNative์—์„œ ์ง„ํ–‰๋˜๋Š” ์ƒํ™ฉ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. C#์„ ์‚ฌ์šฉํ•˜์—ฌ React๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ ๋ Œ๋” ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ๋ฉ‹์ง„ ์ผ์ž…๋‹ˆ๋‹ค.

FWIW, Mono๋Š” WebAssembly๋ฅผ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ Mono์—์„œ ์ž‘๋™ํ•˜๋ฉด WebAssembly์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๊ทธ๊ฒƒ์ด ์ ์–ด๋„ ํ˜„์žฌ์˜ ์ƒ๊ฐ/์ดํ•ด์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ .NET/MSFT๊ฐ€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ™•๋ฅ ์— ๋Œ€ํ•œ ๊ฐ์ •์„ ๋ฐ˜์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ๋ชจ๋“  ์ดˆ์ /IQ๋Š” ํ•ต์‹ฌ/๋‚ด๋ถ€/ํ”„๋ ˆ์ž„์›Œํฌ/๊ทธ๋ƒฅ ์ž‘์—…์— ๋ฐฐ์น˜๋˜์—ˆ์œผ๋ฉฐ ์•ž์œผ๋กœ 1๋…„ ์ •๋„๋Š” ์ด๋Ÿฌํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ˆ„๊ฐ€ ์•Œ๊ฒ ์Šต๋‹ˆ๊นŒ? (๊ธฐ๋ถ„ ์ข‹๊ฒŒ) ๋†€๋ž„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๋‚ด ๊ฒฌํ•ด๋Š” ์ผ๋ถ€ ์™ธ๋ถ€ ๋…ธ๋ ฅ์ด ์ถ”์ง„๋ ฅ์„ ์–ป๊ณ  ์•„๋งˆ๋„ MSFT, ala Xamarin์— ์˜ํ•ด ๊ตฌ๋งค๋  ๊ฒƒ์ด์ง€๋งŒ ๋” UI ์ค‘์‹ฌ์ž…๋‹ˆ๋‹ค(Xamarin์˜ ํ•ต์‹ฌ ๊ฐ•์ ์ธ IMO์ธ ํ”„๋ ˆ์ž„์›Œํฌ/๋„๊ตฌ ์ค‘์‹ฌ๊ณผ ๋ฐ˜๋Œ€). ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ ์˜คํ”ˆ ์†Œ์Šค ๋ฐ ์œ ๋ฃŒ ์ฑ„๋„์„ ํ†ตํ•ด ๊ฐ€์น˜ ์ œ์•ˆ์„ ์ œ๊ณตํ•˜๋Š” Avalonia ๋˜๋Š” Noesis ์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ง๋ถ™์—ฌ์„œ, ๋‘˜ ๋‹ค ๋‚ด์žฅ/์ง€์› Mono์ž…๋‹ˆ๋‹ค.

Silverlight๋Š” ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

  1. ์˜คํ”ˆ ์†Œ์Šค Silverlight ์ฝ”๋“œ
  2. dotnet ์ฝ”์–ด ๋Ÿฐํƒ€์ž„ ์œ„์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์— ๋‹ฌ๋น› ์‚ฌ์šฉ
  4. "Electron"์— ๋Œ€ํ•œ dotnet ํ•ต์‹ฌ ๋Œ€์•ˆ ๋งŒ๋“ค๊ธฐ(๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ + ์—„์ฒญ๋‚œ ์„ฑ๋Šฅ ํ–ฅ์ƒ + xaml ์žฅ์ )
  5. ๊ธฐ๋ณธ ์ปดํŒŒ์ผ(์–ธ์  ๊ฐ€ corert ํ”„๋กœ์ ํŠธ๊ฐ€ ๋น›์„ ๋ณผ ๊ฒฝ์šฐ)

๊ด€๋ จ์„ฑ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค- http://platform.uno

@gulshan ํฅ๋ฏธ๋กญ๊ณ  ํ›Œ๋ฅญํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. UWP ๊ธฐ๋Šฅ์˜ ๋Œ€๋ถ€๋ถ„์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‹จ 4๋ช…์˜ ๊ธฐ์—ฌ์ž๋กœ ๋งค์šฐ ์งง์€ ์‹œ๊ฐ„์— ์ด๋ ‡๊ฒŒ ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@vibeeshan025 IIRC์— ์ž๊ธˆ์„ ์ง€์›ํ•˜๋Š” ํšŒ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค...

ํƒ์ƒ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฏธ๋ž˜ - HTML/CSS + .net(JS/TS ๋Œ€์‹ ). ์—ฌ๊ธฐ์—์„œ ์ด๋ฏธ ์‹œ๋„ ์ค‘์ž…๋‹ˆ๋‹ค-
https://github.com/SteveSandersonMS/BlazorElectronExperiment.Sample

์กฐ์‚ฌํ•œ ๊ฒฐ๊ณผ tcl/tk๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์— ๋Œ€ํ•œ GUI ์˜ต์…˜์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Windows์—์„œ tcl/tk๊ฐ€ ์‹ค์ œ gdiplus ํ•ญ๋ชฉ์„ ํ˜ธ์ถœํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ WPF ๋ฐ Winforms๋ฅผ Linux, Mac, Windows, Android, iOS, ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ webforms๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์˜ต์…˜์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. tcl/tk๊ฐ€ ๋งˆ์ง€๋ง‰ 3๊ฐ€์ง€๋ฅผ ์•„์ง ์ง€์›ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด GUI ์ง€์˜ฅ์„ ๋‹จ์ผ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ:

  • TclBridge (๋ฌด๋ฃŒ ๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค๋กœ ๋ณด์ด์ง€ ์•Š์Œ)
  • ๋ชจ๋…ธ ํ•˜๋‚˜ (์•„๋งˆ๋„ ์ตœ๊ณ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค)
  • ๋…์ˆ˜๋ฆฌ (์–ผ๋งˆ๋‚˜ ์ข‹์€์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ)
  • ์•„๋งˆ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

cpython์˜ tkinner ๋ชจ๋“ˆ์—์„œ tcl/tk๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ .NET Core๊ฐ€ *.resources(์ปดํŒŒ์ผ๋œ resx) ๋˜๋Š” *.resx์—์„œ ๋ฆฌ์†Œ์Šค ๋กœ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋„ ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Microsoft.DesktopUI.App ํ˜„์žฌ v3.0.0-alpha-26921-3์€ Windows .NET Core SDK ์˜ ์ผ์ผ ๋นŒ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GDC ๋ฐ DirectX์— ๋Œ€ํ•œ ์ผ๋ถ€ ๋ฒˆ์—ญ ๊ณ„์ธต์—์„œ Linux์—์„œ ์‹คํ–‰ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋ฌด์—‡์ด ํ•„์š”ํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

ํฌ๋กœ์Šค ํ”Œ๋žซํผ UX ๊ทธ ์ด์ƒ์„ ํ•„์š”๋กœ ํ•˜๋ฉฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
UX์—๋งŒ ๊ตญํ•œํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ˆ˜์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ SilverLight + RIA-Services์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ˆ˜์‹ญ ๋…„ ๋™์•ˆ ์ง€์†๋  ๋Œ€๊ธฐ์—…์„ ์œ„ํ•œ ๊ฑฐ๋Œ€ํ•œ ๋งž์ถคํ˜• ์‹œ์Šคํ…œ์„ ์ž‘์„ฑํ•  ๋•Œ๋Š” 1๋…„(๋˜๋Š” 10๋…„) ํ›„์— ์–ด๋–ค ์š”๊ตฌ ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋ ์ง€ ์ „ํ˜€ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ชจ๋“  ์˜ต์…˜์„ ์—ด์–ด ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. UWP์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ณ ๋ ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์˜ ๋ชจ๋“  ๋‹จ์ผ ๊ธฐ๋Šฅ, API ๋ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์™„์ „ํ•˜๊ณ  ๋ฌด์ œํ•œ์ ์ธ ๊ธฐ๋ณธ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•  ๋•Œ REST ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ด๋Š” ์„œ๋ฒ„๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋„๋ก ์˜๋„๋จ). ๋Œ€์‹  ์„œ๋ฒ„ API๋ฅผ ์ •์˜ํ•œ ๋‹ค์Œ ์„œ๋ฒ„์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ(===) ํด๋ž˜์Šค ๋ฐ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” RIA์˜ ์ •์‹ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์€ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” SQL ์„œ๋ฒ„์˜ ํ•„๋“œ(๋˜๋Š” ์‚ฌ์šฉ ์ค‘์ธ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์†Œ์Šค)์—์„œ ์–ป์€ ์—„๊ฒฉํ•œ ์ œํ•œ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  DataAnnotations์— ์˜ํ•ด ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ์ œํ•œ์€ ์ž๋™์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์— ๋๊นŒ์ง€ ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค(ํ˜„์ง€ํ™” ๊ณ ๋ ค).

์ด๊ฒƒ์ด ํ•„์š”ํ•œ ๊ฒƒ์ด๋ฉฐ ๊ทธ ์ดํ•˜๋„ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์œ ๋น„์ฟผํ„ฐ์Šค .NET ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ชจ๋ธ ์ƒ์„ฑ

์ด์ œ Visual Basic 6์ด ์ถœ์‹œ๋œ ์ง€ 20๋…„์ด ์ง€๋‚ฌ๊ณ  1998๋…„ ๋‹น์‹œ์˜ ์ƒ์‚ฐ์„ฑ์— ๊ทผ์ ‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.Microsoft๋Š” "Microsoft ์„ธ๊ณ„"์—์„œ ๋” ํฐ ์‚ฌ์šฉ์ž ์ง€์ • ์‹œ์Šคํ…œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ 20๋…„ ์ „์˜ ์ƒ์‚ฐ์„ฑ์„ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋น„์ „์„ ์ œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋Š” ๊ทธ๋“ค์˜ ๋˜ฅ์„ ํ•œ๋ฐ ๋ชจ์•„ ํ•œ๋ฐœ ๋” ๋‚˜์•„๊ฐ€ ๊ทธ๋“ค์ด ๊ฐ€์ง„ ์ฑ…์ž„์„ ๋ฐ›์•„๋“ค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. Microsoft๋Š” ์ˆ˜์‹ญ ๋…„ ๋™์•ˆ MS ๊ธฐ์ˆ ์— ๋ง‰๋Œ€ํ•œ ํˆฌ์ž๋ฅผ ํ•œ ๋ชจ๋“  ๊ณ ๊ฐ, ํŒŒํŠธ๋„ˆ ๋ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ํฌ๊ฒŒ ์‹ค๋งํ–ˆ์œผ๋ฉฐ MS์— ๋Œ€ํ•œ ์‹ ๋ขฐ๊ฐ€ ๋งค์šฐ ๋‚ฎ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ธ์‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. MS๋Š” ๊ณ ๊ฐ, ํŒŒํŠธ๋„ˆ ๋ฐ ๊ฐœ๋ฐœ์ž๋ฅผ ์กด์ค‘ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ๋ช…์„ฑ๊ณผ ์กด๊ฒฝ์„ ์žฌ๊ฑดํ•ด์•ผ ํ•˜์ง€๋งŒ ํ˜„์žฌ Skype๋กœ ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๊ณ  Skype ๊ณ ๊ฐ๊ณผ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด๋ฉด ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๊ธฐ๋ฅผ ๊ฑฐ์˜ ํฌ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Xamarin์€ ์žŠ์–ด๋ฒ„๋ฆฌ์„ธ์š”. Microsoft๋Š” ์ž์ฒด์  ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€๋„ ์•Š๊ณ , ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” Xamarin์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ElectronJS ํ”„๋ ˆ์ž„์›Œํฌ(Chromium, Node.js, JavaScript ๋ฐ CSS ๊ธฐ๋ฐ˜)์™€ ๊ฐ™์€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ฉ”๋ชจ๋ฆฌ ํ˜ธ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์‹ค์ œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

@Bartolomeus-649

์ด์ œ Visual Basic 6์ด ์ถœ์‹œ๋œ ์ง€ 20๋…„์ด ์ง€๋‚ฌ๊ณ  1998๋…„ ๋‹น์‹œ์˜ ์ƒ์‚ฐ์„ฑ์— ๊ทผ์ ‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปดํ“จํ„ฐ์™€ ์ธํ„ฐ๋„ท ์‚ฌ์šฉ์˜ ํ™•์‚ฐ๊ณผ ํ”Œ๋žซํผ์˜ ๋‹ค์–‘์„ฑ(OS/์ด๋™์„ฑ/ํผํŒฉํ„ฐ)์€ 1998๋…„๋งŒํผ ๋‚ฎ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด "๋‹น์‹ ์˜ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ค„ ์‚ฌ๋žŒ"์„ ์š”๊ตฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹ค์–‘์„ฑ์ด ์กด์žฌํ•˜๋Š” ์ด์œ ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๋™์ผํ•œ ์šด์˜ ์ฒด์ œ์—์„œ ๋™์ผํ•œ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. "๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”"๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ž‘์€ ๊ธฐ๋Šฅ ์„ธํŠธ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Xamarin์€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํ”Œ๋žซํผ๋ณ„ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ตœ์ƒ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋ฐ”์ผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ์šฐ์ˆ˜ํ•œ ์ถ”์ƒํ™”๋ผ๋„ ์ƒ์‚ฐ์„ฑ์ด ๋†’์€ ๋ฐ์Šคํฌํ†ฑ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ๋„์›€์ด ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๋งํ•˜๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ์š”์ ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์ง„์ˆ ์ด ์•„๋‹Œ ํŠน์ • ์ž‘์—…์— ์ ์šฉ๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ด๋‚˜ ๊ด€์ฐฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋” ๋‚˜์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ฒฝํ—˜์„ ํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์‰ฝ๊ฑฐ๋‚˜ ์‹œ๊ฐ„์˜ ์‹œํ—˜์„ ๊ฒฌ๋””์ง€ ๋ชปํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. WebAssembly ๋ฐ Electron๊ณผ ๊ฐ™์€ ์…ธ, PWA ๋ฐ ์นœ๊ตฌ๋“ค์ด ํ–ฅํ›„ 5๋…„ ์•ˆ์— ์ตœ๊ณ ์˜ ์†”๋ฃจ์…˜์œผ๋กœ ๋ฐœ์ „ํ•˜๋”๋ผ๋„ 20๋…„ ํ›„์—๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ผ์„ ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ).

Microsoft๋Š” ์šฐ๋ฆฌ์˜ ๊ธฐ๋Œ€์™€ ์˜คํ”ˆ ์†Œ์Šค UX ํ”„๋ ˆ์ž„์›Œํฌ์— ๋ถ€์‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ ์ด์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ MSFT๋Š” ์–ด๋–ค ํฌํŠธ์—์„œ๋„ ์ž‘์—…ํ•  ๊ณ„ํš์ด ์—†๋‹ค๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ๋ฐํ˜”์œผ๋ฏ€๋กœ ์ด ์ž‘์—…์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋งก๊ฒจ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@Richlander @karelz @AdamYoblick @llongley @kmahone

์ œ ์งˆ๋ฌธ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ธฐ์กด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์˜ Linux ๋ฐ macOS ํฌํŠธ, ์ฆ‰ ๋ณ„๋„์˜ ๋ถ„๊ธฐ์—์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•„๋‹ˆ๋ฉด ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” MSFT CI ์ธํ”„๋ผ์™€ ํฌํŠธ๋ฅผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค.

Xamarin.Forms/Avalonia/Platform.Uno๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ํ”Œ๋žซํผ ๊ฐ„ XAML์„ ๊ฐ€์ ธ์˜ค๋ ค๋Š” ์ƒˆ๋กœ์šด ์‹œ๋„๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์ „์ฒด์— ๊ฑฐ์˜ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

4creators๊ฐ€ ์•„๋‹ˆ๋ผ 2ยข/impressions:

  • Xamarin.Forms๋Š” ์ฃผ๋กœ ๋ชจ๋ฐ”์ผ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ค‘์ ์„ ๋‘๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • Platform.Uno๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
  • ์•„๋ฐœ๋กœ๋‹ˆ์•„๋Š” ์•„์ง ํ™ฉ๊ธˆ๊ธฐ๋ฅผ ๋งž์ดํ•  ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ฏฟ๊ณ  ์‹ถ์–ด ๋„ˆ๋ฌด ๋ฒ„๊ทธ. (์ง€๋‚œ๋ฒˆ์— ํ™•์ธํ•˜๋Ÿฌ ๊ฐ”์„ ๋•Œ ๋ฐ๋ชจ ์•ฑ์€ ํ˜„์žฌ์˜ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค์—์„œ๋„ ๋นŒ๋“œ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ž์‹ ๊ฐ์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.)

์—ฌ๊ธฐ์„œ WPF ๋˜๋Š” Winforms์˜ ํ”Œ๋žซํผ ๊ฐ„ ํฌํŠธ๊ฐ€ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. (IMO, Winforms์˜ API ํ˜ธํ™˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํฌํŠธ๋Š” ์• ์ดˆ์— ์ข‹์€ ์•„์ด๋””์–ด๋„ ์•„๋‹™๋‹ˆ๋‹ค. WPF์— ๋Œ€ํ•œ ์–ธ๊ธ‰์€ ์—†์Šต๋‹ˆ๋‹ค.) ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ์กด ์†”๋ฃจ์…˜๋„ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์ . ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ธฐ์กด ์†”๋ฃจ์…˜์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „ ์†”๋ฃจ์…˜๋ณด๋‹ค ๋น„์šฉ์ด ํ›จ์”ฌ ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ NoesisGUI์˜ ๋ฌธ์ œ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” Linux ๋ฐ macOS ํฌํŠธ์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@4creators ์ž์‹ ์ด ์†Œ์œ ํ•˜๊ณ  ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ํฌํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

CI ์ธํ”„๋ผ

.NET Core CI ์ธํ”„๋ผ๋Š” ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ง€์ • Jenkins ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜ ๋Œ€์‹  ์ผ๋ฐ˜ Azure DevOps๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Azure DevOps์—๋Š” ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ฌด๋ฃŒ ์ œํ’ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

dotnet/winforms์— ๋Œ€ํ•ด์„œ๋งŒ ๋งํ•˜๊ธฐ:

Winforms๋Š” ์ด๋ฏธ AzureDevOps๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋งˆ์Šคํ„ฐ์— ๋Œ€ํ•œ ๋ชจ๋“  PR์€ PR CI ๋นŒ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์ž‘์—…์€ ํฌํฌ์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ž์‹ ์˜ ๋ถ„๊ธฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก dotnet/winforms์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณต๊ฐœ ๊ธฐ๋ถ€๋กœ ์ธํ•ด ์ €์žฅ์†Œ๊ฐ€ ์ƒ๋‹นํžˆ ์˜ค์—ผ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๊ทธ๋Ÿฐ๋ฐ NoesisGUI์˜ ๋ฌธ์ œ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์–ด์ฉ์ง€ ๋„ค์˜ค์‹œ์ŠคGUI๋Š” ๋‹ค์–‘ํ•œ UI ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ์—์„œ ์ œ์™ธ๋˜์–ด ๋‹ค์‹œ ์‚ดํŽด๋ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ธ์ƒ์€ ๊ฒŒ์ž„ ๋‚ด UI๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๋„๊ตฌ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ปจํŠธ๋กค ๋ชฉ๋ก์„ ๋ณด๋ฉด ์ด๊ฒƒ์€ ์ž˜๋ชป๋œ ๊ฐ€์ •์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) ๊ฒŒ์ž„ ๋‚ด UI์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ์˜ ์š”๊ตฌ๊ฐ€ ๋ฏธ๋ž˜ ๋น„์šฉ์„ ์ •๋‹นํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์–ด๋–ค ์ด์œ ๋กœ๋“  Nintendo Switch๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋ถ„๋ช…ํžˆ ๊ทธ๊ฒƒ์€ ์ง„ํ–‰์ค‘์ธ ์ž‘์—…์ž…๋‹ˆ๋‹ค .)

@4creators ์ด ๋ฌธ์ œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ์˜ ํ˜ผ๋™์œผ๋กœ ์ธํ•ด ์ œ๋ชฉ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฒซ์งธ, .Net UI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‹ค๋ฅธ .Net ๋Ÿฐํƒ€์ž„ ๋Œ€์‹  .Net Core๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉ ํ•ฉ๋‹ˆ๋‹ค. WPF๋Š” ์ด์ œ .Net Core์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Xamarin.iOS/Android/Mac/GTK๋„ .Net Core์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Mono ๋˜๋Š” .Net Framework๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ์„ฑ๋Šฅ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ๋กœ์šด ํ”Œ๋žซํผ ๊ฐ„ UI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ƒ์„ฑ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์—์„œ ์ฐธ์กฐํ•˜๋Š” ์Šค๋ ˆ๋“œ์™€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒŒ์‹œ๋ฌผ์€ ์ƒˆ๋กœ์šด ํ”Œ๋žซํผ ๊ฐ„ UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋Ÿฐํƒ€์ž„์€ ์ฃผ์š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์Šค๋ ˆ๋“œ๋Š” ์‹ค์ œ ๊ตฌํ˜„(๋Œ€๋ถ€๋ถ„ ๊ธฐ๋ณธ ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋Š” Xamarin.Forms ๋ฐ ๊ณตํ†ต ๋ Œ๋”๋ง์„ ์‚ฌ์šฉํ•˜๋Š” Avalonia)์ด ํ•ด๊ฒฐํ•œ ํ”Œ๋žซํผ ๊ฐ„ UI ๊ตฌํ˜„์˜ ์‹ค์ œ ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ฐ์Šคํฌํ†ฑ ์ปจํŠธ๋กค(ํ•˜๋“œ ์•„๋‹˜)์„ ์ถ”๊ฐ€ํ•˜์—ฌ Xamarin.Forms ๋ฐ์Šคํฌํ†ฑ ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ๊ฒฝ์šฐ Avalonia๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐ ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ƒˆ๋กœ์šด ํ”Œ๋žซํผ(๊ธฐ์กด ๋‹จ์ผ ํ”Œ๋žซํผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„)์€ ์•ŒํŒŒ ํ’ˆ์งˆ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐ ์ˆ˜๋…„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด๋ฉฐ Xamarin.Forms & Avalonia์— ๊ธฐ์—ฌํ•˜๋Š” ๋Œ€์‹  ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๋Š” ์œ ์ผํ•œ ์ •๋‹น์„ฑ์€ ๋‘˜ ๋‹ค ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ.

์ด ๋ฌธ์ œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ์˜ ํ˜ผ๋™์œผ๋กœ ์ธํ•ด ์ œ๋ชฉ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@charlesroddie IMO, ์‹ค์ œ๋กœ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์š”์ ์€ .NET Core ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” UX ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹ˆ๋ผ DotNet ์ƒํƒœ๊ณ„์˜ ์ผ๋ถ€์ธ UX๋ฅผ ๋‹ค๋ฅธ ๋ถ€๋ถ„๊ณผ ๊ณต๋™์œผ๋กœ ๋งŒ๋“ค๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. .NET ์—์ฝ”์‹œ์Šคํ…œ์— ๋Œ€ํ•œ MSFT์˜ ํ–ฅํ›„ ๊ณ„ํš์€ ์ƒˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š” ๋ ˆ๊ฑฐ์‹œ Windows ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” .NET Framework ๊ธฐ๋ฐ˜ .NET Core์ž…๋‹ˆ๋‹ค. ์œ„์— @Happypig375 ๋กœ ํ‘œ์‹œ๋œ ๋ช‡ ๊ฐ€์ง€ ์ด์œ ์™€ ๋ชจ๋ฐ”์ผ์—์„œ xplat ์ง€์›์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฒฐ์ •์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ Xamarin.Forms๋ฅผ .NET Core๋กœ ์ด์‹ํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ .NET Core์— ํˆฌ์ž๋œ ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์œผ๋กœ ์ธํ•ด MSFT์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฏธ๋ž˜ xplat ํ”Œ๋žซํผ์€ .NET Core ๊ธฐ๋ฐ˜์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

Mono๋Š” Linux์—์„œ๋„ ๋งŽ์€ ์ž‘์—… ๋ถ€ํ•˜์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํžˆ ์ตœ์ ํ™”๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋” ์ด์ƒ ํ•ด๋‹น ๋Ÿฐํƒ€์ž„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋œ ์ฃผ์š” ์ƒˆ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. BCL์€ ํ˜„์žฌ Mono์™€ .NET Core ๊ฐ„์— ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฏธ๋ž˜์— Mono๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ด ๊ฐ€์ •์„ ๋ฐ”ํƒ•์œผ๋กœ ์—์ฝ”์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋กœ .NET Core ๊ธฐ๋ฐ˜ ๋‹จ์ผ UX ํ”Œ๋žซํผ์„ ๋ณด์œ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ xplat ๋ฐ ๊ธฐ๋ฐ˜ CLI ํ‘œ์ค€์ธ ์ผ๋ถ€ UX ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  DotNet ํŒ€์—์„œ ์„ค๊ณ„ ๋ฐ ์ง€์›ํ•˜๋Š” .NET Core ์ƒํƒœ๊ณ„์˜ ์ผ๋ถ€์ธ UX ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด ๋ฌธ์ œ ์ œ๋ชฉ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

.Net Standard๋Š” UI ๋‹ค๋ฅธ ๋Ÿฐํƒ€์ž„์ด ๋ฌธ์ œ ์—†์ด ๋™์ผํ•œ ์—์ฝ”์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. .Net Core๊ฐ€ ๋‹ค๋ฅธ ๋Ÿฐํƒ€์ž„์— ๋น„ํ•ด ์žฅ์ ์ด ์žˆ์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ๊ฐ€์น˜๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ํ”Œ๋žซํผ ๊ฐ„ UI์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ฐพ๋Š” ๋ฐ ๋Ÿฐํƒ€์ž„์„ ์—ฐ๊ฒฐํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค ๋ฟ์ž…๋‹ˆ๋‹ค.

UX ํ”Œ๋žซํผ์ด ํŠน์ • ๋Ÿฐํƒ€์ž„์„ "๊ธฐ๋ฐ˜์œผ๋กœ" ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ์ง€๋‚˜์นฉ๋‹ˆ๋‹ค. @ Happypig375 ํ˜„์žฌ Xamarin์€ .Net Core๋กœ ์ „ํ™˜ํ•  ๊ณ„ํš์ด ์•„๋‹™๋‹ˆ๋‹ค(๋Œ€์‹  ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜์—ฌ Mono๊ฐ€ .Net Core์™€ ๋” ์œ ์‚ฌํ•ด์ง€๋„๋ก ํ•˜๋Š” ๊ณ„ํš). ๊ทธ๋Ÿฌ๋‚˜ WPF๋ฅผ .Net Core๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ๋ณด๋‹ค ์–ด๋ ต์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

(BTW, .Net Standard 2.1์„ ์ง€์›ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์žˆ๋Š” Mono์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ฉฐ, ํ˜„์žฌ ์›น ์–ด์…ˆ๋ธ”๋ฆฌ ์ž‘์—…์€ .Net Core๊ฐ€ ์•„๋‹Œ Mono์—์„œ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ž‘์—…์€ ํฌํŒ…๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ œ์ณ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. .Net Core๋กœ.)

WinUI 3.0 ๋กœ๋“œ๋งต - ๊ท€ํ•˜์˜ ์˜๊ฒฌ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

์ด ๊ฐœ๋ฐœ ์ œ์•ˆ์€ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์†Œ์Šค๊ฐ€ ๊ณต๊ฐœ๋˜๋ฉด ์ƒˆ๋กœ์šด xplat ๊ฐ€๋Šฅ์„ฑ์„ ์—ด ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด MicrosoftUI 1.0 ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @4creators. ๐Ÿ˜†

> * https://github.com/Microsoft/microsoft-ui-xam
-------------------------------------------------^ missing l

์ด ๋ฌธ์ œ๋Š” ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰