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

์— ๋งŒ๋“  2019๋…„ 05์›” 16์ผ  ยท  220์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/microsoft-ui-xaml

WinUI 3.0

2019๋…„ 5์›” Microsoft Build ์ปจํผ๋Ÿฐ์Šค์—์„œ ์šฐ๋ฆฌ๋Š” WinUI 3.0์— ๋Œ€ํ•œ ๊ณ„ํš์„ ๊ณต์œ ํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ์ „์ฒด ๊ธฐ๋ณธ Windows UI ํ”Œ๋žซํผ์„ ํฌํ•จํ•˜๋„๋ก WinUI์˜ ๋ฒ”์œ„๋ฅผ ํฌ๊ฒŒ ํ™•์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ „์ฒด Xaml ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ GitHub์—์„œ ๊ฐœ๋ฐœ๋˜๊ณ  NuGet ํŒจํ‚ค์ง€๋กœ ๋Œ€์—ญ ์™ธ ๋ฐฐ์†ก๋ฉ๋‹ˆ๋‹ค.

WinUI ๋กœ๋“œ๋งต์€ ์ด์ œ WinUI 3.0์— ๋Œ€ํ•œ ์ตœ์‹  ๊ณ„ํš์œผ๋กœ ์ตœ์‹  ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
https://github.com/microsoft/microsoft-ui-xaml/blob/master/docs/roadmap.md

์ž์„ธํ•œ ๋‚ด์šฉ์€ Build 2019 ์ปจํผ๋Ÿฐ์Šค ์„ธ์…˜ State of the Union: Windows ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํ”Œ๋žซํผ ์„ ์‹œ์ฒญํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— ๋ช‡ ๊ฐ€์ง€ ๊ตฌ์ฒด์ ์ธ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด Windows ์•ฑ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ ๊ตฌ์ถ•์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๊นŒ?

WinUI 3.0์€ UWP Xaml ํ”„๋ ˆ์ž„์›Œํฌ, WPF, WinForms ๋ฐ MFC์— ๋น„ํ•ด ๋งŽ์€ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‹ ๊ทœ ๋ฐ ๊ธฐ์กด ์•ฑ์—์„œ WinUI 3.0์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉฐ ์–ด๋–ค ์˜์—ญ์— ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ํ˜„์žฌ ์ƒ๊ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ƒˆ ์•ฑ ๋งŒ๋“ค๊ธฐ

๊ณต์šฉ ์–ธ์–ด(์˜ˆ: .NET Core๋ฅผ ์‚ฌ์šฉํ•˜๋Š” C#, C++/WinRT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ C++17) ๋ฐ ์•ฑ ๋ชจ๋ธ + ํŒจํ‚ค์ง•(UWP + AppX, Win32 + MSIX )์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด Visual Studio 2019 ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šฐ์‹ ๊ฐ€์š”?

๊ฐœ๋ฐœ์ž ํ™˜๊ฒฝ์€ ํ˜„์žฌ UWP ์•ฑ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด Win32 ์•ฑ์— WinUI 3.0 ์ถ”๊ฐ€

WinUI 3.0์—๋Š” ๊ธฐ์กด WPF, Windows Forms ๋ฐ C++ Win32 ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ WinUI Xaml์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Xaml Islands ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Xaml ์„ฌ์˜ ํ˜„์žฌ ๋ฒ„์ „์€ Windows 10 2019๋…„ 5์›” ์—…๋ฐ์ดํŠธ(1903)์—์„œ๋งŒ ์ง€์›๋˜์ง€๋งŒ WinUI ๋ฒ„์ „์€ ์ด์ „ ๋ฒ„์ „์ธ ํฌ๋ฆฌ์—์ดํ„ฐ ์—…๋ฐ์ดํŠธ(15063)์™€ ํ˜ธํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ ์•ฑ ํ˜„๋Œ€ํ™”๋ฅผ ์œ„ํ•œ Xaml Islands๋ฅผ ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ?Windows 10์—์„œ ํ™•์žฅ๋œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด Xaml Islands๋ฅผ ๋” ์œ ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค๊นŒ์š”?

๊ธฐ์กด UWP Xaml ์•ฑ์„ WinUI 3.0์œผ๋กœ ์—…๋ฐ์ดํŠธ

ํ˜„์žฌ ์ตœ์‹  UWP SDK๋กœ ๋Œ€์ƒ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์•ฑ์˜ ๋Œ€์ƒ ๋ฒ„์ „์„ WinUI 3.0์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ด๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

UWP Xaml๊ณผ WinUI 3.0 ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ์„ ์ตœ๋Œ€ํ™”ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋ช‡ ๊ฐ€์ง€ ์•Œ์•„์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์—…๋ฐ์ดํŠธ

WinUI์˜ Xaml, ๊ตฌ์„ฑ ๋ฐ ์ž…๋ ฅ API์— ๋Œ€ํ•œ ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” Windows UWP SDK ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

| ์ด์ „ ๋„ค์ž„์ŠคํŽ˜์ด์Šค | ์‹ ๊ทœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(๊ฐ€์ƒ) |
| - | - |
| Windows.UI.Xaml | Microsoft.UI.Xaml |
| Windows.UI.Composition | Microsoft.UI.Composition |
| Windows.UI.Input | Microsoft.UI.Input |

์ตœ์†Œํ•œ .NET ์•ฑ์˜ ๊ฒฝ์šฐ UWP ์•ฑ์˜ ๋Œ€์ƒ์„ WinUI 3์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์˜ต์…˜์„ ํƒ์ƒ‰ ์ค‘์ž…๋‹ˆ๋‹ค.

Visual Studio ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

2. UWP ๋ฐ WinUI Xaml ๊ตฌ์„ฑ ์š”์†Œ ํ˜ผํ•ฉ

WinUI 3.0์„ ์ถœ์‹œํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ๋Š” ํ˜ผํ•ฉ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™€ ํ•จ๊ป˜:

  • WinUI 3.0 Microsoft.UI.Xaml.UIElement ๋ฐ Microsoft.UI.Composition.Visual ์š”์†Œ

๊ฐ™์€ ์•ฑ์—์„œ.

๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€์žฅ ํฐ ์šฐ๋ ค ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๋Š” ํŠนํžˆ UWP Xaml ์ปจํŠธ๋กค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด UWP ์•ฑ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ๋ฐ ์ž‘์—…์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์กด ๋ฒ„์ „์˜ Windows Community Toolkit ์€ WinUI 3.0 ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Toolkit๊ณผ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์•ฑ์€ WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  UWP Xaml ์ปจํŠธ๋กค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ WinUI 3.0์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ํฌ๋งํ•˜์ง€๋งŒ ์ตœ์ƒ์˜ ๊ฒฝ์šฐ์—๋„ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ์™€ WinUI 3.0 ์•ฑ ๊ฐ„์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?

์•ฑ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์‰ฝ๊ฒŒ ๋‹ค์‹œ ์ปดํŒŒ์ผ ๋ฐ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๋Š” UWP Xaml ์ œ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” WinRT ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

WinUI 3์—์„œ UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ผ๋ฐ˜์ ์ธ ์งˆ๋ฌธ๋“ค

  1. ์œ„์™€ ๋กœ๋“œ๋งต ์— ์š”์•ฝ๋œ ์ „์ฒด 3.0 ๊ณ„ํš์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์‹ ๊ทœ ๋ฐ ๊ธฐ์กด Windows ์•ฑ์— WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  2. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ์— WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ? ์ƒˆ Win32 ์•ฑ์„ ๋งŒ๋“ค๊ณ  MSIX๋กœ ํŒจํ‚ค์ง• ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? WPF ์•ฑ์— ์ƒˆ ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Fluent UI๋กœ C++ MFC ์•ฑ ํ˜„๋Œ€ํ™”?

discussion

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

๋ฌธ์ œ ๋‚ด์šฉ์—์„œ ์งˆ๋ฌธํ•˜์‹  ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ €์˜ ์ดˆ๊ธฐ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๋””์ž์ธ ๋ฐ ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ์™”์œผ๋ฉฐ ์•ฝ๊ฐ„์˜ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์žˆ์œผ๋ฉฐ ๋‹น์‹œ Silverlight/Windows Phone 7 ๊ฐœ๋ฐœ์— ๋งค์šฐ โ€‹โ€‹๊ด€์‹ฌ์ด ๋งŽ์•˜์ง€๋งŒ ์ง€๊ธˆ์€ ์•ฝ๊ฐ„ ๋ถˆํƒ€์˜ค๋ฅด๋Š” ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค.

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šฐ์‹ ๊ฐ€์š”?

ํ…œํ”Œ๋ฆฟ ์•„์ด๋””์–ด ๋ชฉ๋ก์„ ์š”์ฒญํ•˜๊ธฐ ์ „์— WPF, UWP, WinForms, MFC ๋“ฑ ๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ฐ€์žฅ ํฌ๊ณ  ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•ฑ์— ๋Œ€ํ•œ ์ผ์ข…์˜ ๊ฐ์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์•ฑ์˜ "์‹ค๋ฃจ์—ฃ"์„ ์กฐ์‚ฌํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ UX ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํŒŒ์•…ํ•˜์‹ญ์‹œ์˜ค.

๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—๋Š” ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฃผ ๋ฉ”๋‰ด(๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ)
  • MDI(ํ•œ ์ฐฝ์— ์—ฌ๋Ÿฌ ๋ฌธ์„œ)(๋Œ€๋ถ€๋ถ„ MFC)
  • ํƒญ ๋ฐ ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๋“œ(WPF, WinForms, MFC)
  • ๋ฆฌ๋ณธ(Win32 ์•ฑ Office, 3ds max, ํŽ˜์ธํŠธ, ์›Œ๋“œํŒจ๋“œ, ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ๋“ฑ)
  • ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ์œ ํ‹ธ๋ฆฌํ‹ฐ(MFC, WinForms)
  • ๋ธŒ๋ผ์šฐ์ €
  • ๋งˆ๋ฒ•์‚ฌ(WPF, MFC)
  • ๋ณต์žกํ•œ MDI ์•ฑ(Adobe ์†Œํ”„ํŠธ์›จ์–ด, Visual Studio)
  • ๋ฏธ๋””์–ด ํ”Œ๋ ˆ์ด์–ด
  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” LoB(WPF ๋ฐ ์›น)
  • ์†Œ์…œ ์•ฑ(React Native, PWA - Skype, Facebook, Twitter)

์ด๋“ค ๋ชจ๋‘ ๋˜๋Š” ์ผ๋ถ€๋Š” ์•Œ๋ฆผ/๊ด€๋ฆฌ ์„ผํ„ฐ์™€ WinRT/UWP ์‹œ์Šคํ…œ ํ†ตํ•ฉ์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ƒˆ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์€ ๊ธฐ๋ณธ ์ œ๊ณต Windows.Xaml ๋„ค์ž„์ŠคํŽ˜์ด์Šค, WPF ์ปจํŠธ๋กค ํ…Œ๋งˆ ๋ฐ WinForms ๋น„์ฃผ์–ผ ์Šคํƒ€์ผ์„ ํ”ผํ•˜๊ณ  FabricWeb/Fluent ์ปจํŠธ๋กค ๋””์ž์ธ๊ณผ ์ผ์น˜ํ•˜๋Š” ์ƒˆ ํ…œํ”Œ๋ฆฟ ๋ฐ ๋น„์ฃผ์–ผ ์Šคํƒ€์ผ์„ ์„ ํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ธฐ์กด WPF ๋ฐ WinForms ์•ฑ์ด ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ„๋‹จํ•œ using ๋ฌธ ๋˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํ•ญ๋ชฉ์œผ๋กœ ์ƒˆ ์ปจํŠธ๋กค ๋””์ž์ธ์„ ์ œ๊ณตํ•˜๋Š” WinUI 3.0 ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

XAML ์ œ๋„

Xaml Islands๊ฐ€ ๋” ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•ด์ง์— ๋”ฐ๋ผ ๊ธฐ์กด webview ์ปจํŠธ๋กค, ์ƒ‰์ƒ ์„ ํƒ๊ธฐ, XAML ๊ธฐ๋ฐ˜ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‰ฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๊ณ  ๋Œ€ํ™” ์ƒ์ž ๋˜๋Š” ๊ธฐ์กด C# ๋ฐ C++ ์ฝ”๋“œ๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ์ปจํŠธ๋กค์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค๋งŒ์˜ ์ฝ”๋“œ ์ˆจ๊น€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Xbox Next ์•ฑ, NavigationView, Master/Details, Hubs, Modern Ribbon, NavigationViewTop ๋ฐ Pivot๊ณผ ๊ฐ™์€ ์ตœ์‹  ์•ฑ ๋ฐ ํŽ˜์ด์ง€ ํ…œํ”Œ๋ฆฟ์€ XAML ์•„์ผ๋žœ๋“œ๊ฐ€ ์ œ์ž๋ฆฌ์— ์žˆ๊ณ  ์ƒ˜ํ”Œ ์ฝ˜ํ…์ธ ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  Windows ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ UWP XAML์—์„œ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ปจํŠธ๋กค ๋ฐ ํ…œํ”Œ๋ฆฟ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Visual Studio ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ˜„์žฌ Windows 10 SDK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  ๋ฒ„์ „์˜ Visual Studio์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด ๋•Œ ๋ฌป๋Š” ์งˆ๋ฌธ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ์‚ฌ์šฉ์„ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ์ต์ˆ™ํ•œ ์ปจํŠธ๋กค์ด ์•„๋‹Œ ๊ฒฝ์šฐ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด์–ด์•ผ ํ•˜๋ฉฐ Windows SDK์˜ ํ–ฅํ›„ ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ ์„ค์น˜๋œ nuget ํŒจํ‚ค์ง€์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WinUI 3์—์„œ UWP ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ž๋™ ์—…๋ฐ์ดํŠธ ๋‹ต๋ณ€๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒˆ ํŽ˜์ด์ง€ ๋ฐ ํ”„๋กœ์ ํŠธ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จํ•ด์•ผ ํ•˜๋ฉฐ ์ž๋™์œผ๋กœ WinUI | ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ToDo ์ฃผ์„ ์ถ”๊ฐ€ | WinUI๋กœ ์ด๋™ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค .

์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ์— WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

์‚ฌ์šฉ์ž๋กœ์„œ ์ €๋Š” Windows์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ์•ฑ์ด ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋“  ๊ณตํ†ต UI์™€ UX๋ฅผ ๊ณต์œ ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์–ด์ง€๋Ÿฝํžˆ๊ณ  ์ •ํฌ๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ  ์•ฑ์„ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. (๊ทธ๋ž˜์„œ 100์ฃผ๋…„)

๋ชจ๋“  ์•ฑ์„ ์Šคํ† ์–ด ๋‚ด์—์„œ ๋˜๋Š” Centennial ์œ ํ˜• ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ชจ๋“  ์•ฑ์˜ ์‹œ์Šคํ…œ ๋ฐ Windows ํด๋”๋ฅผ ๊ฐ€์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.

Fluent UI๋กœ C++ MFC ์•ฑ ํ˜„๋Œ€ํ™”?

์•„ํฌ๋ฆด์€ WPF, WinForms ๋ฐ MFC ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ WinUI 3.0 ์ข…์†์„ฑ ๋˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ์ƒˆ ํ…œํ”Œ๋ฆฟ์— ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CommonControls ๋ฐ ์ฐฝ ์Šคํƒ€์ผ์€ ์•„ํฌ๋ฆด ๋ฐ ํ™•์žฅ๋œ ์ œ๋ชฉ ํ‘œ์‹œ์ค„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ).

Microsoft์˜ Win32 ๋น„ UWP ์•ฑ์€ ๋ชจ๋‘ WinUI 3.0์œผ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ์•„ํฌ๋ฆด ์ฐฝ ํ”„๋ ˆ์ž„, ๊ธฐ๋ณธ ๋ฉ”๋‰ด, ThemeShadows, ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด , ํ…์ŠคํŠธ ํ•„๋“œ, ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ์ค„ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธฐ์กด ์•ฑ์€ WinUI 3.0 ์ด์ƒ์— ๋“œ๋กญํ•˜์—ฌ ๋ชจ๋“  ์ปจํŠธ๋กค์˜ ๋ชจ์–‘์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ „์ฒด UI๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

๋ฌธ์ œ ๋‚ด์šฉ์—์„œ ์งˆ๋ฌธํ•˜์‹  ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ €์˜ ์ดˆ๊ธฐ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๋””์ž์ธ ๋ฐ ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ์™”์œผ๋ฉฐ ์•ฝ๊ฐ„์˜ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์žˆ์œผ๋ฉฐ ๋‹น์‹œ Silverlight/Windows Phone 7 ๊ฐœ๋ฐœ์— ๋งค์šฐ โ€‹โ€‹๊ด€์‹ฌ์ด ๋งŽ์•˜์ง€๋งŒ ์ง€๊ธˆ์€ ์•ฝ๊ฐ„ ๋ถˆํƒ€์˜ค๋ฅด๋Š” ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค.

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šฐ์‹ ๊ฐ€์š”?

ํ…œํ”Œ๋ฆฟ ์•„์ด๋””์–ด ๋ชฉ๋ก์„ ์š”์ฒญํ•˜๊ธฐ ์ „์— WPF, UWP, WinForms, MFC ๋“ฑ ๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ฐ€์žฅ ํฌ๊ณ  ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•ฑ์— ๋Œ€ํ•œ ์ผ์ข…์˜ ๊ฐ์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์•ฑ์˜ "์‹ค๋ฃจ์—ฃ"์„ ์กฐ์‚ฌํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ UX ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํŒŒ์•…ํ•˜์‹ญ์‹œ์˜ค.

๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—๋Š” ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฃผ ๋ฉ”๋‰ด(๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ)
  • MDI(ํ•œ ์ฐฝ์— ์—ฌ๋Ÿฌ ๋ฌธ์„œ)(๋Œ€๋ถ€๋ถ„ MFC)
  • ํƒญ ๋ฐ ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๋“œ(WPF, WinForms, MFC)
  • ๋ฆฌ๋ณธ(Win32 ์•ฑ Office, 3ds max, ํŽ˜์ธํŠธ, ์›Œ๋“œํŒจ๋“œ, ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ๋“ฑ)
  • ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ์œ ํ‹ธ๋ฆฌํ‹ฐ(MFC, WinForms)
  • ๋ธŒ๋ผ์šฐ์ €
  • ๋งˆ๋ฒ•์‚ฌ(WPF, MFC)
  • ๋ณต์žกํ•œ MDI ์•ฑ(Adobe ์†Œํ”„ํŠธ์›จ์–ด, Visual Studio)
  • ๋ฏธ๋””์–ด ํ”Œ๋ ˆ์ด์–ด
  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” LoB(WPF ๋ฐ ์›น)
  • ์†Œ์…œ ์•ฑ(React Native, PWA - Skype, Facebook, Twitter)

์ด๋“ค ๋ชจ๋‘ ๋˜๋Š” ์ผ๋ถ€๋Š” ์•Œ๋ฆผ/๊ด€๋ฆฌ ์„ผํ„ฐ์™€ WinRT/UWP ์‹œ์Šคํ…œ ํ†ตํ•ฉ์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ƒˆ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์€ ๊ธฐ๋ณธ ์ œ๊ณต Windows.Xaml ๋„ค์ž„์ŠคํŽ˜์ด์Šค, WPF ์ปจํŠธ๋กค ํ…Œ๋งˆ ๋ฐ WinForms ๋น„์ฃผ์–ผ ์Šคํƒ€์ผ์„ ํ”ผํ•˜๊ณ  FabricWeb/Fluent ์ปจํŠธ๋กค ๋””์ž์ธ๊ณผ ์ผ์น˜ํ•˜๋Š” ์ƒˆ ํ…œํ”Œ๋ฆฟ ๋ฐ ๋น„์ฃผ์–ผ ์Šคํƒ€์ผ์„ ์„ ํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ธฐ์กด WPF ๋ฐ WinForms ์•ฑ์ด ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ„๋‹จํ•œ using ๋ฌธ ๋˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํ•ญ๋ชฉ์œผ๋กœ ์ƒˆ ์ปจํŠธ๋กค ๋””์ž์ธ์„ ์ œ๊ณตํ•˜๋Š” WinUI 3.0 ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

XAML ์ œ๋„

Xaml Islands๊ฐ€ ๋” ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•ด์ง์— ๋”ฐ๋ผ ๊ธฐ์กด webview ์ปจํŠธ๋กค, ์ƒ‰์ƒ ์„ ํƒ๊ธฐ, XAML ๊ธฐ๋ฐ˜ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‰ฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๊ณ  ๋Œ€ํ™” ์ƒ์ž ๋˜๋Š” ๊ธฐ์กด C# ๋ฐ C++ ์ฝ”๋“œ๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ์ปจํŠธ๋กค์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค๋งŒ์˜ ์ฝ”๋“œ ์ˆจ๊น€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Xbox Next ์•ฑ, NavigationView, Master/Details, Hubs, Modern Ribbon, NavigationViewTop ๋ฐ Pivot๊ณผ ๊ฐ™์€ ์ตœ์‹  ์•ฑ ๋ฐ ํŽ˜์ด์ง€ ํ…œํ”Œ๋ฆฟ์€ XAML ์•„์ผ๋žœ๋“œ๊ฐ€ ์ œ์ž๋ฆฌ์— ์žˆ๊ณ  ์ƒ˜ํ”Œ ์ฝ˜ํ…์ธ ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  Windows ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ UWP XAML์—์„œ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ปจํŠธ๋กค ๋ฐ ํ…œํ”Œ๋ฆฟ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Visual Studio ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ˜„์žฌ Windows 10 SDK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  ๋ฒ„์ „์˜ Visual Studio์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด ๋•Œ ๋ฌป๋Š” ์งˆ๋ฌธ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ์‚ฌ์šฉ์„ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ์ต์ˆ™ํ•œ ์ปจํŠธ๋กค์ด ์•„๋‹Œ ๊ฒฝ์šฐ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด์–ด์•ผ ํ•˜๋ฉฐ Windows SDK์˜ ํ–ฅํ›„ ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ ์„ค์น˜๋œ nuget ํŒจํ‚ค์ง€์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WinUI 3์—์„œ UWP ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ž๋™ ์—…๋ฐ์ดํŠธ ๋‹ต๋ณ€๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒˆ ํŽ˜์ด์ง€ ๋ฐ ํ”„๋กœ์ ํŠธ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จํ•ด์•ผ ํ•˜๋ฉฐ ์ž๋™์œผ๋กœ WinUI | ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ToDo ์ฃผ์„ ์ถ”๊ฐ€ | WinUI๋กœ ์ด๋™ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค .

์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ์— WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

์‚ฌ์šฉ์ž๋กœ์„œ ์ €๋Š” Windows์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ์•ฑ์ด ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋“  ๊ณตํ†ต UI์™€ UX๋ฅผ ๊ณต์œ ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์–ด์ง€๋Ÿฝํžˆ๊ณ  ์ •ํฌ๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ  ์•ฑ์„ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. (๊ทธ๋ž˜์„œ 100์ฃผ๋…„)

๋ชจ๋“  ์•ฑ์„ ์Šคํ† ์–ด ๋‚ด์—์„œ ๋˜๋Š” Centennial ์œ ํ˜• ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ชจ๋“  ์•ฑ์˜ ์‹œ์Šคํ…œ ๋ฐ Windows ํด๋”๋ฅผ ๊ฐ€์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.

Fluent UI๋กœ C++ MFC ์•ฑ ํ˜„๋Œ€ํ™”?

์•„ํฌ๋ฆด์€ WPF, WinForms ๋ฐ MFC ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ WinUI 3.0 ์ข…์†์„ฑ ๋˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ์ƒˆ ํ…œํ”Œ๋ฆฟ์— ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CommonControls ๋ฐ ์ฐฝ ์Šคํƒ€์ผ์€ ์•„ํฌ๋ฆด ๋ฐ ํ™•์žฅ๋œ ์ œ๋ชฉ ํ‘œ์‹œ์ค„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ).

Microsoft์˜ Win32 ๋น„ UWP ์•ฑ์€ ๋ชจ๋‘ WinUI 3.0์œผ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ์•„ํฌ๋ฆด ์ฐฝ ํ”„๋ ˆ์ž„, ๊ธฐ๋ณธ ๋ฉ”๋‰ด, ThemeShadows, ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด , ํ…์ŠคํŠธ ํ•„๋“œ, ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ์ค„ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธฐ์กด ์•ฑ์€ WinUI 3.0 ์ด์ƒ์— ๋“œ๋กญํ•˜์—ฌ ๋ชจ๋“  ์ปจํŠธ๋กค์˜ ๋ชจ์–‘์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ „์ฒด UI๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

re: ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ์กฐ๊ฑด๋ถ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋„ ๋Œ€์ƒ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋‹ต๋ณ€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ƒˆ ์•ฑ ๋งŒ๋“ค๊ธฐ

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šฐ์‹ ๊ฐ€์š”?

  • ๋‚˜๋Š” C++/winRT win32+xaml ๋ฐ .net core+xaml์„ ๋จผ์ € ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. UWP ํ…œํ”Œ๋ฆฟ์€ ๋‘ ๋ฒˆ์งธ๋กœ, ํŒจํ‚ค์ง€๋œ win32 ์•ฑ์€ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ œ๊ณต๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์•ฑ ํŒจํ‚ค์ง€ ํ…œํ”Œ๋ฆฟ์€ ์ด๋ฏธ ํ˜„์žฌ์™€ ๊ฐ™์ด ์ž‘๋™ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. win32/.Net ์•ฑ.
  • ๋˜ํ•œ ๊ธฐ์กด win32 ๋˜๋Š” .net ํ•ต์‹ฌ ์•ฑ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” "์ƒˆ XAML ์ฐฝ"๊ณผ ๊ฐ™์€ ํ•ญ๋ชฉ ํ…œํ”Œ๋ฆฟ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(์˜ˆ: Docker ๋ฐ์Šคํฌํ†ฑ์—์„œ ๊ธฐ์กด ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ์•ฑ ๋งŒ๋“ค๊ธฐ, ์ƒˆ๋กœ์šด ์ตœ์ƒ์œ„ Xaml ์ฐฝ)

๊ธฐ์กด Win32 ์•ฑ์— WinUI 3.0 ์ถ”๊ฐ€

  • ์ด์ „ ๋ฒ„์ „์ด ์•„๋‹Œ ํ˜ธํ™˜์„ฑ์€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ xaml ์„ฌ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ •ํ™•ํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. Windows API์—์„œ UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์€ WinUI 3.0 ๋กœ๋“œ๋งต์—์„œ ๋ฐœํ‘œ๋œ ๊ฐ€์žฅ ์œ„๋Œ€ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค(๋น„ํŒจํ‚ค์ง€/๋น„uwp ๋Œ€์ƒ ์•ฑ์ด ์ด๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜).

๊ธฐ์กด UWP Xaml ์•ฑ์„ WinUI 3.0์œผ๋กœ ์—…๋ฐ์ดํŠธ

๊ฑฐ์น ๊ฒŒ ๋“ค๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ UWP xaml ์•ฑ์ด ํ‹ˆ์ƒˆ ์‹œ์žฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(Windows Phone์ด ์ถœ์‹œ๋œ ์ดํ›„๋กœ ๋Œ€์ƒ ํ”Œ๋žซํผ์œผ๋กœ์„œ UWP์— ๋Œ€ํ•œ ๊ฒฌ์ธ๋ ฅ์ด ๋” ์ด์ƒ ์—†์Œ). ๋„๊ตฌ/์ƒํ˜ธ ์šด์šฉ์„ฑ์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ WinUI 3.0์˜ ์ฃผ์š” ์ดˆ์ ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
๋”ฐ๋ผ์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์—…๋ฐ์ดํŠธ ๋„๊ตฌ(์‹ค์ œ๋กœ๋Š” ์ „์—ญ ์ฐพ๊ธฐ ๋ฐ ๋ฐ”๊พธ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ)์™€ UWP xaml๊ณผ WinUI xaml์„ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ฒŒ ๋Š๊ปด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด๊ฒƒ์€ ๋งค์šฐ ํ™˜์˜ํ• ๋งŒํ•œ ์กฐ์น˜์ด๋ฉฐ Github์— ์ „์ฒด UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๊ต‰์žฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค! ์ด๋ ‡๊ฒŒ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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

  1. WPF๋Š” WinUI(์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๊ธฐ์กด ์ปจํŠธ๋กค ๋“ฑ)๋ณด๋‹ค ํ›จ์”ฌ ๋” ์„ฑ์ˆ™ํ•˜๋ฏ€๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์˜ ๊ฒฝ์šฐ WPF๊ฐ€ ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  2. UWP๋Š” ์†Œ๋น„์ž๊ฐ€ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์žฅ์น˜ ๋ฒ”์ฃผ(๋ชจ๋ฐ”์ผ, ํƒœ๋ธ”๋ฆฟ, ๋ฐ์Šคํฌํ†ฑ ๋“ฑ)์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

1๋ฒˆ ํฌ์ธํŠธ๊ฐ€ WinUI๋กœ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ WinUI์˜ ๋ฐœ์ „์— ๋Œ€ํ•ด ์—ด๊ด‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ 2๋Š” ๋” ์ด์ƒ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋” ์ด์ƒ ๋ฉ‹์ง„ ์žฅ์น˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ์Šคํฌํƒ‘๋งŒ ํ•ด๋‹น). ์ด ๋ฌผ๊ฑด์ด ๋ฐฐ์†ก๋  ๋•Œ(์ง€๊ธˆ๋ถ€ํ„ฐ 1๋…„ ํ›„?) ๊ทธ ๋‹จ๊ณ„์—์„œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์†Œ๋น„์žฌ๊ฐ€ ๋” ์ด์ƒ ๋ฐฉ์ •์‹์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ฐฐ๋Š” ์ถ•์†Œ "์ „๋žต"์œผ๋กœ ํ•ญํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์•ฑ์— ์ ํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ €๋Š” ๋Œ€๊ทœ๋ชจ WPF ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ Windows 10์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด WPF์—์„œ WinUI๋กœ์˜ ์ข‹์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต์— ๋” ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ๋น„์ž์šฉ ์•ฑ(ํ˜„์žฌ UWP)์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ ์€ ์•ฑ์˜ ์™ธ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐœ๋ฐœ์ž(์˜ˆ: win ํˆดํ‚ท ๋“ฑ). ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž(๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ์Œ)๊ฐ€ ์†Œ๋น„์ž/Windows ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์— ๊ด€์‹ฌ์„ ์žƒ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€

์ƒˆ ์•ฑ ๋งŒ๋“ค๊ธฐ

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šฐ์‹ ๊ฐ€์š”?

.net core/xaml/C#์ด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด ์กฐํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—์„œ๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ…œํ”Œ๋ฆฟ์ด ๋” ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์ฐธ์—ฌ์‹œํ‚ค๋ ค๊ณ  ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๋” ๊ณ ํ†ต์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

๊ธฐ์กด Win32 ์•ฑ์— WinUI 3.0 ์ถ”๊ฐ€

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งค์šฐ ํ›Œ๋ฅญํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๋งŽ์ด ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” ๊ธฐ์—… ๊ณ ๊ฐ์ด ์—ฌ์ „ํžˆ Windows 7์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ ์–ด๋„ 1๋…„์€ ๋” ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. MS ์ง€์›์ด ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ํšŒ์‚ฌ๋Š” Windows 7์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๊ทธ๋Ÿฐ ๋‹ค์Œ WPF๋ฅผ WinUI 3์œผ๋กœ ์ฒœ์ฒœํžˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ ์•ฑ ํ˜„๋Œ€ํ™”๋ฅผ ์œ„ํ•œ Xaml Islands๋ฅผ ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๋งŽ์€ ๊ณ ๊ฐ์ด Windows 7์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์˜ต์…˜์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์†Œ๋น„์ž์˜ ๊ฒฝ์šฐ ์–ด์จŒ๋“  UWP๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows 10์—์„œ ํ™•์žฅ๋œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด Xaml Islands๋ฅผ ๋” ์œ ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค๊นŒ์š”?

์ด ์ œํ’ˆ์ด ๋ฐฐ์†ก๋  ๋•Œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์—์„œ ์ง€์›๋˜๋Š” ๋ชจ๋“  Windows 10 ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด UWP Xaml ์•ฑ์„ WinUI 3.0์œผ๋กœ ์—…๋ฐ์ดํŠธ

MS์šฉ ์†Œ๋น„์ž ์•ฑ์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ MS์˜ ์„ ํƒ์œผ๋กœ ์ธํ•ด ๋” ์ด์ƒ ์ด๋ฅผ ์œ„ํ•œ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์˜ต์…˜์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์žŠ์–ด๋ฒ„๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. UWP ์•ฑ์— ์ˆ˜์ฒœ ์‹œ๊ฐ„์„ ํˆฌ์žํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šฌํ”„์ง€๋งŒ ๊ณ ํ†ต์„ ๋œ ์ˆ˜ ์žˆ๋„๋ก ์ด ์ฃฝ์Œ์„ ๋นจ๋ฆฌ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•ฝ์†๋œ ์ „์ฒด ์ด์•ผ๊ธฐ๋Š” ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ์ด๋ฉฐ ๋ชจ๋“  ์žฅ์น˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์•ฝ์†์ด ์–ด๋–ค ์‹์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ๋Š”์ง€ ์šฐ๋ฆฌ ๋ชจ๋‘ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Visual Studio ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

๋„ค์ž„์ŠคํŽ˜์ด์Šค์ผ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰/๋ฐ”๊พธ๊ธฐ๋„ ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ์™€ WinUI 3.0 ์•ฑ ๊ฐ„์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?

๋” ์ด์ƒ ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ˆ˜์ฒœ ์‹œ๊ฐ„์˜ ๊ฐœ๋ฐœ ์†์‹ค์„ ๊ฐ์ˆ˜ํ•  ์šฉ์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‚จ์€ ์‚ฌ์šฉ์ž๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์•ฑ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์‰ฝ๊ฒŒ ๋‹ค์‹œ ์ปดํŒŒ์ผ ๋ฐ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๋Š” UWP Xaml ์ œ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” WinRT ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”.

WinUI 3์—์„œ UWP ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

UWP ์•„์ผ๋žœ๋“œ(ํ˜ธ์ŠคํŒ…๋œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ผ์ข…)

์ผ๋ฐ˜์ ์ธ

์œ„์™€ ๋กœ๋“œ๋งต์— ์š”์•ฝ๋œ ์ „๋ฐ˜์ ์ธ 3.0 ๊ณ„ํš์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์‹ ๊ทœ ๋ฐ ๊ธฐ์กด Windows ์•ฑ์— WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ข€ ๋” ์„ฑ์ˆ™ํ•ด์ ธ์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ, ์ €๋Š” 1~2๋…„ ์•ˆ์— ๊ธฐ์—… ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์ด ๋ฌผ๊ฑด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด์ง€์— ๋”ฐ๋ผ WinUI ๋˜๋Š” ์›น์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค(Windows ์ž์ฒด๊ฐ€ "์ง„ํ™”ํ•˜๋Š”" ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).

์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ์— WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ? ์ƒˆ Win32 ์•ฑ์„ ๋งŒ๋“ค๊ณ  MSIX๋กœ ํŒจํ‚ค์ง•ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? WPF ์•ฑ์— ์ƒˆ ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Fluent UI๋กœ C++ MFC ์•ฑ ํ˜„๋Œ€ํ™”?

์•„๋งˆ๋„ WPF ์•ฑ์— ์ƒˆ ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ฒœ์ฒœํžˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋กœ๋“œ๋งต์„ ๋งค์šฐ ์ข‹์•„ํ•œ๋‹ค. UWP๋Š” ์กฑ์‡„์—์„œ ํ•ด๋ฐฉ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด UWP Xaml ์•ฑ์„ WinUI 3.0์œผ๋กœ ์—…๋ฐ์ดํŠธ

์ด๊ฒƒ์€ ๋‚ด ๊ณ ์šฉ์ฃผ์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ† ์–ด์— ๋ณต์žกํ•œ UWP ๋ฐ์Šคํฌํ†ฑ ์•ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ .NET ๋„ค์ดํ‹ฐ๋ธŒ์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” win32 API์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด Desktop Bridge๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์›ํ•œ๋‹ค

  • ๋ชจ๋“  win32 API์— ๋Œ€ํ•œ ์ง์ ‘ ์•ก์„ธ์Šค
  • ํ‰๋ฒ”ํ•œ ์˜ค๋ž˜๋œ win32 ์‹คํ–‰ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ Desktop Bridge์™€ ๊ฐ™์€ ์ƒŒ๋“œ๋ฐ•์‹ฑ(์˜ˆ: ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ฐ€์ƒํ™”)์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ์™€ โ€‹โ€‹๊ฐ™์ด ์Šคํ† ์–ด(msix)์— ์•ฑ์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • WNS(ํ‘ธ์‹œ ์•Œ๋ฆผ)๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ ค๋ฉด
  • UWP์—์„œ ์ƒˆ๋กœ์šด Xaml ๋ฐ์Šคํฌํ†ฑ ์•ฑ ์œ ํ˜•์œผ๋กœ์˜ ๊ฐ„ํŽธํ•œ ์—…๋ฐ์ดํŠธ ํ™˜๊ฒฝ. ๋‚˜๋Š” ์•ฝ๊ฐ„์˜ ์ˆ˜์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์„ ๊บผ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์–ด์ฉŒ๋ฉด ๋‚˜๋Š” ์—ฌ๊ธฐ์—์„œ ๋„๊ตฌ๋ณด๋‹ค ์ข‹์€ ๋ฌธ์„œ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ์™€ WinUI 3.0 ์•ฑ ๊ฐ„์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?

๊ธฐ์กด ์Šคํƒ€์ผ์€ ๊ณ„์† ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ์  ๋ณ€ํ™”๋กœ ์‚ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ–‰๋™์˜ ๋ณ€ํ™”๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ฑ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์‰ฝ๊ฒŒ ๋‹ค์‹œ ์ปดํŒŒ์ผ ๋ฐ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๋Š” UWP Xaml ์ œ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” WinRT ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”.

WinUI 3์—์„œ UWP ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์žฌ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ(ํƒ€์‚ฌ): Xaml Islands์™€ ์œ ์‚ฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด WinUI 3์œผ๋กœ ์‰ฝ๊ฒŒ ์ด์‹ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ

์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ์— WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ? ์ƒˆ Win32 ์•ฑ์„ ๋งŒ๋“ค๊ณ  MSIX๋กœ ํŒจํ‚ค์ง•ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? WPF ์•ฑ์— ์ƒˆ ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Fluent UI๋กœ C++ MFC ์•ฑ ํ˜„๋Œ€ํ™”?

  • MSIX์™€ ํ•จ๊ป˜ ํŒจํ‚ค์ง•๋œ ๋ฐ์Šคํฌํƒ‘ win32 ์•ฑ.
  • Uno ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์•ฑ ;)

_INotifyDataErrorInfo_์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ƒˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋„์ž… ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด๊ณ  WinUI์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์—†์–ด์•ผ ํ•˜๋Š” ๋ทฐ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: _INotifyPropertyChanged_ ๋˜๋Š” _INotifyCollectionChanged)_

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

XamlUI ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ๋ ˆ์ด๋ธ”์„ XamlUI 3.0 ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€

๋ฌธ์˜ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณต๊ฐ„์—์„œ ๋ฌด์—‡์ด ๋‚˜์˜ฌ์ง€ ๊ธฐ๋Œ€ํ•ด์ฃผ์„ธ์š” :์Šค๋งˆ์ผ:

๋‚˜์—๊ฒŒ ๋ชจ๋“  ๊ธฐ์ˆ ์  ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ๋œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
UWP, WPF ๋˜๋Š” ๋ชจ๋“  Windows ์ „์šฉ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์•„๋ฌด๋ฆฌ ํ›Œ๋ฅญํ•˜๋”๋ผ๋„ ๋ชจ๋“  ํ”Œ๋žซํผ(์ตœ์†Œํ•œ Windows, Droid, iOS ๋ฐ ์›น)์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ํ™”๋ฉด ํฌ๊ธฐ.

TBH๋Š” ์ง€๋‚œ ๋นŒ๋“œ์—์„œ MS๊ฐ€ UWP ๋˜๋Š” XAML ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ๋งŒ๋“ค ๊ณ„ํš์ด ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์‹ค๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋…ธ ๋Š” ์—ฐ์„ค ์™ธ์—๋Š” ๊ณต์‹์ ์ธ ์ธ์ •์„ ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค. ๋” ์‹ค๋ง์Šค๋Ÿฌ์šด ๊ฒƒ์€ MS๊ฐ€ ์ฑ…์ž„ ์žˆ๋Š” .NET ์Šคํƒ ๊ฐœ๋ฐœ์ž๋ฅผ ๋ฌด์‹œํ•˜๋ฉด์„œ ๋‹ค์‹œ React Native ๋ฐ HTML/JS ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ(WinJS)์— ๋„ˆ๋ฌด ๋งŽ์€ ์‚ฌ๋ž‘์„ ์ฃผ๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ €๋Š” MS๊ฐ€ ๊ณต์‹์ ์œผ๋กœ Uno์™€ ๊ฐ™์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ UI ์Šคํƒ์„ ๋งŒ๋“ค๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋„๊ตฌ, ํ…œํ”Œ๋ฆฟ ๋ฐ ํ†ตํ•ฉ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  BTW, ์ €๋Š” MS๊ฐ€ XF๋ฅผ ์ธ์ˆ˜ํ•œ ์ดํ›„๋กœ XF์™€ ํ•จ๊ป˜ ์ผํ•ด ์™”์œผ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ XF์— ๋Œ€์•ˆ์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์›น ์ง€์› ์—†์Œ, b. ๋งค์šฐ ๋ชจ๋ฐ”์ผ ํŽธํ–ฅ, ๋ฐ์Šคํฌํƒ‘์— ๋Œ€ํ•œ ์‚ฌ๋ž‘ ์—†์Œ c. WPF/UWP ์ œ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋น„๊ตํ•  ๋•Œ ํ™•์‹คํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ์—‰์„ฑํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. d. MS XAML์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ์€ Microsoft ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๊ฒŒ์‹œํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์ž…๋‹ˆ๋‹ค. .NET UI Standard .

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์›น(์–ด์…ˆ๋ธ”๋ฆฌ)์—์„œ๋„ ์‹คํ–‰๋˜๋Š” XAML UI๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ UWP์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
UNO ํ”Œ๋žซํผ์„ ์ˆ˜์šฉํ•˜๊ณ  SkiaSharp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ๋ Œ๋”๋ง์„ ๋งŒ๋“ค์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ?
WinUI ์˜ ์›น ๋Œ€์‘๋ฌผ์ธ Silverlight 6 ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋น ๋ฅธ ๋‹ต๋ณ€

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šฐ์‹ ๊ฐ€์š”?

.NET ํ•ต์‹ฌ SDK ์Šคํƒ€์ผ ํ”„๋กœ์ ํŠธ ๋˜๋Š” ์ผ๋ถ€ ๋‹จ์ˆœํ™”๋œ MSVC ํ”„๋กœ์ ํŠธ ํ˜•์‹.
์ด์ „ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์€ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ์ด์ „ ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ๊ณผ ์ƒˆ ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ ์‚ฌ์ด์— ์ˆ˜๋งŽ์€ ์ƒํ˜ธ ์ž‘์šฉ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ์„ ๋ฒ„๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ ์•ฑ ํ˜„๋Œ€ํ™”๋ฅผ ์œ„ํ•œ Xaml Islands๋ฅผ ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”. ์ „์ฒด ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋ณ€๊ฒฝ์œผ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์—†์Šต๋‹ˆ๋‹ค.

Windows 10์—์„œ ํ™•์žฅ๋œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด Xaml Islands๋ฅผ ๋” ์œ ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค๊นŒ์š”?

Windows 7์—๋Š” ์—ฌ์ „ํžˆ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์œผ๋ฉฐ Xaml Islands๋Š” ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ์™€ WinUI 3.0 ์•ฑ ๊ฐ„์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”. ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ž์ฒด ์ž‘์„ฑ๋˜๊ฑฐ๋‚˜ MUX ๋ฐ WCTK์—์„œ ์ž‘์„ฑ๋˜๋ฏ€๋กœ ๋น ๋ฅธ ์ˆ˜๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Visual Studio ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

๋‚ด ํ”„๋กœ์ ํŠธ๊ฐ€ ํฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(ํ˜„์žฌ ~20ํŽ˜์ด์ง€ ๋ฐ ~10์‚ฌ์šฉ์ž ์ •์˜ ์ปจํŠธ๋กค).

WinUI 3์—์„œ UWP ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์•„์ฃผ ์ž‘์€ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค๊ณ  KB ๋‹จ์œ„๋กœ ๋ฐฐ์†กํ•  ์ˆ˜ ์žˆ๋„๋ก OS์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๋ฒ„์ „์ด ์žˆ์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ฆ‰์‹œ ์ €์—๊ฒŒ ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ฎ์€ OS์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ผ๋ถ€ ์ฑ„ํŒ… ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ†ตํ•ด).

์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ์— WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ? ์ƒˆ Win32 ์•ฑ์„ ๋งŒ๋“ค๊ณ  MSIX๋กœ ํŒจํ‚ค์ง•ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? WPF ์•ฑ์— ์ƒˆ ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Fluent UI๋กœ C++ MFC ์•ฑ ํ˜„๋Œ€ํ™”?

์ƒˆ๋กœ์šด Windows 10 ์ „์šฉ ์•ฑ์„ ๋งŒ๋“ค๊ณ  ์Šคํ† ์–ด ์—†์ด ๋ฐฐ์†กํ•ฉ๋‹ˆ๋‹ค.
์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ช…์€ ๊ฐœ๋ณ„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ณ  ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ์žฅ๊ธฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•„๋‹Œ ๋„๋ฉ”์ธ ํŠน์ •์— ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

UI ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ๊ฒฌํ•ด

Xaml ๋„๊ตฌ ์ฒด์ธ

xaml ์–ธ์–ด๋Š” ์–ด๋–ป๊ฒŒ ๋“  ์‹ฌ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ "์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?"์™€ ๊ฐ™์€ ๋งŽ์€ ๋ฌธ์ œ์— ์ง๋ฉด ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. WPF xaml๊ณผ UWP xaml์€ ์™„์ „ํžˆ ํ˜ธํ™˜๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฐจ์ด์ ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Xaml์€ .NET ๊ธฐ๋Šฅ๊ณผ ์™„์ „ํžˆ ํ˜ธํ™˜๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋•Œ๋•Œ๋กœ ๋‚ด ๋ชจ๋ธ๊ณผ ๋„์šฐ๋ฏธ ํด๋ž˜์Šค์— ๋ช‡ ๊ฐ€์ง€ ์ถ”์•…ํ•œ ํŠธ๋ฆญ์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

x:Bind ์™€ ํ•จ๊ป˜ ์˜ค๋ฉด ์ƒํ™ฉ์€ ๋”์šฑ ์•…ํ™”๋ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ ์†์„ฑ ์•ก์„ธ์Šค ์ด์ƒ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ๋ฐ”์ธ๋”ฉ ์‹์— ๋Œ€ํ•ด ์–ด๋–ค ์˜ค๋ฒ„๋กœ๋“œ๊ฐ€ ์„ ํƒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์ „ํ™˜์ด๋‚˜ "์ผ๋ถ€ ์†์„ฑ์ด false์ผ ๋•Œ ํ‘œ์‹œ" ๋ณ€ํ™˜์กฐ์ฐจ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์„ค๋ช…์„œ์—๋Š” ์ด๋Ÿฌํ•œ ์ž์„ธํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์—†์œผ๋ฏ€๋กœ xaml-์–ธ์–ด ์„ค๊ณ„ ํ† ๋ก ์„ ์œ„ํ•œ ์ž…์žฅ์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ xaml์„ C#๊ณผ ๊ฐ™์ด ์ง„์ง€ํ•˜๊ฒŒ ์„ค๊ณ„๋œ ์–ธ์–ด๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

xaml ํŽธ์ง‘๊ธฐ๋„ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋””์ž์ด๋„ˆ๊ฐ€ ์‹ค์ œ ํšจ๊ณผ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ์ธ์‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ๋ณด๊ธฐ์—์„œ xaml ํŒŒ์ผ์„ ์—ฌ๋Š” ๊ฒƒ์€ ๋””์ž์ด๋„ˆ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  NullReferenceException ๋ฐ Cannot convert __ComObject to some type ์™€ ๊ฐ™์ด ์™„์ „ํžˆ ๋ฏธ์„ธํ•˜๊ฒŒ ์‹คํ–‰๋˜๋Š” xaml์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ƒํ˜ธ ์ž‘์šฉ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๋นŒ๋“œ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ProjectReference ๋‹ฟ์•„ ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ๊ตฌํ˜„)์—์„œ non-public-api ์˜์—ญ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํŽธ์ง‘ํ•ด๋„ ๋ณต์žกํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ธ์‹ํ•˜๋Š” ์™„์ „ํžˆ Roslyn ํ†ตํ•ฉ xaml ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ์ฐฝ ๋ชจ๋ธ

์ •๋ณด ์ „์ฒด, ์ƒํƒœ ์ „์ฒด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํƒ์ƒ‰ ๋ชจ๋ธ ๋Œ€์‹  ๋‹ค์ค‘ ์ฐฝ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ UWP์—์„œ ApplicationView ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ์ฐฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์Šค๋ ˆ๋”ฉ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด AppWindow ๋Š” UI ์Šค๋ ˆ๋“œ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ UI ์„ฑ๋Šฅ์ด ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜์ค‘์— WinUI์—์„œ Visual Studio๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ฉด ์„ฑ์ˆ™ํ•œ UI ์‹œ์Šคํ…œ์ž„์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์ธํ„ฐํŽ˜์ด์Šค

INotifyPropertyChanged ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋งค์šฐ ์ง€์ณค์Šต๋‹ˆ๋‹ค. xml์„ ํ™•์žฅ๋œ ์†์„ฑ ์ ‘๊ทผ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • MSBuild ์ž‘์—…์„ ์ž‘์„ฑํ–ˆ์ง€๋งŒ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋  ๋•Œ setter์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋Š” ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์Šค๋ ˆ๋”ฉ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ฐ์ดํ„ฐ๋Š” ์™„์ „ํžˆ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋„คํŠธ์›Œํฌ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— await ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ ์บก์ฒ˜๊ฐ€ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WPF ๋ฐ Binding ์—์„œ๋Š” Binding ์Šค๋ ˆ๋”ฉ ์ž์ฒด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค. x:Bind ๋ณ€๊ฒฝํ•  ๋•Œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ๊ธฐ ๋‚ด๋ถ€์—์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. x:Bind ๋Š” ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ„ฐ์น˜ํ•˜๋Š” ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒํ™ฉ์ด ๋”์šฑ ์•…ํ™”๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ „์—ญ UI ๋””์ŠคํŒจ์ฒ˜๊ฐ€ ์—†๊ณ  ์œ ์ผํ•œ ์†”๋ฃจ์…˜์€ ์ด๋ฒคํŠธ ๋“ฑ๋ก ์‹œ SynchronizationContext.Current ๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์˜ ๊ฒฝ์šฐ ItemsSource ๋„ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋™์ผํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ์— ๋Œ€ํ•œ ๋ชจ๋ธ๋ง, ์Šค๋ ˆ๋”ฉ ๋ฐ ํ™•์žฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ ์ฒด์ธ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅํ•œ ์ปฌ๋ ‰์…˜์„ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋ณธ ์ œ๊ณต ์†”๋ฃจ์…˜์€ "๋ณ€๊ฒฝ๋œ ์ž์‹์˜ ์ง€์ •๋œ ์†์„ฑ"์— ๋Œ€ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IObservableVector<T> ๋Š” object ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์งœ ์ œ๋„ค๋ฆญ ์œ ํ˜•์ด๊ณ  INotifyCollectionChanged ๋Š” ์ œ๋„ค๋ฆญ์ด ์•„๋‹™๋‹ˆ๋‹ค. ObservableCollection<T> ์™€ ๊ฐ™์€ ๋‚ด์žฅ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ณต์žกํ•œ ISupportIncrementalLoading / IItemsRangeInfo ์ง€ํ–ฅ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ๊ฒฝ์šฐ์—๋Š” ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ถ”์ƒ ๋ฐ์ดํ„ฐ ์ฑ„์šฐ๊ธฐ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋ฒ” ์‚ฌ๋ก€์™€ ํ•จ๊ป˜ ๊ธฐ๋ณธ ์ถ”์ƒ ๊ตฌํ˜„์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@shaggygi @weitzhandler @TonyHenrique

XAML ๊ตฌ๋ฌธ์„ ์ถ”์ƒํ™”ํ•˜๋Š” UWP/XamlUI3.0์— ๋Œ€ํ•œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฏธ๋ž˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ Windows ๋ Œ๋”๋Ÿฌ ๋ฐ ๋‚˜๋จธ์ง€ Windows ๋Ÿฐํƒ€์ž„์ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์— ๊ฑฐ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ๊ณ  ๋ฐฉ์‹์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด Android ๋˜๋Š” iOS/AppKit Renderer๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ Android/iOS AppKit Shim์€ ART API๋ฅผ C# ๋ฐ VB๋Š” ๋ฌผ๋ก  ๊ธฐ์กด C++, C ์–ธ์–ด๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€์›ํ•˜๋‹ค.
์—ฌ๊ธฐ์„œ Xamarin์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Microsoft๋Š” ์ด๋Ÿฌํ•œ ๋Œ€์ฒด ํ”Œ๋žซํผ ๋ Œ๋”๋Ÿฌ์—์„œ ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ์ผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ์€ Windows์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. WinUI 3.0์€ Fabric Web / React Native / WPF / WinForms / MFC๋ฅผ ํฌ๊ด„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PWA๋Š” ๋˜ํ•œ ์•ฑ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ 1๊ธ‰ ์‹œ๋ฏผ์ด ๋  ๊ฒƒ์ด๋ฏ€๋กœ Windows/.NET/UWP์šฉ์œผ๋กœ ์ง์ ‘ ์ œ์ž‘๋˜์ง€ ์•Š์€ ์•ฑ์— ๋Œ€ํ•œ ํ”Œ๋žซํผ ๊ฐ„ ์Šคํ† ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ํ•„์š”ํ•œ ๊ฒƒ์€ C#/.NET/UWP ๊ฐœ๋ฐœ์ž๊ฐ€ ์•ฑ๊ณผ ํˆฌ์ž๋ฅผ ๋” ๋„“์€ ํ”Œ๋žซํผ ํ™˜๊ฒฝ์œผ๋กœ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์Šคํ† ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด 2์„ผํŠธ: ์ €๋Š” Xamarin.Forms ๊ฐœ๋ฐœ์ž์ด๊ณ  (๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ) ๋ชจ๋“  XAML ๋ฐฉ์–ธ์ด ๋ชจ๋ฐ”์ผ ๊ณต๊ฐ„์„ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๊ณณ์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์–ธ์œผ๋กœ ๋ณ‘ํ•ฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ ์–ด๋„ ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚˜์˜ ๋ฐ”๋žŒ์ž…๋‹ˆ๋‹ค.

WinUI 3.0 ์ด์ƒ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋ชจ๋“  XAML์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ๋ฒˆ์—ญํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ WPF ์•ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ WPF ํ”„๋กœ์ ํŠธ๋Š” ๋ณด๋‹ค ํ˜„๋Œ€์ ์ธ WinRT XAML ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์— ๋‹ค๋ฅธ ๋ฐฉ์–ธ์ด ๊ณต์กดํ•  ์ˆ˜ ์žˆ๋„๋ก DocType์— ํ•ด๋‹นํ•˜๋Š” ํ•ญ๋ชฉ์„ XAML์— ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋ง๋ณด๋‹ค ์‰ฝ์Šต๋‹ˆ๋‹ค.

@mdtauk ์ผ๋‹จ Xaml ํ”Œ๋žซํผ์ด ์‹ค์ œ๋กœ ์˜คํ”ˆ ์†Œ์Šค๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉด ์Šคํƒ์˜ ๋งจ ์•„๋ž˜์— ์˜์กดํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ฃผ์š” ํ”Œ๋žซํผ๋ณ„ ์ข…์†์„ฑ์ด DirectX11, Direct2D ๋ฐ Windows Media Foundation, ๊ทธ๋Ÿฌ๋‚˜ Windows SDK์˜ ์–ด๋–ค ๋ถ€๋ถ„์ด ๊ฑฐ๊ธฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ), ๊ณ„์ธตํ™” ๋ฐฉ๋ฒ•(๋ชจ๋“  ์ด์‹์˜ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•œ ์‹ค์ œ ๋Š๋‚Œ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก).
๋˜ํ•œ ์šฐ๋ฆฌ๋Š” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ผ์ด์„ ์Šค๋กœ ๋ฐฐํฌ๋˜๋Š”์ง€ ์•„์ง ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ๊ฒฐ์ •์ด ๋˜์—ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

Android๋Š” Vulkan์„ ์‚ฌ์šฉํ•˜๋ฉฐ OpenGL์„ ์ง€์›ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
iOS ๋ฐ macOS๋Š” Metal์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ๋””์–ด ์ฝ”๋ฑ์˜ ๊ฒฝ์šฐ ๋„ค์ดํ‹ฐ๋ธŒ C ๊ธฐ๋ฐ˜ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@simonferquel ์ฝ”๋“œ๊ฐ€ ๋ฆฌํŒฉํ† ๋ง๋˜๊ณ  ์ฒดํฌ์ธ๋˜๋ฉด ๋” ๋ช…ํ™•ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๋…ธ๋ ฅ์„ ์ด๋Œ๋ ค๋ฉด ์ผ๋ถ€ iOS ๋ฐ Android ์ „๋ฌธ๊ฐ€๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

winui๊ฐ€ ์ปจํŠธ๋กค ๋ชจ์Œ์ด์—ˆ์„ ๋•Œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”Œ๋žซํผ์„ ๋Œ€์ฒดํ•˜๋ฏ€๋กœ ๋” ์ด์ƒ ์ •๋‹นํ™”๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฏธ WPF/Winforms์— ๋Œ€ํ•ด ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ .net Framework์—์„œ .net ์ฝ”์–ด๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์€ ํ™œ์„ฑํ™”๋˜๋ฉด ํ•„์š”ํ•œ dll์˜ winui ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์†Œ์Šค ๋ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜ธํ™˜์„ฑ(์ €๋Š” .net ํ•ต์‹ฌ ์•ฑ์—์„œ .net ํ”„๋ ˆ์ž„์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค)์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ๋ง์„ ์ „ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค! WinUI ํŒ€์€ ๋ชจ๋“  ์‘๋‹ต๊ณผ ํฌ์ธํŠธ๋ฅผ ์ฃผ์˜ ๊นŠ๊ฒŒ ์‚ดํŽด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์ƒ๊ฐ์„ ์ •๋ฆฌํ•œ ํ›„ ํŠน์ • ๋ฌธ์ œ(์˜ˆ: ๊ธฐ์กด UWP ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ์™€์˜ ํ˜ธํ™˜์„ฑ)์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ง‘์ค‘ ๋ฌธ์ œ๋ฅผ ๋‚˜๋ˆŒ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ๊ฒƒ์„ ๋“ฃ๊ณ  .net ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฉ‹์ง„ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•œ MS์— ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ๋ง์„ ์ „ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋นŒ๋“œ ํšŒ์˜ ์ดํ›„ UWP Xaml์˜ ๋ฏธ๋ž˜์— ์‹ค๋งํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด ๋ธ”๋กœ๊ทธ์™€ ์ธํ„ฐ๋„ท์— ์žˆ๋Š” ๋งŽ์€ ๊ธฐ์‚ฌ๋ฅผ ์ฝ์œผ๋ฉด UWP๊ฐ€ ๋…์ ์ ์œผ๋กœ "์—”ํ„ฐํ”„๋ผ์ด์ฆˆ"๊ฐ€ ๋˜๊ณ  ์žˆ๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›๊ฒŒ ๋˜๋ฉฐ, ๋งŽ์€ ๊ธฐ์—…์ด OS์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์ž‘์—…์ž๊ฐ€ MacBook Pro๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ์— ๋”ฐ๋ผ ์ด๋Š” ๋…ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ๊ธฐ๋ณธ UWP ๋ฐ Xamarin Forms(Android, iOS)์— ๋ง‰๋Œ€ํ•œ ํˆฌ์ž๋ฅผ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ”Œ๋žซํผ์„ ์‚ฌ๋ž‘ํ•˜์ง€๋งŒ MS๊ฐ€ React์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›์„ ๋ฐœํ‘œํ•œ ํ›„ ๊ณง ์ถœ์‹œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ์—์„œ UWP ์•ฑ์„ ํ”Œ๋žซํผ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ uwp ์•ฑ์„ ์…ธ๋กœ ์‚ฌ์šฉํ•˜๊ณ  React๋ฅผ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์—ฌ ์ ์  ๋” ๋งŽ์€ ์›น ํ”„๋ŸฐํŠธ ์—”๋“œ ๊ธฐ์ˆ ์„ ํ†ตํ•ฉํ•˜๋Š” "ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•ฑ"์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค. . ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ์ œ์•ˆ๋œ "์„ธํŠธ" ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์€ ์ด์ œ Edge ๋‚ด์—์„œ ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋กœ ์ธํ•ด ์ง€์—ฐ๋˜๋ฉฐ, ๊ธฐ๋ณธ UWP์™€ ์›น ๊ธฐ์ˆ ์„ ๋ชจ๋‘ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋ณธ UWP์™€ ์›น ๊ธฐ์ˆ  ๊ฐ„์˜ ๊ฒฝ๊ณ„๋ฅผ ์™„์ „ํžˆ ํ๋ฆฌ๊ฒŒ ํ•˜๋ฏ€๋กœ ํ˜„์žฌ ์†”๋ฃจ์…˜์— ์ด์ƒ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. "์ฐฝ/๊ฐ€์žฅ์ž๋ฆฌ ํƒญ". ์ด "ํ•˜์ด๋ธŒ๋ฆฌ๋“œ" ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ์›น ๊ธฐ์ˆ ์„ ํ˜„์žฌ ํ”Œ๋žซํผ์— ์ฒœ์ฒœํžˆ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ "๋ธŒ๋ผ์šฐ์ €"์— "๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ" ํƒญ๋„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์†Œ๋น„์ž ๊ด€์ ์—์„œ) ์ด๊ฒƒ์€ ๋˜ํ•œ "๋„ค์ดํ‹ฐ๋ธŒ uwp ์•ฑ"์ด ๋ฐ์Šคํฌํƒ‘์—์„œ ์žฅ๊ธฐ๊ฐ„ ์‹คํŒจํ•  ๊ฒฝ์šฐ ํƒˆ์ถœ๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์ƒ๊ฐ์— ๋Œ€ํ•œ ์ด์œ ๋Š” ๊ณง ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฉด UWP๊ฐ€ ๋‹ค์Œ Silverlight ํฌ์ƒ์ž๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํƒˆ์ถœ์šฉ ํ•ด์น˜๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. MS๋Š” PWA ์ถ”์„ธ์—์„œ ์žƒ์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ธฐ๋ฅผ ํ—ค์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Windows์—์„œ React ๊ธฐ๋ณธ ์ง€์›์„ ์œ„ํ•ด ์†์„ ๋Œ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ด ์‹œ๊ฐ„๊นŒ์ง€ UWP/c#/.net์— ๋Œ€ํ•œ "๊ฒฝ๋กœ"๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” ๊ต์ฐจ ํ”Œ๋žซํผ์— ์žˆ๊ณ  ์ด๋Ÿฌํ•œ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํˆฌ์ž๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ํฌ๋งํ•˜๋ฉด์„œ ๋‚ด๊ธฐ๋ฅผ ๊ฑธ์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

Blazor๊ฐ€ ๊ฑฐ๊ธฐ์— ์žˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์†”์งํžˆ ๋งํ•ด์„œ ์ƒˆ ํ”Œ๋žซํผ์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ธฐ ์ „์— React๋ฅผ ๋ฐฐ์šฐ๊ฑฐ๋‚˜ ์šฐ๋ฆฌ MS๊ฐ€ ์ด ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ œํ•œ์ ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ Github์— 75์–ต ๋‹ฌ๋Ÿฌ๋ฅผ ์ง€๋ถˆํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ƒ๋Œ€์ ์ด ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด UWP/Win32 ํˆฌ์ž์— ๋Œ€ํ•œ ํ”Œ๋žซํผ ๊ฐ„ ๊ธฐ๋Šฅ์œผ๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํŒจ๋กœ ์ธํ•œ ํ‰ํŒ ์†์ƒ์„ MS๊ฐ€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋žซํผ ๊ฐ„ ๊ธฐ๋Šฅ์€ .NET 5์™€ ๋™์˜์–ด์—ฌ์•ผ ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ”Œ๋žซํผ์„ ๊ฑด๋„ˆ๋Š” ์•„๊ธฐ ๋‹จ๊ณ„๊ฐ€ MS์—์„œ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ €๋Š” ํ•ญ์ƒ xaml/.net/c#์˜ ์—ด๋ ฌํ•œ ํŒฌ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šฐ์‹ ๊ฐ€์š”?

ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์ด๋‚˜ ํ•ญ๋ชฉ ํ…œํ”Œ๋ฆฟ๋„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

Visual Studio ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

์ด๊ฒƒ์€ ๊ฒ€์ƒ‰ ๋ฐ ๊ต์ฒด(๊ฐ€์น˜๊ฐ€ ๋‚ฎ์Œ) ๋˜๋Š” ์ƒˆ ๋ฒ„์ „์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ์ข…์†์„ฑ์„ ํ†ตํ•ฉ(๋” ๊ฐ€์น˜๊ฐ€ ์žˆ์ง€๋งŒ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ)

Re: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ

Creators Update(15063)์™€ ์—ญํ˜ธํ™˜๋˜๋Š” ๊ฒƒ์€ ๊ณ ์ •๋œ ๊ธฐ์ค€์ ์ด ๋ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์•ž์œผ๋กœ์˜ ๊ณ„ํš์€ ํ˜„์žฌ ๋ฒ„์ „๊ณผ ๊ทธ ์ด์ „ ๋ฒ„์ „์˜ X๊ฐœ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๊ณต๊ฐœ์ ์œผ๋กœ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์€ ํ™•์žฅ ๊ธฐ๋Šฅ์ด๋‚˜ ์ž์ฒด ์ปจํŠธ๋กค ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ด๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ•ด๋‹น ์ˆ˜์ค€์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ๋„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์‹ฌ์ง€์–ด ์œˆ๋„์šฐ 8.1๊นŒ์ง€?

Re: ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

๊ธฐ์กด UWP๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(ํŽ˜์ด์ง€๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค). ์•„๋‹ˆ๋ฉด ์ „์ฒด ์•ฑ์„ ํ•œ ๋ฒˆ์— ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ•œ ๋ฒˆ์— ์ „์ฒด ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ฑ„ํƒ ์†๋„๊ฐ€ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.

WPF ์•ฑ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? - ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต์€ WinUI 2.x ๋˜๋Š” 3.x๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” XAML ์•„์ผ๋žœ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๊ฐ™์€ ์•ฑ์—์„œ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์˜ˆ, ์ด ๋ฌธ์ œ๋ฅผ ๋” ์ง‘์ค‘๋œ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๋ฉด ์•„์ด๋””์–ด๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํฌ์ฐฉํ•˜๊ณ  ์ ‘์„ ์„ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ๋งํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ UWP์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ์ ์ ˆํ•œ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.

@mrlacey :

ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์ด๋‚˜ ํ•ญ๋ชฉ ํ…œํ”Œ๋ฆฟ๋„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์•„์ดํ…œ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ…œํ”Œ๋ฆฟ๋„ ์žฌ๋ฏธ์žˆ์Šต๋‹ˆ๋‹ค! Windows Template Studio ์™€ ๊ฐ™์ด ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์ƒ์šฉ๊ตฌ ๋ฐ ์‹œ์ž‘ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์—๋Š” ์ง€๊ธˆ๊นŒ์ง€์˜ ์ข‹์€ ์ ์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ฒ€์ƒ‰ ๋ฐ ๊ต์ฒด(๊ฐ€์น˜๊ฐ€ ๋‚ฎ์Œ) ๋˜๋Š” ์ƒˆ ๋ฒ„์ „์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ์ข…์†์„ฑ์„ ํ†ตํ•ฉ(๋” ๊ฐ€์น˜๊ฐ€ ์žˆ์ง€๋งŒ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ)

์ข‹์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ข…์†์„ฑ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋” ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜ธํ™˜๋˜๋Š” ์ƒˆ๋กœ์šด NuGet ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ์ฐพ๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ?

Creators Update(15063)์™€ ์—ญํ˜ธํ™˜๋˜๋Š” ๊ฒƒ์€ ๊ณ ์ •๋œ ๊ธฐ์ค€์ ์ด ๋ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์•ž์œผ๋กœ์˜ ๊ณ„ํš์€ ํ˜„์žฌ ๋ฒ„์ „๊ณผ ๊ทธ ์ด์ „ ๋ฒ„์ „์˜ X๊ฐœ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์‚ฌ์šฉ์— ๋”ฐ๋ผ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ง€์› ๋ฒ„์ „ ๋ฒ”์œ„๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ˆ˜์˜ ๋ฒ„์ „์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ๊ณ„์†ํ•ด์„œ ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๊ฐ€์žฅ ํ™œ์„ฑํ™”๋œ Windows 10 ์ถœ์‹œ ๋ฒ„์ „์„ ์ง€์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณต๊ฐœ์ ์œผ๋กœ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์€ ํ™•์žฅ ๊ธฐ๋Šฅ์ด๋‚˜ ์ž์ฒด ์ปจํŠธ๋กค ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ด๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ•ด๋‹น ์ˆ˜์ค€์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ๋„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์‹ฌ์ง€์–ด ์œˆ๋„์šฐ 8.1๊นŒ์ง€?

์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ง€์ • ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ์ด๋‚˜ "์ธ์ฆ"์„ ๋ถ€๊ณผํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ ๊ด€๋ฆฌ๋Š” ๊ท€ํ•˜์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. 2019๋…„ 5์›” ์—…๋ฐ์ดํŠธ, WinUI 3.0 ๋ฐ WinUI์˜ ํ–ฅํ›„ ๋ฒ„์ „์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ด์•ผ๊ธฐ๋Š” ๋ถ„๋ช…ํžˆ ์šฐ๋ฆฌ๊ฐ€ ๊ณง ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€๊ณ  ์‹ถ์€ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด UWP๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(ํŽ˜์ด์ง€๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค). ์•„๋‹ˆ๋ฉด ์ „์ฒด ์•ฑ์„ ํ•œ ๋ฒˆ์— ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ•œ ๋ฒˆ์— ์ „์ฒด ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ฑ„ํƒ ์†๋„๊ฐ€ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.

ํ›Œ๋ฅญํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ง€์ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ์šฐ๋ฆฌ๊ฐ€ ๊ณง ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•˜๋Š” ์ฃผ์ œ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ๋งํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ UWP์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ์ ์ ˆํ•œ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.

@riverar : ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ํŠน์ • ์‚ฌ์šฉ๋ฒ•์ด๋‚˜ ์„น์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค๋ฅธ Xaml ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ(์˜ˆ: WPF)๊ณผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด Windows 10 ๋ฐ UWP SDK์˜ ์ผ๋ถ€๋กœ ์ œ๊ณต๋˜๋Š” Xaml ํ”Œ๋žซํผ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด " UWP Xaml "์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Win32 ์•ฑ ๋ชจ๋ธ๊ณผ ๊ตฌ๋ณ„๋˜๋Š” " UWP ์•ฑ ๋ชจ๋ธ "(ํŒจํ‚ค์ง• ๋ฐ ์„ค์น˜, ๋ฐ์ดํ„ฐ ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ, ๋Ÿฐํƒ€์ž„ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋“ฑ)์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

Windows ๋ฐ์Šคํฌํ†ฑ์—์„œ๋„ ์‚ฌ์šฉ์ž๋Š” ์›น ๊ฒ€์ƒ‰์— ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•ฉ๋‹ˆ๋‹ค.
() UWP vNext XAML + .NET (C#/F#/VB.NET)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ดœ์ฐฎ์€ ์›น ์•ฑ์„ ๊ฐœ๋ฐœํ•  ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์ˆ˜๋…„ ๋™์•ˆ WPF + ClickOnce๋กœ ๊ฐœ๋ฐœํ•œ ๋‹ค์Œ UWP๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” UWP๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ (๋˜๋Š” ๋‹ค์Œ ๋ฒ„์ „) ๋…๋ฆฝ ์‹คํ–‰ํ˜• EXE, ๋” ๋‚˜์€ ์ฐฝ API(์›ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ง€์ • Winamp ์ฐฝ ์Šคํƒ€์ผ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ), ๋” ๋งŽ์€ ์ธ์‡„ API, C dll๊ณผ์˜ ์‰ฌ์šด ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. , OCX, ๊ตฌ์„ฑ ์š”์†Œ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์€ ์›น์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

UNO๋ฅผ ๋ณด์•˜์„ ๋•Œ ๋‚˜๋Š” ๊ตณ๊ฒŒ ๋งˆ์Œ์„ ๋จน์—ˆ์Šต๋‹ˆ๋‹ค. Microsoft๋Š” ์ด ํšŒ์‚ฌ๋ฅผ ์ธ์ˆ˜ํ•˜๊ณ  ์ด ๊ฐœ๋ฐœ์ž๋“ค์„ UWP ๋ฐ Xamarin ํŒ€๊ณผ ํ•จ๊ป˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฒ„์ „ UWP๊ฐ€ ์›น, Windows, ๋ชจ๋ฐ”์ผ ๋ฐ IoT์—์„œ ์‹คํ–‰๋˜๋Š” Azure ์ œํ’ˆ์ด ๋œ๋‹ค๋ฉด ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค. IMO๋Š” Azure Portal๋„ UWP vNext๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋Š” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Silverlight๋กœ, WPF๋กœ, UWP๋กœ, Xamarin์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ถ๊ทน์ ์ธ GUI XAML ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ์ƒ๊ฐ์— ์›น์€ ์ตœ์†Œํ•œ ๊ธฐ๋Šฅ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์—์„œ ์ง€์›๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

_INotifyDataErrorInfo_

_INotifyDataErrorInfo_์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ƒˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋„์ž… ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด๊ณ  WinUI์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์—†์–ด์•ผ ํ•˜๋Š” ๋ทฐ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: _INotifyPropertyChanged_ ๋˜๋Š” _INotifyCollectionChanged)_

์ด ์ฃผ์ œ์— ๋Œ€ํ•ด. Windows.UI.Xaml.Interop์—๋Š” ์ด๋ฏธ INotifyCollectionChanged ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๊ณ  Windows.UI.Xaml.Data์—๋Š” INotifyPropertyChanged๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€๋Š” Microsoft ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ System.Runtime.WindowsRuntime ์–ด์…ˆ๋ธ”๋ฆฌ๋Š” WinUI์—์„œ .Net์œผ๋กœ ์ผ๋ถ€ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ง ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์œ ์ผํ•œ ๊ฒƒ์€ MSIX/Appx ํŒจํ‚ค์ง€ ๋ชจ๋ธ์„ 100% ์ง€์›ํ•˜๊ณ  Win10์ด Windows์˜ ์ˆ˜๋ช… ๋™์•ˆ ์„ค์น˜ ๋ฐ ์ œ๊ฑฐ ์ž‘์—…์„ ์ˆ˜์ •ํ•˜๋Š” ํ™˜์ƒ์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ AppContainer ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์„ ํƒํ•œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ API์˜ ์ด์ƒํ•œ ํ•˜์œ„ ์ง‘ํ•ฉ ๋•Œ๋ฌธ์— "UWP" ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•ญ์ƒ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. C++ ๊ฐœ๋ฐœ์ž๋กœ์„œ ๊ทธ๊ฒƒ์€ ์‹ค๋ง์Šค๋Ÿฌ์› ๊ณ  ๋งค๋…„ ์ „์ฒด Win32 API ์„ธํŠธ๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์—ฌ๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์•ˆ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ WinUI 3.0์„ ์‚ฌ์šฉํ•˜์—ฌ Win32 ์Šคํƒ์˜ 100%์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์ด ํ™ฉ๊ธˆ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์ง€๊ธˆ XamlIslands๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋Š”๋ฐ ํ™˜์ƒ์ ์ธ ํƒˆ์ถœ๊ตฌ์ด์ง€๋งŒ ์ €์—๊ฒŒ๋Š” ๋ถˆ์•ˆ์ •ํ–ˆ๊ณ  ๊ฒฐ์Šน์„ ์„ ํ†ต๊ณผํ•˜๊ธฐ ์ „์— ์•ฝ๊ฐ„์˜ ์ž‘์—…์ด ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.

AppContainer ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€๋ฅผ ์ฑ„์šฐ์ง€ ์•Š๊ณ  Win32 ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์„ ์–ป๊ณ  UI๋กœ ๋งŒ๋“  ๋ชจ๋“  ๋ฐœ์ „ ์‚ฌํ•ญ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด WinUI 3๊ฐ€ ์ €์—๊ฒŒ ์™„๋ฒฝํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@eklipse2k8 ํŽธ์•ˆํ•œ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ๋„ ์‚ฌ์šฉ์ž์˜ ํŒŒ์ผ ๋ฐ ์žฅ์น˜์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ ๊ถŒํ•œ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ผ์ข…์˜ ๊ณต์‹ ํ…Œ์ŠคํŠธ ๋ฐ ์ฝ”๋“œ ์„œ๋ช… ์š”๊ตฌ ์‚ฌํ•ญ ์—†์ด ์‚ฌ์šฉ์ž ์˜์—ญ์„ ์œ ์ง€ํ•˜๊ณ  ๊ด€๋ฆฌ์ž ๋ฐ ์ปค๋„ ์•ก์„ธ์Šค๋กœ์˜ ์ƒ์Šน์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ทœ์น™์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ,

์ด ๊ฒŒ์‹œ๋ฌผ์ด Font Rendering , ClearType , DirectWrite ๋ฐ Windows UI์˜ ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ์ฃผ์ œ์— ์–ผ๋งˆ๋‚˜ ์˜ํ–ฅ์„

Windows UI์™€ ๊ธ€๊ผด ๋ Œ๋”๋ง์— ๋Œ€ํ•œ ์‚ฌ๋žŒ๋“ค์˜ ๋ถˆ๋งŒ (๋˜๋Š” ๋งŒ์กฑ)์€ ์ธํ„ฐ๋„ท์˜ ๊ฑฐ์˜ ๋ชจ๋“  ๊ณณ ์—์„œ ์ž˜ ์„ค๋ช…๋˜์–ด ์ข‹์•„ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์žˆ๊ณ  ์ ˆ๋Œ€์ ์œผ๋กœ ์‹ซ์–ดํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์–ด๋Š ์ชฝ์ด ๋‹ค๋ฅธ ์ชฝ๋ณด๋‹ค ๋‚˜์€์ง€ ๋…ผํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ•ดํ‚น, '๊ธ€๊ผด ํŠœ๋„ˆ' ๋˜๋Š” ๊ธ€๊ผด์„ ๋” ์ž˜ ๋ณด์ด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด OS ์„ค์ •์„ ์กฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ์˜จ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ €๋ฅผ ๋ฏฟ์œผ์„ธ์š”. ์ œ๊ฐ€ ๋‹ค ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด ์ปค๋„ ๋ชจ๋“œ์—์„œ DirectWrite ๊ธฐ๋Šฅ์„ ํŒจ์น˜ํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„ ๋ชจ๋“œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ตฌ๋ฅผ ํ•˜๊ธฐ๊นŒ์ง€ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทผ์‹œ / ๊ทผ์‹œ ๋ผ๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์‹œ์‹ ๊ฒฝ ์งˆํ™˜์„

ํŒ” ๊ฑฐ๋ฆฌ๋ฅผ ๋„˜์–ด ๊ต์ • ๋ Œ์ฆˆ๋ฅผ ์ฐฉ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. :์•ˆ๊ฒฝ: ๋ฐ์Šคํฌํ†ฑ ์ปดํ“จํ„ฐ ํ™”๋ฉด์ด ๊ฑฐ์˜ ํŒ” ๊ฑฐ๋ฆฌ์— ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ.

  • ๋งค๋„๋Ÿฝ๊ฒŒ ๋ณด์ด๋Š” ๊ธ€๊ผด์ด ํ๋ฆฟํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.
  • ๋‚ ์นด๋กœ์šด ๋ชจ์„œ๋ฆฌ(ํ”ฝ์…€ ๋‹จ์œ„๋กœ ๋งž์ถค)๊ฐ€ ์žˆ๋Š” ๊ธ€๊ผด์ด ๋” ์„ ๋ช…ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

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

์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ…์ŠคํŠธ๋ฅผ ๋ณด๋Š” ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋‹ต๋‹ตํ•˜๊ณ  ๊ฐ€์Šด์ด ์•„ํ”•๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์—ฌ์ „ํžˆ Windows 10์ด ์•„๋‹Œ 7์„ ์‹คํ–‰ํ•˜๋Š” ์ฃผ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  Windows 10 ๊ธฐ๋ณธ Metro UI๋Š” ์–ด๋””์—์„œ๋‚˜ ๊ธ€๊ผด ๋‹ค๋“ฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€๊ผด ๋‹ค๋“ฌ๊ธฐ ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด Windows 7 ์˜ services.msc MMC ์Šค๋ƒ…์ธ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

mmc_3104

์ดˆ์ ์ด ๋งž์ง€ ์•Š์•„ ํ๋ฆฟํ•œ ํ…์ŠคํŠธ๊ฐ€ ๋ณด์ž…๋‹ˆ๊นŒ? ์—ฌ๊ธฐ. ์ข€ ๋” ํ™•๋Œ€ํ•ด ๋ณผ๊นŒ์š”...

psp_3105

๋ง™์†Œ์‚ฌ, ์ž๋™ ์ž…์ฒด๋„ ์—์„œ ์‹ญ์ž๋ˆˆ์œผ๋กœ ํ…์ŠคํŠธ๋ฅผ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค.

์ด ํŠน์ • ๊ฒฝ์šฐ์— ์ด ์ฐฝ์˜ ์ปจํŠธ๋กค ๊ณ„์ธต์„ ํŒŒ๊ณ ๋“ค๋ฉด MMC ์Šค๋ƒ…์ธ์ด "์„ค๋ช…์„ ๋ณด๋ ค๋ฉด ํ•ญ๋ชฉ ์„ ํƒ" ํŒจ๋„์—์„œ ํผ์ง€ ํ…์ŠคํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” Internet Explorer DHTML/ActiveX ์ปจํŠธ๋กค์„ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋‚ ์นด๋กœ์šด(ํ”ฝ์…€์— ๋งž์ถ”๊ธฐ), "๋„์›€๋ง" ๋ฉ”๋‰ด ๋ฐ ์„œ๋น„์Šค ๋ชฉ๋ก์€ ์ผ๋ฐ˜ USER32 ๋ฐ GDI32 ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋กœ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์€ ์˜ˆ๋Š” Windows์˜ ๊ธ€๊ผด ๋ Œ๋”๋ง๊ณผ ๊ด€๋ จ๋œ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. IE8์€ ClearType ๋ฐ ๊ธ€๊ผด ๋‹ค๋“ฌ๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์ „์—ญ ์šด์˜ ์ฒด์ œ ์„ค์ •์„ ์กด์ค‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ IE9 ์ด์ƒ์„ ์„ค์น˜ํ•˜๋ฉด IE9+๋Š” ๊ธ€๊ผด ๋‹ค๋“ฌ๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋Š” ๋ชจ๋“  ๋…ธ๋ ฅ์„ ๊ธฐ๊บผ์ด ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. IE9+๋Š” ์ƒ๊ด€ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ€๊ผด์ด ๋ถ€๋“œ๋Ÿฌ์šด ํ…์ŠคํŠธ๋กœ ์›น ์‚ฌ์ดํŠธ(๋ฐ ActiveX ์ปจํŠธ๋กค)์—์„œ ํ…์ŠคํŠธ๋ฅผ ๋ณด๋„๋ก ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ Windows 8 ๋ฐ Windows 10์˜ ํƒ„์ƒ, Metro Apps, WPF ๋ฐ UWP๊ฐ€ ๋ชจ๋‘ IE9+์™€ ๋™์ผํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์™€ ๊ฐ™์€ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋” ์•…ํ™”๋ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€์— ์žˆ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  UI ๊ธฐ์ˆ ์€ ์‹œ์Šคํ…œ์—์„œ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ์ „์—ญ ์šด์˜ ์ฒด์ œ ์ „์ฒด ์„ค์ • ํ•ฉ๋‹ˆ๋‹ค. ์šด์˜ ์ฒด์ œ ์ „์ฒด ์ˆ˜์ค€์—์„œ ClearType ๋ฐ ๊ธ€๊ผด ๋‹ค๋“ฌ๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ClearType ๋ฐ DirectWrite API(๊ฒฐ๊ณผ์ ์œผ๋กœ Metro, WPF ๋ฐ UWP ์•ฑ)๊ฐ€ ๊ธ€๊ผด ๋‹ค๋“ฌ๊ธฐ๋กœ ๊ทธ๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ๋‚˜ ํ˜ผ์ž๋งŒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์–ผ๋งˆ ์ „ Google Chrome ์€ v31 ๋ฆด๋ฆฌ์Šค ์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ IE9+ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด๊ณ  ์ „์ฒด ์‹œ์Šคํ…œ ์ „์ฒด ์„ค์ •์„ ๋ฌด์‹œํ•˜๊ณ  ๋ชจ๋“  ๊ธ€๊ผด ๋ Œ๋”๋ง์„ DirectWrite ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€ํ™”๋Š” ์ธํ„ฐ๋„ท์„ ๋ถ„๋…ธ์ผ€ ํ–ˆ์Šต๋‹ˆ๋‹ค. Chromium ๋ฌธ์ œ 319429๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ด๋ฅผ ๊ฐˆ๊ธฐ๊ฐˆ๊ธฐ ์ฐข์€ ํ›„ Google์€ ๊ทผ์‹œ ์‹œ๊ฐ ์žฅ์• ๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด Chrome 37 ์˜ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ด์ œ ๊ธ€๊ผด ๋‹ค๋“ฌ๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์šด์˜ ์ฒด์ œ ์ „์ฒด ์„ค์ •์„ ์กด์ค‘ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์žฅ์˜ ํž˜๊ณผ ์‹œ์žฅ์˜ ํž˜ ๋•๋ถ„์— Microsoft ๋Š” ๋ธŒ๋ผ์šฐ์ € ์ „์Ÿ์—์„œ ์ง€๊ณ  ํ˜„์žฌ Chromium ๋ Œ๋”๋ง ์—”์ง„์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์ง€๋งŒ Edge ํŒ€์ด ๋น„ํ™œ์„ฑํ™”๋œ ๊ธ€๊ผด ๋‹ค๋“ฌ๊ธฐ ์„ค์ •์„ ์กด์ค‘ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ˆจ์„ ์ฃฝ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Microsoft๊ฐ€ ์‹œ๋ ฅ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์šด์˜ ์ฒด์ œ์˜ ๋ชจ๋“  ์•ฑ, ๋ชจ๋“  UI ์Šคํƒ์— ๊ฑธ์ณ ์กด์ค‘ ๋˜์–ด์•ผ ํ•˜๋Š” ํ•˜๋‚˜์˜ ์ „์—ญ ์„ค์ •

๊ทธ๋ฆฌ๊ณ  ์นœ์ˆ™ํ•œ ์•Œ๋ฆผ์œผ๋กœ ์ด๊ฒƒ์€ ์‹œ๊ฐ์  ๊ธฐ๋ณธ ์„ค์ •์ด ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์œผ๋กœ Windows UI์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ฑ ๋ฌธ์ œ ์ž…๋‹ˆ๋‹ค.

์ „์„ธ๊ณ„์ ์ธ ๊ทผ์‹œ ์œ ๋ณ‘๋ฅ ์„ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ ์„ธ๊ณ„ ์ธ๊ตฌ์˜ 22% ์ด์ƒ, ์ฆ‰ 15์–ต ๋ช…์ด ๊ทผ์‹œ๋ผ๊ณ  ์ถ”์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3930268/

๊ฐ์‚ฌ ํ•ด์š”,
๋ธŒ๋ผ์ด์–ธ

:walking_man: :walking_woman: ์‹ค์ข…์ž - LA ์›Œํ‚น

์ฆ‰, ์ „์ฒด Xaml ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ GitHub์—์„œ ๊ฐœ๋ฐœ๋˜๊ณ  NuGet ํŒจํ‚ค์ง€๋กœ ๋Œ€์—ญ ์™ธ ๋ฐฐ์†ก๋ฉ๋‹ˆ๋‹ค.

NuGet์€ ํ›Œ๋ฅญํ•˜์ง€๋งŒ vcpkg (๋ฐ CMake )๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ธฐ์กด์˜ ๋Œ€๊ทœ๋ชจ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ).

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šฐ์‹ ๊ฐ€์š”?

์šฐ์„ ์ˆœ์œ„:
Win32 + Xaml ๋ฐ์Šคํฌํ†ฑ + WinUI
Win32 + Xaml ์ œ๋„ + WinUI
UWP + WinUI

๋ฐ์Šคํฌํ†ฑ ์•ฑ ํ˜„๋Œ€ํ™”๋ฅผ ์œ„ํ•œ Xaml Islands๋ฅผ ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ?Windows 10์—์„œ ํ™•์žฅ๋œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด Xaml Islands๋ฅผ ๋” ์œ ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค๊นŒ์š”?

์˜ˆ, Xaml Islands๋Š” ํฅ๋ฏธ๋กญ์ง€๋งŒ ๊ธฐ์—… ๊ณ ๊ฐ์ด ์•„๋‹Œ ์†Œ๋น„์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ๋œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ณ ๊ฐ์€ OS๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ์ƒ๋‹นํžˆ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ๋ฒ”์œ„์—์„œ๋Š” ์ƒˆ๋กœ์šด WinUI๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. Xaml, 1903๋…„์œผ๋กœ ์ž ๊ทธ๋ฉด ์•„๋งˆ๋„ ์ด๋ฏธ 1๋…„์ด ์ง€๋‚ฌ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค).

WinUI์˜ Xaml, ๊ตฌ์„ฑ ๋ฐ ์ž…๋ ฅ API์— ๋Œ€ํ•œ ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” Windows UWP SDK ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Visual Studio ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

UWP ์•ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—(ํ˜„์žฌ ์ง์ ‘ ํŒ๋งค์—๋Š” WPF + Desktop Bridge๋ฅผ ์‚ฌ์šฉ) ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์ผํšŒ์„ฑ์ด๋ฉฐ ๊ฐ€์žฅ ํฐ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์—์„œ๋„ Windows::UI::Xaml ๋Œ€ํ•œ ์ „์—ญ ์ฐพ๊ธฐ ๋ฐ ๋ฐ”๊พธ๊ธฐ๋Š” ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ๋ฒ„์ „ ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค..?).

WinUI 3.0์„ ์ถœ์‹œํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ๋Š” ํ˜ผํ•ฉ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋ณ„๋„์˜ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ทจ๊ธ‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. UWP Xaml ๋˜๋Š” WinUI Xaml์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ผํšŒ์„ฑ ๋ณ€ํ™˜์€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€์žฅ ํฐ ์šฐ๋ ค ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๋Š” ํŠนํžˆ UWP Xaml ์ปจํŠธ๋กค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด UWP ์•ฑ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ๋ฐ ์ž‘์—…์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์กด ๋ฒ„์ „์˜ Windows Community Toolkit ์€ WinUI 3.0 ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Toolkit๊ณผ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์•ฑ์€ WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋Š” ๊ธฐ์ˆ ์„ ์„ ํƒํ•˜๊ณ  ๊ณ ์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋…„ ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ์ตœ์‹ ์˜ ์ตœ๊ณ ์˜ ๋ฐ์Šคํฌํ†ฑ UI ํ”„๋ ˆ์ž„์›Œํฌ(Win32, ATL, WTL, MFC, WinForms, WPF, UWP Xaml ๋ฐ ํ˜„์žฌ WinUI Xaml)๋ฅผ ์•ฝ์†ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์„ ํƒ์€ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ ๋ฐ ๊ฐœ๋ฐœ์ž ์ง€์‹์˜ ๋‹จํŽธํ™”๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์— ๋”ฐ๋ผ 7๊ฐœ์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๊ณผ ๋น„๊ตํ•˜์—ฌ Windows์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๋Œ€ํ•œ ํ•˜๋‚˜์˜ ์„ธ์…˜/ํ•˜๋‚˜์˜ ์›น ํŽ˜์ด์ง€/ํ•˜๋‚˜์˜ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ ๋‹ต๋ณ€์„ ๊ฐ–๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. WinUI Xaml์ด ๋ฏธ๋ž˜์ธ ๊ฒฝ์šฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋„๊ตฌ ํ‚คํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ด๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ์™€ WinUI 3.0 ์•ฑ ๊ฐ„์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?

๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—(Win32/WPF์™€ ๋น„๊ตํ•˜์—ฌ) UWP Xaml๋กœ ๋ฌด์—‡์ด๋“  ํ•˜๋Š” ๊ฒƒ์„ ๋ฏธ๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ๊ทธ๋Ÿฐ ๋ฉด์—์„œ ํ˜ผ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ฑ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์‰ฝ๊ฒŒ ๋‹ค์‹œ ์ปดํŒŒ์ผ ๋ฐ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๋Š” UWP Xaml ์ œ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” WinRT ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”.

WinUI 3์—์„œ UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ•ด๋‹น ์—†์Œ

  1. ์œ„์™€ ๋กœ๋“œ๋งต ์— ์š”์•ฝ๋œ ์ „์ฒด 3.0 ๊ณ„ํš์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์‹ ๊ทœ ๋ฐ ๊ธฐ์กด Windows ์•ฑ์— WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋กœ๋“œ๋งต์—๋Š” Xaml Desktop ์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ WinUI์˜ ์†Œ๊ด€์— ํ•ด๋‹นํ•ฉ๋‹ˆ๊นŒ?
//Build/์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ด์ „์— ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ์ด์ „์— UWP Xaml์„ ์ฑ„ํƒํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๊ธฐ์กด C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ FileOpenPicker ๋ฅผ ์‚ฌ์šฉ ํ•˜์—ฌ ํŒŒ์ผ์„ ์„ ํƒํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ IStorageFile ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ ์ด๋ฅผ ๊ธฐ์กด ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ „๋‹ฌํ•˜์—ฌ ์—ด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ: libpng , libjpeg ๋“ฑ). ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ WPF๋ฅผ ๊ณ ์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Xaml Desktop ๋˜๋Š” Win32 + Xaml Islands ์ด๋Ÿฌํ•œ ์ œํ•œ ์—†์ด ์‚ด ์ˆ˜ ์žˆ๋‹ค๋ฉด ์˜ˆ, ์ƒˆ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ์— WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ? ์ƒˆ Win32 ์•ฑ์„ ๋งŒ๋“ค๊ณ  MSIX๋กœ ํŒจํ‚ค์ง• ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? WPF ์•ฑ์— ์ƒˆ ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Fluent UI๋กœ C++ MFC ์•ฑ ํ˜„๋Œ€ํ™”?

WinUI(๋ฐ MSIX๋กœ ํŒจํ‚ค์ง•)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ Win32 ์•ฑ ๋งŒ๋“ค๊ธฐ.


์งˆ๋ฌธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์„ธ์š”. ๊ธฐ๊บผ์ด ๋” ๋…ผ์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ WPF/WinForms์—์„œ Compact Overlay๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
Android์—์„œ "๋‹ค๋ฅธ ์•ฑ ๊ถŒํ•œ ์œ„์— ๊ทธ๋ฆฌ๊ธฐ"์™€ ๊ฐ™์€ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ์‹œ์Šคํ…œ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ์•ฑ ๋ชจ๋ธ + ํŒจํ‚ค์ง•(UWP + AppX, Win32 + MSIX)์ด ํ—ˆ์šฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค(์ƒŒ๋“œ๋ฐ•์Šค ๋‚ด๋ถ€์˜ ์ „์ฒด ์ถ”์ƒํ™”).

Windows๋Š” ์ตœ๊ณ ์˜ ๋ณด์•ˆ๊ณผ ํ•จ๊ป˜ ๊ฐ€์žฅ ์ง„๋ณด๋˜๊ณ  ๋ฌดํ•œํ•œ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
์•„๋‹ˆ์š” ๋ณด์•ˆ์„ ์œ„ํ•ด ๊ธฐ๋Šฅ์ด ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋กœ๋“œ๋งต์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๊ณต๊ฐœํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ์™€ WinUI 3.0 ์•ฑ ๊ฐ„์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?

์š”์ ์— ๋”ฐ๋ฅด๋ฉด ํ˜„์žฌ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํด๋ผ์ด์–ธํŠธ์— ์‚ฌ์šฉ ์ค‘์ธ UWP ์•ฑ์ด ์ƒ๋‹นํžˆ ๋งŽ์œผ๋ฉฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ๊ฐ€ ์–ผ๋งˆ๋‚˜ ํ˜ธํ™˜๋˜๋Š”์ง€ ์ƒ์„ฑํ•˜๋Š” .Net Framework ์—์„œ .Net Core ์™€ ์œ ์‚ฌํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๊ฐ€ ์žˆ์œผ๋ฉด ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋ณด๊ณ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( ์˜ˆ: ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” API) ๋ฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์˜ต์…˜. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด UWP์—์„œ WInUI๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ๊ฐ€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ทธ๋‹ค์ง€ ๋ถˆ์•ˆ์ •ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ ์•ฑ ํ˜„๋Œ€ํ™”๋ฅผ ์œ„ํ•œ Xaml Islands๋ฅผ ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ?
Windows 10์—์„œ ํ™•์žฅ๋œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด Xaml Islands๋ฅผ ๋” ์œ ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค๊นŒ์š”?

์˜ˆ, ํ•˜์ง€๋งŒ ์ƒˆ๋กœ ๊ฐœ๋ฐœ๋œ ๋ชจ๋“  ๋ฐ์Šคํฌํ†ฑ ์•ฑ์ด API ๋ฐฑ์—”๋“œ๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” UWP๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฏธ Windows10์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์œ„์™€ ๋กœ๋“œ๋งต์— ์š”์•ฝ๋œ ์ „๋ฐ˜์ ์ธ 3.0 ๊ณ„ํš์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์‹ ๊ทœ ๋ฐ ๊ธฐ์กด Windows ์•ฑ์— WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐ์Šคํฌํ†ฑ ํŒ€์€ ์ด๋ฏธ WinUI 3์˜ ์†Œ์‹์— ํฅ๋ถ„ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฒฝ๋กœ๊ฐ€ ์›ํ™œํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ชจ๋“  UWP ์•ฑ์ด WinUI 3์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ XAML์˜ ๊ฒฝ์šฐ ์ „์ฒด XAML UI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ Windows์—์„œ ๋ถ„๋ฆฌ๋˜์–ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋ Œ๋”๋Ÿฌ๋ฅผ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ๋กœ ๋ถ„๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ WinUI XAML์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด์ค๋‹ˆ๋‹ค. ์ด๋Š” ์˜ค๋Š˜๋‚  ์‚ฌ๋žŒ๋“ค์ด ์Šคํƒ์„ ์„ ํƒํ•  ๋•Œ ํฐ ์ •์˜ ์š”์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋žซํผ๋ณ„ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๋ ฅ.

๋˜ํ•œ WinUI 3 ์ด์ƒ์—์„œ๋Š” XAML ๋ฐฉ์–ธ๋„ ๊ฐœ์„ ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์•ฑ์— ๋Œ€ํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ์ค‘์ธ XAML ๋ฒ„์ „์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„์ „ ๋„ค์ž„์ŠคํŽ˜์ด์Šค/Doctype์„ ๋„์ž…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€ ๋งŽ์ด ์žˆ์–ด์š” ์ž‘์„ฑํ•  ํ•„์š” ๊ฐ™์€ XAML ๋œ ์žฅํ™ฉ ๋˜๋Š” ๋ฉ์–ด๋ฆฌ ์ผ๋ถ€ ์ƒ์šฉ๊ตฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋งŒ๋“ค ์ˆ˜ INotifyPropertyChanged ํ•˜๋‚˜ ๊ฐœ์ธ setter๋ฅผ ๋ฐฑ์—…ํ•˜๋Š” ๋Œ€์‹  ๋‹จ์ง€ ๋งํ•˜๋Š” ๊ฐ„๋‹จํ•œ property ์†์„ฑ ์ธ์— NotifyPropertyChangedAttribute ํ•˜๊ณ ํ•˜์ž ๋นŒ๋“œ ๋‹จ๊ณ„๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„์„ ์ฃผ์ž…ํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ง€์ • ์ปจํŠธ๋กค์— ๋Œ€ํ•ด DependencyProperties ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. Razor ํŒ€์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ข‹์€ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ฐœ์„  ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๋ฅผ ์ทจํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์š”์ฒญ์€ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ €๋Š” XAML์„ ์‚ฌ๋ž‘ํ•˜๊ณ  ๊ณ„์† ๊ฐœ์„ ๋˜๊ธฐ๋ฅผ ์›ํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ ๋‚˜์™€ ์šฐ๋ฆฌ ํŒ€์˜ ์ผ๋ถ€ ๊ณ ์ถฉ(๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์„œ๋น„์Šค ๊ฐ€๋Šฅ)์„ ์–ธ๊ธ‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@mdtauk ๋‚˜๋Š” ํŒŒ์ผ ๋ณด์•ˆ์— ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์ง€๋งŒ ๊ธฐ๋ณธ ์ปค๋„์€ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด API ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  win32 ํŒŒ์ผ API๋ฅผ ํฌ๊ธฐํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€๋กœ ๊ถŒํ•œ์ด ์—†๋Š” ๊ณณ์— ์“ฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๊ฒƒ์ด ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚ฌ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ StorageFile/StorageFolder API๋Š” ํŒŒ์ผ ๋ณด์•ˆ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๋”์ฐํ•œ ๋Œ€์ฒดํ’ˆ์ž…๋‹ˆ๋‹ค. ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ  ํ•ญ์ƒ ๋Ÿฐํƒ€์ž„ ํŒŒ์ผ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ํ”„๋ก์‹œ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒŒ๋“œ๋ฐ•์Šค ์•ฑ์ด ์‚ฌ์šฉ์ž์˜ ๋ฌธ์„œ ํด๋”์— ์“ฐ๊ธฐ ์œ„ํ•ด MS ์Šน์ธ ํŠน๋ณ„ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์ œํ•œ์ด ์žˆ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด AppContainer ๋…ธ๋ ฅ์— ๋Œ€ํ•œ ํŒŒ์ผ ์Šคํ† ๋ฆฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์—‰๋ง์ธ์ง€, ์‚ฌ์šฉ์ž์˜ ์ˆจ๊ฒจ์ง„ LocalData ํด๋”๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” sqlite DB๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ์ €์žฅํ•˜๊ณ , ์—ด๊ณ , ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•˜๋ ค๋Š” ๋ฐ์Šคํฌํ†ฑ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ฝ˜ํ…์ธ ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์žฌ๊ต์œกํ•ด์•ผ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ถ€๋‹ด์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ฆฌ์ž ์•ก์„ธ์Šค์— ๊ด€ํ•œ ํ•œ 2018๋…„ 10์›” ๋ฆด๋ฆฌ์Šค์—๋Š” "allowsElevation"์ด ์ž๊ฒฉ์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ์ด๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ธฐ๋Šฅ ์„ธํŠธ์— ๋Œ€ํ•ด ๊ด‘๋ฒ”์œ„ํ•œ ์‹œ์Šคํ…œ ์ˆ˜์ค€ ์•ก์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์•ฑ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌ์ž๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์ž‘๊ณ  ๊ท€์—ฌ์šด ์‚ฌ์ง„ ํŽธ์ง‘๊ธฐ์™€ ์ˆœ์„œ๋„ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@MarkIngramUK ๊ท€ํ•˜์˜ ์˜๊ฒฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์„ค๋ช…๋งŒ. //Build 2019์˜ Sneak Peek์—์„œ ์ œ์‹œ๋œ Xaml Desktop ๊ฐœ๋…์€ WinUI Desktop์œผ๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒˆ๋กœ์šด Visual Studio ํ”„๋กœ์ ํŠธ๋Š” Win32 ์•ฑ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ  WinUI๋ฅผ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ๋„ค์ดํ‹ฐ๋ธŒ ๋˜๋Š” ๊ด€๋ฆฌํ˜•(.NET Core 3 ์‚ฌ์šฉ)์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @marb2000 - ์ด๊ฒƒ์€ WinUI 3.0 ๊ธฐ๊ฐ„ ๋‚ด์— ์žˆ์Šต๋‹ˆ๊นŒ?

@marb2000 by WinUI Desktop, Xaml Islands๊ฐ€ ํฌํ•จ๋œ Win32 ์•ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์–ด๋Š ๋นŒ๋“œ ์„ธ์…˜์— ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

WinUI ํŒ€์ด WinUI 3.0 ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ์™€ ํ•จ๊ป˜ ์ฃผ์˜ํ•ด์•ผ ํ•  ํ•œ ๊ฐ€์ง€: .NET์—์„œ ํ”„๋กœ์ ์…˜๋œ ์œ ํ˜•์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด ํ”„๋กœ์ ์…˜์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ ์ง€ ๊ฐ€๋Šฅํ•œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ). ๋‹ค์Œ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ณ„ํšํ•˜๋Š” ์œ ํ˜• ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. https://github.com/dotnet/coreclr/blob/master/src/inc/winrtprojectedtypes.h

์ด๋Ÿฌํ•œ ์œ ํ˜•์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์œ ํ˜•์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ์ฒด๋ฅผ ์ƒˆ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ƒˆ ๊ฐœ์ฒด๋กœ ๋ž˜ํ•‘ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ ์œ ํ˜•์— ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ INotifyPropertyChanged ๋ฐ INotifyCollectionChanged ์œ ํ˜•์€ XAML ์•„์ผ๋žœ๋“œ์™€ ๊ด€๋ จํ•˜์—ฌ ๊ด€์‹ฌ์ด ์žˆ๊ณ  ๋‹ค์šด์ŠคํŠธ๋ฆผ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

INotifyDataErrorInfo

INotifyDataErrorInfo์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ƒˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด๊ณ  WinUI์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์—†์–ด์•ผ ํ•˜๋Š” ๋ณด๊ธฐ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: INotifyPropertyChanged ๋˜๋Š” INotifyCollectionChanged).

์ด ์ฃผ์ œ์— ๋Œ€ํ•ด. Windows.UI.Xaml.Interop์—๋Š” ์ด๋ฏธ INotifyCollectionChanged ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๊ณ  Windows.UI.Xaml.Data์—๋Š” INotifyPropertyChanged๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€๋Š” Microsoft ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ System.Runtime.WindowsRuntime ์–ด์…ˆ๋ธ”๋ฆฌ๋Š” WinUI์—์„œ .Net์œผ๋กœ ์ผ๋ถ€ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ต์žฅ์„ ๋ณด๋‚ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ .NET Standard์— ์ด๋ฏธ System.ComponentModel์ด ์žˆ๋Š” ๊ฒฝ์šฐ Microsoft ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.inotifydataerrorinfo?view=netstandard-2.0

@meir-pletinsky. NET์€ UWP XAML๋กœ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ…์ŠคํŠธ ํ•„๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

@mdtauk , ์•„๋‹ˆ์š”, WinUI Desktop(์ด์ „์˜ Xaml Desktop)์„ ์‚ฌ์šฉํ•˜๋ฉด ์•„์ผ๋žœ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Win32์™€ ํ•จ๊ป˜ Xaml์„ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@marb2000 ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํŒจํ‚ค์ง• ํ”„๋กœ์ ํŠธ์—์„œ Win32 ์ฐฝ์œผ๋กœ AppX๋ฅผ ๋นŒ๋“œํ•˜๊ณ  UWP ํ”„๋กœ์ ํŠธ์™€ ๋™์ผํ•œ ์‰ฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ WinRT ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€ ๋ฐ ํฌํ•จ๋œ WinRT ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ํ—ค๋”๋ฅผ ์ƒ์„ฑํ•˜๋Š” cppwinrt ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๊ฐ™์ด vcxproj ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜์ง€ ์•Š๊ณ ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ƒˆ UI์— ์ค‘์š”ํ•œ ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋Š” INotifyPropertyChanged(C#/F#์œผ๋กœ ์‹œ๋„) ์ž๋™ ๊ตฌํ˜„์„ ํ—ˆ์šฉํ•˜๋Š” Simon Cropp ์˜ _PropertyChanged.Fody_์ž…๋‹ˆ๋‹ค. https://github.com/Fody/PropertyChanged ์ฐธ์กฐ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

[AddINotifyPropertyChanged]
public class Person
{
    public string Name { get; set; }
    public string FamilyName { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
}

UI์— ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WinUI 3.0์—์„œ ๋ณด๊ณ  ์‹ถ์€ ํ•œ ๊ฐ€์ง€: ํ˜„์žฌ UWP XAML ์ปดํŒŒ์ผ๋Ÿฌ( genxbf.dll )๋Š” csproj, vbproj ๋˜๋Š” vcxproj ํŒŒ์ผ์—์„œ ์ฐธ์กฐํ•  ๋•Œ MSBuild์—์„œ๋งŒ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์ค„ ๋„๊ตฌ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Windows 10 SDK ๋‹ค์šด๋กœ๋“œ์—๋Š” Visual Studio๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋งค์šฐ ์ด์ƒํ•œ ๊ฒฐ์ •์œผ๋กœ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. (WDK ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์—๋Š” Visual Studio ๋Œ€์ƒ๋„ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋Œ€์ƒ์€ ๋ชจ๋‘ VS์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.) ์˜ˆ๋ฅผ ๋“ค์–ด XbfCompiler.exe ๋ฐ XbfCodeGen.exe ์ถ”๊ฐ€ํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. SDK์˜ bin ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. (์ „์ž์˜ EXE๋Š” XAML ํŒŒ์ผ์„ XBF ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  ํ›„์ž๋Š” ์ฝ”๋“œ์—์„œ XAML ์œ ํ˜•์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ ์ˆจ๊น€ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.) ์ด๊ฒƒ์€ CMake ๋˜๋Š” ๋‹ค๋ฅธ ๋น„ Visual์„ ์‚ฌ์šฉํ•˜๋Š” C++ ํ”„๋กœ์ ํŠธ์—์„œ ์ฃผ๋กœ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Studio ๋นŒ๋“œ ๋„๊ตฌ์ด์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ C# ๋ฐ VB.NET ํ”„๋กœ์ ํŠธ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

@MarkIngramUK WinUI Desktop์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ณณ์„ ์•„์‹œ๋‚˜์š”? ํ•ด๋‹น Build 2019 ์„ธ์…˜์€ ์˜จ๋ผ์ธ์œผ๋กœ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•˜๋Š” ์ค‘์š”ํ•œ ์ •๋ณด์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

@mdtauk ๋นŒ๋“œ ์ฐธ์„์ž ์ „์šฉ์ธ ์ด๋ฅธ๋ฐ” Sneak Peek์—์„œ ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Afaik ๋…น์Œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋„ ๊ฑฐ๊ธฐ์— ์—†์—ˆ์ง€๋งŒ ์Šฌ๋ผ์ด๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค - ์•„๋งˆ๋„ ์ตœ๊ณ ์˜ ์Šฌ๋ผ์ด๋“œ :-) - Twitter์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ: https://twitter.com/RudyHuyn/status/1126273995366490113

@mdtauk WinUI 3 ๋กœ๋“œ๋งต์—๋Š” Build Snek peek์—์„œ ๋ณด์—ฌ์ง„ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ตœ์‹ ์ธ ์ตœ์‹  ์ •๋ณด์™€ ๋‹ค์ด์–ด๊ทธ๋žจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. "XAML ๋ฐ์Šคํฌํ†ฑ"์ด๋‚˜ "WinUI ๋ฐ์Šคํฌํ†ฑ"๊ณผ ๊ฐ™์€ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค... ์‚ฌ์ง„์ด ์ฐํžŒ ์Šฌ๋ผ์ด๋“œ์—์„œ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๋‹จ์–ด ์„ ํƒ์ด์—ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ „๋‹ฌ๋˜๊ณ  ์žˆ๋Š” ๊ฐœ๋…(๋กœ๋“œ๋งต์€ ์ด๋ฅผ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•จ)์€ WinUI 3์— ๋Œ€ํ•ด WinUI 3์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ์กด ๋ฐ์Šคํฌํƒ‘/Win32 ๋ชจ๋ธ ์•ฑ์„ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์„ UI์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์˜ค๋Š˜๋‚  ๊ธฐ์กด Desktop/Win32 ๋ชจ๋ธ ์œ„์— WinForms, WPF, MFC ๋“ฑ์˜ UI ํ”„๋ ˆ์ž„์›Œํฌ์šฉ ํ…œํ”Œ๋ฆฟ์ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ) WinUI 3๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—…๋ฐ์ดํŠธ๋œ UWP/WinRT ๋ชจ๋ธ ์•ฑ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ ์™ธ์—๋„ ๋ช…ํ™•ํžˆํ•˜๋Š” ๋ฐ ๋„์›€์ด?

3.0 ๋กœ๋“œ๋งต ์€ ๋‹ค์Œ ์ „๋žต์— ๋Œ€ํ•ด ๋งค์šฐ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  Windows ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ XAML ๋ฐ "ํ˜„๋Œ€์ ์ธ" WinUI ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ์ „๋žต์€ ์˜ค๋Š˜๋‚  ์‹œ์žฅ์˜ ํ˜„์‹ค์„ ๊ณ ๋ คํ•˜๋ฉด ๊ทผ์‹œ์•ˆ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์•ฑ ๊ฐœ๋ฐœ์—์„œ Android์™€ iOS๊ฐ€ ์ฃผ์š” ๋Œ€์ƒ์ด๊ณ  Windows๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. .NET ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ Xamarin์€ ์ ์ ˆํ•œ Android ๋ฐ iOS ์ง€์›์„ ์ œ๊ณตํ•˜์ง€๋งŒ Windows ์ง€์›์€ ํ•˜์œ„ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ๋ชจ๋ฐ”์ผ/๋ฐ์Šคํฌํ†ฑ ์•ฑ์˜ ๊ฒฝ์šฐ Win UI 3.0์€ .NET ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ”Œ๋žซํผ ๊ฐ„ ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ •๋ง๋กœ ๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ง„์ •์œผ๋กœ ๋ณดํŽธ์ ์ธ ์—ด๋ง์„ ๊ฐ€์ง„ ์ง„๋ณด์ ์ธ XAML ๋ฐฉ์–ธ์ž…๋‹ˆ๋‹ค. XAML์„ ์‚ฌ์šฉํ•˜์—ฌ .NET ์•ฑ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ํ•ด๋‹น ์•ฑ์„ Windows, iOS ๋ฐ Android์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์€ ๊ฐ ํ”Œ๋žซํผ์—์„œ ์ง„์ •์œผ๋กœ ์ผ๋ฅ˜์—ฌ์•ผ ํ•˜๋ฉฐ ํ•„์š”์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ์š”์†Œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Xamarin์€ ์ข‹์€ ์‹œ์ž‘์ด์ง€๋งŒ XAML์˜ ๋ฐฉ์–ธ์ด ๋งค์šฐ ๋‹ค๋ฅด๊ณ  Windows ์ง€์›์ด ์—ด์•…ํ•˜๋ฉฐ ์ˆ˜ํ–‰ ์ค‘์ธ ์ž‘์—…์ด ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Windows์šฉ ์ตœ์‹  UI ํ”Œ๋žซํผ์„ ๊ณ„์† ์ œ๊ณตํ•˜๊ณ  ๊ณ„์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์•ฑ์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์…”์„œ ์ข‹์Šต๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ง€์›์„ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ ํƒ์ ์œผ๋กœ ์ผ์‹œ ์ค‘๋‹จ + ์‚ญ์ œ ํ‘œ์‹œ์™€ ๊ฐ™์€ ๋ ˆ๊ฑฐ์‹œ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋™์ž‘์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ์˜ตํŠธ์•„์›ƒํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์‹ค์€ UWP๊ฐ€ ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์ด๊ณ  ์ ์–ด๋„ ๊ฒŒ์ž„์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ์„ ์ผ์‹œ ์ค‘๋‹จ/์‚ญ์ œ ํ‘œ์‹œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฒฝํ—˜์ด๋ฉฐ win32 ๋ฐ์Šคํฌํƒ‘ ์•ฑ์ด๋‚˜ ๊ฒŒ์ž„๊ณผ ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์•„์ง ๋งŒ๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์—ฐ์žฅ ์—ฐ๊ธฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ด๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์ˆ˜๋ช… ์ฃผ๊ธฐ๋Š” ์ผ๋ถ€ ์•ฑ์— ์œ ์šฉํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์•ฑ์—๋Š” ํ•ด๋กญ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ ๋ฐ์Šคํฌํ†ฑ ์•ฑ ๋˜๋Š” ๊ฒŒ์ž„์€ ์•ฑ์ด ์ผ์‹œ ์ค‘๋‹จ+์‚ญ์ œ ํ‘œ์‹œ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋ชจ๋ธ์„ ์„ ํƒ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ตœ์†Œํ™”๋  ๋•Œ ๊ถ๊ทน์ ์œผ๋กœ ์ผ์‹œ ์ค‘๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@natemonster

๋‹น: https://docs.microsoft.com/windows/uwp/launch-resume/run-minimized-with-extended-execution

๋ฐ์Šคํฌํ†ฑ ์žฅ์น˜์—์„œ ExtendedExecutionReason.Unspecified๋กœ ์ƒ์„ฑ๋œ ํ™•์žฅ ์‹คํ–‰ ์„ธ์…˜์—๋Š” ๋ฐฐํ„ฐ๋ฆฌ ์ธ์‹ ์‹œ๊ฐ„ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ์น˜๊ฐ€ ๋ฒฝ ์ „์›์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ™•์žฅ๋œ ์‹คํ–‰ ๊ธฐ๊ฐ„์˜ ๊ธธ์ด์— ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ์žฅ์น˜๊ฐ€ ๋ฐฐํ„ฐ๋ฆฌ ์ „์›์œผ๋กœ ์ผœ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ ํ™•์žฅ๋œ ์‹คํ–‰ ์‹œ๊ฐ„์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ตœ๋Œ€ 10๋ถ„๊นŒ์ง€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒœ๋ธ”๋ฆฟ ๋˜๋Š” ๋žฉํ†ฑ ์‚ฌ์šฉ์ž๋Š” ์•ฑ ์„ค์ •๋ณ„ ๋ฐฐํ„ฐ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์—์„œ ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋„๋ก ํ—ˆ์šฉ ์˜ต์…˜์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ ๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช…์„ ํฌ์ƒํ•˜๋ฉด์„œ ๋™์ผํ•œ ์žฅ๊ธฐ ์‹คํ–‰ ๋™์ž‘์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@TonyHenrique Fody ๋ฅผ ์–ธ๊ธ‰ ํ•  ๋•Œ ์ž…๋‹ˆ๊นŒ , ์•„๋‹ˆ๋ฉด WinUI์— ๋‚ด์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ง์”€์ž…๋‹ˆ๊นŒ?

์•„์ดํ…œ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ…œํ”Œ๋ฆฟ๋„ ์žฌ๋ฏธ์žˆ์Šต๋‹ˆ๋‹ค! Windows ํ…œํ”Œ๋ฆฟ ์ŠคํŠœ๋””์˜ค์™€ ๊ฐ™์ด ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์ƒ์šฉ๊ตฌ ๋ฐ ์‹œ์ž‘ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ง€๊ธˆ๊นŒ์ง€ ๋‹ต๋ณ€์— ๋ช‡ ๊ฐ€์ง€ ์ข‹์€ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@Jesbis ์ €๋Š” Windows Template Studio์˜ ํ•ต์‹ฌ ๊ธฐ์—ฌ์ž์ด๋ฉฐ ์šฐ๋ฆฌ๊ฐ€ ๋ฏธ๋ž˜์— ํ•  ์ผ๊ณผ WPF ์ง€์›์„ ๋„์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ด€์ ์—์„œ WinUI ๋กœ๋“œ๋งต์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ;)

์–ด๋–ค ์ข…๋ฅ˜์˜ ์ข…์†์„ฑ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋” ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜ธํ™˜๋˜๋Š” ์ƒˆ๋กœ์šด NuGet ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ์ฐพ๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ?

NuGet ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋” ์œ ์šฉํ•˜์ง€๋งŒ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ์ž ์žฌ์ ์ธ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ƒˆ ๋ฒ„์ „์„ ๊ฐ์ง€ํ•˜๊ณ  ์ž๋™ ๋ณ€ํ™˜์„ ๋‚ฎ์€ ์šฐ์„  ์ˆœ์œ„๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณ ๋ ค ์‚ฌํ•ญ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๊ทธ ์ž์ฒด๋กœ ํฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋žซํผ์— ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@mrlacey ์ €๋Š” Fody๊ฐ€ ํฅ๋ฏธ๋กœ์šด ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐ ํ•˜๊ณ  _INotifyPropertyChanged_ ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ํ”ผํ•˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— Fody๋ฅผ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค . ์ผ๋ถ€ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” Reactive ๊ฐœ์ฒด์˜ ๊ฐœ๋…์— ๋Œ€ํ•œ MS ์ง€์› ์†”๋ฃจ์…˜์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
C# ํด๋ž˜์Šค์™€ F# ๋ ˆ์ฝ”๋“œ์—์„œ๋„ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ WinUI ๋กœ๋“œ๋งต์—๋„ ์ด๊ฒƒ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : F# ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ •์˜ํ•˜๊ณ  XAML UI์— ์ง์ ‘ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. F# Records + Fody + DataBinding์„ ๋ฌธ์ œ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[<PropertyChanged.AddINotifyPropertyChangedInterfaceAttribute>]
[<CLIMutable>]
type Person =
    {
        ID: Guid

        mutable Name: string
        mutable Addresses: ObservableCollection<Address>
    }

์ด๊ฒƒ์€ C#์—์„œ ์˜ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋” ์นœ์ˆ™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋˜ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์€ Elmish ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ํฅ๋ฏธ๋กญ๊ณ  ์ง€์›๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@tonyhenrique / @mrlacey Fody ํ•ญ๋ชฉ (OAP)์€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. WinUI ํŒ€์€ ์ด๋ฏธ ์ถฉ๋ถ„ํžˆ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‚˜๋Š” ๋ณ„๋„์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์งœ๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(๊ฐœ์„ ์˜ ๊ฒฝ์šฐ ํ›จ์”ฌ ๋” ๋น ๋ฅธ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ).

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋ชจ๋ธ์˜ .NET(IL) ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ WinUI์™€ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค(๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ). ์ œ ์ œ์•ˆ์€ ๊ทธ๊ฒƒ๋“ค์„ ๋”ฐ๋กœ ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ €๋Š” Catel์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์งœ์—ฌ์กŒ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฒด Fody weavers๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ •๋ง๋กœ ๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ง„์ •์œผ๋กœ ๋ณดํŽธ์ ์ธ ์—ด๋ง์„ ๊ฐ€์ง„ ์ง„๋ณด์ ์ธ XAML ๋ฐฉ์–ธ์ž…๋‹ˆ๋‹ค. XAML์„ ์‚ฌ์šฉํ•˜์—ฌ .NET ์•ฑ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ํ•ด๋‹น ์•ฑ์„ Windows, iOS ๋ฐ Android์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์€ ๊ฐ ํ”Œ๋žซํผ์—์„œ ์ง„์ •์œผ๋กœ ์ผ๋ฅ˜์—ฌ์•ผ ํ•˜๋ฉฐ ํ•„์š”์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ์š”์†Œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ์œ„ํ•œ ์˜ค๋žœ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค: .NET 5์šฉ ํฌ๋กœ์Šค ํ”Œ๋žซํผ UX - ์›๋ณธ ์ œ๋ชฉ Cross platform UX for .NET Core 3.0 . ์ด์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์••๋„์ ์ธ ์ง€์›์€ ๋ถ„๋ช…ํ•˜๋ฉฐ MSFT๊ฐ€ ์ด๊ฒƒ์ด .NET์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ชจ๋“  UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์ตœ์„ ์˜ ๋ฐฉํ–ฅ์ž„์„ ๊นจ๋‹ฌ์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ํ”Œ๋žซํผ ๊ทธ๋ฃน์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์œ ์ง€ํ•˜๊ณ  .NET์—์„œ ์ง€์›ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ UX ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ„๋„์˜ ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ  ์„ธํŠธ๋ฅผ ๊ฐ•์ œ๋กœ ์ƒ์„ฑํ•  ์ด์œ ๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํ”Œ๋žซํผ์„ ์œ„ํ•œ ๋‹จ์ผ UX๋ฅผ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ์šฐ๋ฆฌ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœ์˜ ๋ชจ๋“  ๋น„ํšจ์œจ์„ฑ์„ ์—†์• ๊ณ  ๊ฐœ๋ฐœ์ž ์ฑ„ํƒ์— ๋Œ€ํ•œ ์žฅ๋ฒฝ์„ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.

@mfeingol / @4creators

์•ฑ์€ ๊ฐ ํ”Œ๋žซํผ์—์„œ ์ง„์ •์œผ๋กœ ์ผ๋ฅ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋ ค๋ฉด Windows์—์„œ...

์ง€๊ธˆ์€ 2019๋…„, ๋น ๋ฅธ ๋„ค์ดํ‹ฐ๋ธŒ UI๋ฅผ ์›ํ•˜๊ณ  CreateWindowExW , GDI ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ๊ณ ๋ คํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์ œ WinUI 3.0 ์ด์ƒ์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ Windows 10์—์„œ ๋ถ„๋ฆฌ๋˜์—ˆ์œผ๋ฏ€๋กœ ํ–ฅํ›„ WinUI๊ฐ€ Linux ๋ฐ Mac์—์„œ ์ž‘๋™ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@jesbis Touch ์ƒํ˜ธ ์ž‘์šฉ ์€ WinUI 3.0์—์„œ ์œ ์ง€๋ฉ๋‹ˆ๊นŒ?

์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. 3.0์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ Community Toolkit์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  WinUI์— Xaml Islands๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

XAML + Win32๊ฐ€ ๋˜๋ฉด์„œ ํŠนํžˆ Windows Core OS๊ฐ€ XAML์—์„œ ์…ธ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ง€๊ธˆ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ด ํ’๋ถ€ํ•œ Win32 API ์•ก์„ธ์Šค๋Š” C ๋ฐ C++๋กœ | .NET์— ์˜์กดํ•˜๋Š” C#์˜ ๋ชจ๋“  ๊ฒƒ(์ง€๊ธˆ์€ ๋ชจ๋‘ .NET Core์ž„).

์•„๋งˆ๋„ ์ด๋Ÿฌํ•œ Win32 API์— ์•ก์„ธ์Šคํ•˜๋Š” ์•ˆ์ „ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•๊ณผ ์•ฑ UI๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๋” ๋งŽ์€ ์ง„์ž…์ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

  • WinUI 3 ์•ฑ์šฉ ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด XAML ํ”Œ๋ผ์ด์•„์›ƒ

  • Hololens/Xbox/Surface Hub/IoT ๋“ฑ์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ์„ ํƒ๊ธฐ UI

  • ์—…๋ฐ์ดํŠธ๋œ XAML ์‚ฌ์šฉ์ž ์ง€์ • ๊ฐ€๋Šฅํ•œ ๊ณตํ†ต ํŒŒ์ผ ๋Œ€ํ™” ์ƒ์ž ๋ฐ ํด๋” ์„ ํƒ๊ธฐ

  • Win32 API์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ C# .NET ์•ก์„ธ์Šค

  • Win32 ๋ฐ WPF ์ปจํŠธ๋กค ํฌ๊ธฐ ์กฐ์ •๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  XAML ์š”์†Œ์— ๋Œ€ํ•œ ์ปดํŒฉํŠธ ์„ค์ •(์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํŽธ์•ˆํ•˜๊ฒŒ ํ•จ๊ป˜ ์•‰๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค)

  • WinUI ์‚ฌ์šฉ ์‹œ ์ปจํŠธ๋กค ์Šคํƒ€์ผ/๊ธ€๊ผด/์•ก์„ผํŠธ ๋ธŒ๋Ÿฌ์‹œ/์•„ํฌ๋ฆด ์ผ์น˜

  • WinRT/Mobile ์ˆ˜๋ช… ์ฃผ๊ธฐ๊ฐ€ ํ•„์š”ํ•œ ์žฅ์น˜์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ •์˜

  • Windows์—์„œ Xbox ์•ฑ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๊ธฐ๋ณธ ์ œ๊ณต๋˜๋Š” Xbox Next ์ปจํŠธ๋กค ์Šคํƒ€์ผ

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ €์žฅ ๋ฐ ๋‹จ์ผ exe/MSI/APPX ํŒจํ‚ค์ง• ๋ฐ ๋‹ค์šด๋กœ๋“œ ์ง€์›, ์„ค์น˜์ž ์—†์Œ, ๊ธฐ๋ณธ์ ์œผ๋กœ 100๋…„ ์œ ํ˜• ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ฐ€์ƒํ™”

  • WinForms WinUI 3.0 - ๊ฐ„๋‹จํ•œ UI, MFC์— ๋Œ€ํ•œ ์•ก์„ธ์Šค, ๋งˆ์šฐ์Šค ๋ฐ ํ‚ค๋ณด๋“œ ์ „์šฉ

  • WPF WinUI 3.0 - ๊ณ ๋ฐ€๋„ UI, 3D ๋ Œ๋”๋ง, DPI ์ธ์‹, ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋œ ํ„ฐ์น˜ ๋ฐ ๊ธฐ๋ณธ ์ž‰ํฌ ์ง€์›

  • Xaml WinUI 3.0 - ํ’€ ํ„ฐ์น˜, MR, ๊ฒŒ์ž„ํŒจ๋“œ, ์ž‰ํฌ, ์Œ์„ฑ, ๋งˆ์šฐ์Šค, ํ‚ค๋ณด๋“œ. ์กฐ๋ฐ€ํ•˜๊ณ  ๋‹จ์ˆœํ•œ UI. ์ƒˆ๋กœ์šด ์œˆ๋„์šฐ ์ง€์›. MR 3D ๋ Œ๋”๋ง. ์„ ํƒ์  ๊ด€๋ฆฌํ˜• ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋˜๋Š” ๋ฐ์Šคํฌํ†ฑ ์ˆ˜๋ช… ์ฃผ๊ธฐ. ๋ฉ”๋ชจ์žฅ, ์ฐธ ์ง€๋„, ํŽ˜์ธํŠธ, ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์™€ ๊ฐ™์€ ๋ฐ›์€ ํŽธ์ง€ํ•จ ์•ฑ์˜ Win32 ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ ์…ธ ๋ฐ ์žฌ์ž‘์—…๋œ ๋ฐ›์€ ํŽธ์ง€ํ•จ ์•ฑ์— ๋Œ€ํ•œ ๋ชจ๋“  ์„ธ๊ณ„์˜ ๊ธฐ๋ณธ์ด ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ์Šคํ† ์–ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ„ฐ์น˜ ์ƒํ˜ธ ์ž‘์šฉ์€ WinUI 3.0์—์„œ ์œ ์ง€๋ฉ๋‹ˆ๊นŒ?

@r7dev ๋„ค, ๋™์ผํ•œ ์ˆ˜์ค€์˜ ํ„ฐ์น˜ ์ง€์›์„ ์œ ์ง€ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

F#์€ WinUI 3.0 ๋กœ๋“œ๋งต์—์„œ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. Microsoft๋Š” ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ž์‚ฌ ์ œํ’ˆ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

Win32 API ์ƒ๊ฐ

๋‚ด๊ฐ€ ๋˜ํ•œ ์ƒ๊ฐํ•œ ๊ฒƒ์€ win32๊ฐ€ ๋„ˆ๋ฌด ๋ถ™์–ด์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ ๋•Œ๋ฌธ์ด๋ผ๋Š” ๊ฐ€์ •์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๊นŠ์Šต๋‹ˆ๋‹ค. Win32 ABI๋Š” ์„ ํƒํ•œ ์–ธ์–ด, nodejs, python, rust, go, ruby, C#, C++ ๋“ฑ๊ณผ ์—ฐ๊ฒฐํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ํ•ต์‹ฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋…น์Šฌ๊ณ  ์ฐฝ์„ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์ถœ๋ ฅ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Rust ๊ฐœ๋ฐœ์ž๋กœ์„œ win32 API ์„ธํŠธ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋™์ผํ•œ ์–ธ์–ด๋กœ ํ”„๋ก ํŠธ ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

OS X์—์„œ AppKit์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด objc_msgSend C API๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ์ „์ฒด obj-c ์ธํ”„๋ผ์— ์•ก์„ธ์Šคํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๋ชจ๋“  ์–ธ์–ด๋Š” ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ์„ ํƒํ•œ ์–ธ์–ด๋กœ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ๋งค๋ ฅ์ ์ธ ๊ฒƒ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ WinUI 3.x๊ฐ€ ๋‚ฎ์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„, ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ, ๋†’์€ ํ’ˆ์งˆ์˜ Win32 UI์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ์ง„์ •ํ•œ ๊ฒฝ๋กœ๊ฐ€ ๋˜๋„๋ก ํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ์–ธ์–ด ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ธํ”„๋ผ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์šฉ์ด์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

UI ์ผ๊ด€์„ฑ

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

ํ•ญ์ƒ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๋‹คํฌ ๋ชจ๋“œ๋ฅผ ์•ฑ์ด ์ด๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์˜ต์…˜์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์˜๋ฏธ๊ฐ€ ์—†๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜๋Š” ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์กฐ์ •.

๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ

์ด ๋ชจ๋“  UI.dll์„ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์™€ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„ํš๋œ ์Šคํ† ๋ฆฌ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์ด ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์–ด์•ผ ํ•˜๋Š” 40MB์˜ ๋Ÿฐํƒ€์ž„์ด ๋ ๊นŒ์š”? ํ”„๋กœ์ ํŠธ๊ฐ€ ์ค‘๋‹จ๋˜๋ฉด ์˜ค๋ž˜๋œ UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์‹์œผ๋กœ ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๊นŒ?

C++์˜ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋”ฐ๋ผ ์ตœ์†Œํ•œ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์—ฌ๊ธฐ์—์„œ ๋‚˜์˜ค๋Š” ๋ชจ๋“  ๋‹จ์ผ ์•ฑ์— WinUI 3.x๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด 40mb x ์•ฑ ์ˆ˜๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ

WinUI๋Š” .NET๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๋ฏธ ์ข…์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. :)
๋‹น์‹ ์€ ์ค‘๋ณต๋œ dll์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉฐ ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
https://www.microsoft.com/store/productId/9N00JJ7S3L39

@eklipse2k8

"์ €๋„ ์ƒ๊ฐํ•œ ๊ฒƒ์€ win32๊ฐ€ ๊ณ„์† ๋ฉˆ์ถฐ์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ ๋•Œ๋ฌธ์ด๋ผ๋Š” ๊ฐ€์ •์ด ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๊นŠ์Šต๋‹ˆ๋‹ค. Win32 ABI๋Š” ์„ ํƒํ•œ ์–ธ์–ด์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. , nodejs, python, rust, go, ruby, C#, C++ ๋“ฑ. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ํ•ต์‹ฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋…น์— ์žˆ๊ณ  ์ถœ๋ ฅ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ฐฝ์„ ์ƒ์„ฑํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋…น ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. win32 API ์„ธํŠธ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋™์ผํ•œ ์–ธ์–ด๋กœ ํ”„๋ŸฐํŠธ ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜์‹ญ์‹œ์˜ค."

์ƒˆ ์–ธ์–ด์— ๋Œ€ํ•œ WinRT ์ง€์›์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ทน๋ณตํ•ด์•ผ ํ•  ํฐ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผํ•ฉ ๋ฐฑ์ž…๋‹ˆ๋‹ค. ์ผ๋‹จ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ƒˆ API์— ๋Œ€ํ•œ ์ž๋™ ์ƒ์„ฑ๋œ ํ˜•์‹ํ™”๋œ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ตœ๊ทผ์— Win32์™€ WinRT๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” Rust ํ”„๋กœ์ ํŠธ(Win32 ์ฐฝ์—์„œ Composition API ์‚ฌ์šฉ)์— ๋Œ€ํ•ด ์ž‘์—…ํ•ด ์™”์œผ๋ฉฐ, ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ์„œํˆด๊ฒŒ ์ž‘์—…ํ•ด์•ผ ํ–ˆ์ง€๋งŒ Win32 ๋ถ€๋ถ„์€ ํ™•์‹คํžˆ ์ „๋ฐ˜์ ์œผ๋กœ ๋” ๊ณ ํ†ต์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์ƒ์†๊ณผ ๊ฐ™์€ ์ผ๋ถ€ WinRT ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ Rust ์ง€์› ๋ถ€์กฑ. (Win32 ๋‚ด์—์„œ ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด์ œ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์•ฑ ๋ชจ๋ธ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ ๋„ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์„ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)

์•„๋งˆ๋„ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ๋‚ฎ์€ ์ˆ˜์ค€์˜ WinRT ABI ์„ธ๋ถ€ ์ •๋ณด์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ์ผ์ข…์˜ ๋ฌด์งˆ์„œํ•˜๊ณ  ์„ธ๊ณ„/์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ด์— ๋Œ€ํ•œ ์ดํ•ด๋‚˜ ์ธ์‹์ด ๊ฑฐ์˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ xlang ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์ด ์ƒํ™ฉ์ด ๊ฐœ์„ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์— ๊ฐ€์žฅ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ ์ €๋Š” ๋นˆ ์•ฑ(์œ ๋‹ˆ๋ฒ„์„ค Windows) ํ”„๋กœ์ ํŠธ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ๋ฏธ๋ฆฌ ๊ตฌ์„ฑ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ๋„ ์ข‹์•„ํ•˜์ง€๋งŒ ๋น ๋ฅด๊ฒŒ ์‹œ๋„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. UWP์šฉ "์ฃผ ๋ฉ”๋‰ด" ํ…œํ”Œ๋ฆฟ ๋ฐ MDI ํ…œํ”Œ๋ฆฟ๋„ ์ข‹์Šต๋‹ˆ๋‹ค(์ด๋Ÿฌํ•œ ํ…œํ”Œ๋ฆฟ์€ WinForms์—๋„ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—).

๋ฐ์Šคํฌํ†ฑ ์•ฑ ํ˜„๋Œ€ํ™”๋ฅผ ์œ„ํ•œ Xaml Islands๋ฅผ ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ?
Windows 10์—์„œ ํ™•์žฅ๋œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์œผ๋กœ ์ธํ•ด Xaml Islands๊ฐ€ ๋” ์œ ์šฉํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, Xaml Island๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ˆœ์ˆ˜ WPF ๋˜๋Š” ์ˆœ์ˆ˜ UWP ์•ฑ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Visual Studio ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

์˜ˆ, ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค! ๋‚˜๋Š” ๊ทธ๋Ÿฐ ์ข‹์€ ๊ธฐ๋Šฅ์„ ๋†’์ด ํ‰๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๋งŽ์€ ์˜๊ฒฌ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ๊ธฐ๋Šฅ์€ WinUI 3.0 ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ณ , XAML ์ฝ”๋“œ๋ฅผ ์ฑ„ํƒํ•˜๊ณ , ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์กฐ์ •ํ•˜๊ณ , ํ•„์š”ํ•œ WinUI ๋„ˆ๊ฒŸ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ์™€ WinUI 3.0 ์•ฑ ๊ฐ„์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?

WinUI 3.0์—์„œ ์™„์ „ํžˆ ์ž‘๋™ํ•˜๋„๋ก ์ปจํŠธ๋กค์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋งŒ ๋ณ€๊ฒฝํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. WinUI 3.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ฑ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์‰ฝ๊ฒŒ ๋‹ค์‹œ ์ปดํŒŒ์ผ ๋ฐ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๋Š” UWP Xaml ์ œ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” WinRT ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

ํƒ€์‚ฌ UWP Xaml ์ œ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: Windows Community Toolkit, https://github.com/kakone/VLC.MediaElement )๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Dockpanel๊ณผ ๊ฐ™์€ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ„๋‹จํ•œ ์ปจํŠธ๋กค์„ ํ˜ผ์ž์„œ WinUI 3.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

WinUI 3์—์„œ UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  • UWP์šฉ Visual Studio์—์„œ "WinUI 3.0์ด ํฌํ•จ๋œ ๋นˆ ์•ฑ" ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. WinUI 3.0 ์ข…์†์„ฑ์€ WinUI 2.0๊ณผ ๊ฐ™์ด nuget์œผ๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

The fastest path to releasing WinUI 3.0 would be to not support mixing [...] . ๋‚˜๋Š” ๋ชจ๋“  ๊ธฐ๋ณธ ์ปจํŠธ๋กค์„ ์–ป๋Š” ํ•œ ๊ทธ๋Ÿฌํ•œ ์†”๋ฃจ์…˜์„ ์ ˆ๋Œ€์ ์œผ๋กœ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. Windows.UI์˜ ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ Microsoft.UI ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋™๋“ฑํ•œ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

WinUI 3.0์˜ ์ฃผ์š” ์ฃผ์ œ๋Š” ์ปจํŠธ๋กค๊ณผ Windows 10 ํ˜ธํ™˜์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ˜ธํ™˜์„ฑ์€ ์ œ๊ฐ€ ๋งž๋‹ค๋ฉด XAML Island๋ฅผ ํ†ตํ•ด UWP ๋ฐ WPF ๋˜๋Š” WinForms์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UWP XAML ๋งˆํฌ์—…์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

  • ์Šคํƒ€์ผ ํŠธ๋ฆฌ๊ฑฐ ๋ˆ„๋ฝ
  • ์Šคํƒ€์ผ `BasedOn={StaticResource {x:Type TextBlock}} ๋ˆ„๋ฝ
  • DataTypes๊ฐ€ ์žˆ๋Š” ์ •์˜๋œ DataTemplates๋Š” WPF์™€ ๊ฐ™์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Key๋ฅผ ํ†ตํ•ด์„œ๋งŒ).
  • ๋งค์ดˆ Windows.UI.Xaml.Controls ์ปจํŠธ๋กค(TextBlock, Border,...)์ด ๋ด‰์ธ๋œ ๊ฒƒ์œผ๋กœ ์„ ์–ธ
  • WPF ํŒจ๋ฆฌํ‹ฐ์šฉ ๋งˆํฌ์—… ํ™•์žฅ
  • ์ด๊ฒƒ์€ ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ํ•œ ๋ฒˆ ๋” ์–ธ๊ธ‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. UWP๊ฐ€ System.ComponentModel.IDataErrorInfo๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ์Šฌํ”ˆ ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ด ๋ชจ๋ธ ํ”„๋กœ์ ํŠธ๋ฅผ UWP ์†”๋ฃจ์…˜๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ReportControl(์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ)

์ €๋Š” WinUI 3.0๊ณผ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์ •๋ง ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

F#์€ WinUI 3.0 ๋กœ๋“œ๋งต์—์„œ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

UWP XAML ๋งˆํฌ์—…์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@Happypig375 , @mfe-:

๋กœ๋“œ๋งต์€ ์ดˆ๊ธฐ 3.0 ๋ฆด๋ฆฌ์Šค๋งŒ ๋‹ค๋ฃจ๋ฉฐ ์ดˆ๊ธฐ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ์†Œ์ˆ˜์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํŒจ๋ฆฌํ‹ฐ ๋ฐ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์— ์ฃผ๋กœ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

๋” ๋‚˜์€ F# ์ง€์›์ด๋‚˜ ์ƒˆ๋กœ์šด ๋งˆํฌ์—… ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ ๋˜๋ฉด ์ƒˆ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์—ด์–ด ๋ณ„๋„๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค!


๋งค์ดˆ Windows.UI.Xaml.Controls ์ปจํŠธ๋กค(TextBlock, Border,...)์ด ๋ด‰์ธ๋œ ๊ฒƒ์œผ๋กœ ์„ ์–ธ๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? UWP๊ฐ€ ์žˆ๋Š” WinUI 3.0์—์„œ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ž ๊ธˆ ํ•ด์ œ ์ปจํŠธ๋กค์€ ์‹ค์ œ๋กœ 3.0์— ํฌํ•จ๋˜๊ธฐ๋ฅผ ํฌ๋งํ•˜๋Š” ์†Œ์ˆ˜์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค ๐Ÿ˜Š

์–ธ์–ด์™€ ๊ด€๋ จํ•˜์—ฌ ํ˜ผํ•ฉ ๋ฐ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ด ๊น”๋”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํŒจํ‚ค์ง• ์ „์— ๋ชจ๋“  ๊ฒƒ์ด ์ปดํŒŒ์ผ๋˜๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

์ผ๋ถ€ ๋ฐฑ์—”๋“œ ๋…ผ๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” F# - ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๋ฐ UI ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ C# - ์ปจํŠธ๋กค์„ ์œ„ํ•œ C++ ๋ฐ ์ผ๋ถ€ ์ €๊ฐ€ Win32 ํ›„ํฌ ๋˜๋Š” WinForms ๋Œ€ํ™” ์ƒ์ž๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์ฝ”๋“œ ์–ธ์–ด๋Š” ๋™์ผํ•˜๊ณ  ์ƒํ˜ธ ๊ตํ™˜ ๊ฐ€๋Šฅํ•˜๋ฉฐ WinUI 3.0์ด ๋ชจ๋“  UI๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

xlang์ž…๋‹ˆ๋‹ค ๐Ÿ˜‰

xlang์ž…๋‹ˆ๋‹ค ๐Ÿ˜‰

@MarkIngramUK ํ , ๋‹จ์ผ ํ”„๋กœ์ ํŠธ์—์„œ ์—ฌ๋Ÿฌ ์–ธ์–ด์˜ ์ฝ”๋“œ ํŒŒ์ผ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ ์–ธ์–ด๋ฅผ ์ถ”์ƒํ™”ํ•˜๋Š” ์–ธ์–ด ๊ฐ„์˜ ๋‹ค๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” xlang์˜ ๋ชฉ์ ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ–ˆ์Šต๋‹ˆ๋‹ค - ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ผ์–ด๋‚œ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ๋‚ด ๊ฐ์‹œ ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค)

xlang์€ ์ปดํŒŒ์ผ ์ „์ด๋‚˜ ํ›„์— ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ํˆฌ์˜๋  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ์ถ”์ƒ ์–ธ์–ด์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๊ธฐ์กด ์ฝ”๋“œ ํŒŒ์ผ ์‚ฌ์ด์— ์œ„์น˜ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ๋‹จ์ผ ํ”„๋กœ์ ํŠธ์—์„œ ์–ธ์–ด๋ฅผ ํ˜ผํ•ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹ค๋ฆฌ์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ทธ๋Ÿฌํ•œ ๋ชฉ์ ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

@MarkIngramUK ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

PInvoke ๋ฐ ๊ธฐํƒ€ .NET ํŠธ๋ฆญ ์—†์ด C#์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ Win32 ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jesbis ์†”์งํžˆ ์ด ํ”„๋กœ์ ํŠธ์˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ธก๋ฉด์— ๋” ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค...

์ฒ˜์Œ์—๋Š” "Windows"๊ฐ€ ์•„๋‹Œ ์ข€ ๋” _์ผ๋ฐ˜์ ์ธ_ ์ด๋ฆ„์œผ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๊ตฌํ˜„์€ Win32์™€ UWP/Xamarin ์•ฑ ๋ฐ Windows์— ์—„๊ฒฉํ•˜๊ฒŒ ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•˜์ง€๋งŒ OSS๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ "Windows ์ „์šฉ" ํ”„๋ ˆ์ž„์›Œํฌ์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๋ฉด UWP์™€ ๊ฐ™์€ ๊ฒฌ์ธ๋ ฅ์„ ์–ป์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์•˜์œผ๋ฉฐ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์˜ ๊ฐœ๋ฐœ์ž๋Š” ๊ฒฐ์ฝ” ๊ทธ๊ฒƒ์— ๊ด€์‹ฌ์„ ๊ฐ–์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

.Net 5์˜ ๋ชฉํ‘œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ .Net 1.0 ์ดํ›„๋กœ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ํ•ญ์ƒ ๊ธฐ๋Œ€ํ–ˆ๋˜ "One .Net Everywhere"๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด "Anything but Win UI" ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ฐ˜์ด ๊ต์ฐจ ํ”Œ๋žซํผ์—์„œ ์‹œ์ž‘๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ฃผ ์ข‹์€ ์˜ˆ๋Š” Google Flutter์ž…๋‹ˆ๋‹ค. Flutter๋Š” ์ดˆ๊ธฐ ๋‹จ๊ณ„์— ์žˆ์ง€๋งŒ ํ•ต์‹ฌ(์ผ๋ช… Flutter Engine)์ด 100% ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด๊ณ  ๋ชจ๋“  ๊ณณ(IoT, Win, OSX, ์ด์ œ๋Š” ์›น ํฌํ•จ!)์—์„œ ์ž‘๋™ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ด€์‹ฌ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ๋‚ด 2c์ž…๋‹ˆ๋‹ค. Xaml ์ž‘์—…์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์ง€๋งŒ UWP์—์„œ์™€ ๊ฐ™์€ ์ค„์„ ๊ณ„์† ์œ ์ง€ํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ฒฌ์ธ๋ ฅ์„ ์–ป์ง€ ๋ชปํ•˜๊ณ  ๊ฒฐ๊ตญ ๋‹ค๋ฅธ ์‹œ๋„๊ฐ€ ํ•„์š”ํ•œ WPF๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ ค๋Š” ๋˜ ๋‹ค๋ฅธ ์‹œ๋„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฏธ๋ž˜ ๋“ฑ๋“ฑ.

์ €๋ฅผ ํ™”๋‚˜๊ฒŒํ•˜์ง€ ๋งˆ์‹œ๊ณ  ์ œ ์˜๊ฒฌ์„ ๋‚˜์œ ๋น„ํŒ์œผ๋กœ ๋ฐ›์•„๋“ค์ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค. .Net ์„ธ๊ณ„์˜ UI์— ๋Œ€ํ•œ ๋…ธ๋ ฅ์ด Flutter, .Net Core 3.0/.Net 5, ์‹ฌ์ง€์–ด Blazor์™€ ๊ฐ™์€ ๊ฒƒ์„ ์–ป๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ €๋Š” .Net World์— ์˜ต์…˜์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— C# ๋ฐ .Net Core์—์„œ Flutter ์—”์ง„์„ ์™„์ „ํžˆ ์žฌ์ž‘์„ฑ/ํฌํŒ…ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค...

์•—, CoreUI ๋Š” ์ข‹์€ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค...

๊ทธ ์ œ์•ˆ์— ๋Œ€ํ•ด Jake Helfert์—๊ฒŒ ๊ฒฝ์˜๋ฅผ ํ‘œํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜„

๐Ÿ’ƒ

์•—, CoreUI ๋Š” ์ข‹์€ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค...

๊ทธ ์ œ์•ˆ์— ๋Œ€ํ•ด Jake Helfert์—๊ฒŒ ๊ฒฝ์˜๋ฅผ ํ‘œํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜„

๐Ÿ’ƒ

CoreUI๊ฐ€ .NET Core์™€ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ์Œ

WinUI๋Š” Windows์— ๋งค์šฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์ง€๋งŒ ๊ทธ ์•ˆ์— ์žˆ๋Š” XAML ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Metal(iOS ๋ฐ macOS) ๋˜๋Š” Vulkan(Android)์šฉ ๋ Œ๋”๋Ÿฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ FabricWeb์€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” PWA/ChromeOS ๋ฐฉ์‹์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ€์ด ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํ”Œ๋žซํผ์„ ๊ฐ€์ ธ์˜ค๊ธฐ๋กœ ์„ ํƒํ•˜๊ณ  Xland ๋˜๋Š” Xamarin์ด ํ”Œ๋žซํผ ๊ฐ„ ์•ฑ์˜ ๋Ÿฐํƒ€์ž„์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด.

๋ฐ›์€ ํŽธ์ง€ํ•จ UWP UI์—์„œ WinUI 3.0์œผ๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ๋Œ€ํ•ด @dotMorten ( https://www.sharpgis.net/post/2019/05/14/The-future-UWP )์˜ ์ตœ๊ทผ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„ ์ธ์šฉ

์žฌ๋ฏธ์žˆ๋Š” ์š”์ : UWP์— ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š” ์ผ์€ ๊ทธ๊ฒƒ์ด ์ฃฝ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. Microsoft๋Š” ์ตœ๊ณ ์˜ ๋ถ€ํ’ˆ์„ ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๊ณณ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์„ ํšŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์ด์ „์— ๋ฐœ์ƒํ–ˆ์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ํ”ผ๋ฒ—์„ ์ˆ˜ํ–‰ํ•  ๊ธฐํšŒ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‹ค๋ฒ„๋ผ์ดํŠธ๋ฅผ ๊ธฐ์–ตํ•˜์‹œ๋‚˜์š”? .NET Core์˜ ํ”Œ๋žซํผ ๊ฐ„ CLR์ด ์–ด๋””์—์„œ ์™”๋Š”์ง€ ๋งž์ถฐ๋ณด์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  Silverlight์˜ ๋งŽ์€ ์ฝ”๋“œ๋„ UWP์— ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ํ”ผ๋ฒ—ํ•˜๊ณ  "์˜ˆ, Silverlight๊ฐ€ ์†Œ๋น„์ž์šฉ ์ œํ’ˆ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์˜์—ญ์—์„œ๋Š” ๋ฒˆ์ฐฝํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•ํ•˜๊ณ  .NET Core ๋ฐ Windows Store๋กœ ๋ฐœ์ „์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๊ทธ๊ฒƒ์€ ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ PTSD๋กœ ๊ณ ํ†ต ๋ฐ›๊ณ  ์žˆ์œผ๋ฉฐ Microsoft๊ฐ€ ๋ชจ๋“  ๊ธฐ์ˆ ์„ ์ฃฝ์ด๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” ๋ชจ๋“  ์กฐ์น˜๋ฅผ ๊ฒฝ๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž์™€ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ข‹์€ ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์žฌ์„ค์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ธ์‹๋˜๋Š” ๊ฒƒ์€ ๊ธฐ์กด ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์™œ ์ƒˆ๋กœ์šด ๊ฒƒ์€ ๊ทธ๋ƒฅ ๊ฐ™์€ ์šด๋ช…์„ ๋งž์ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŠน์ • ์ œ์•ˆ๋œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด ๋ฐ›์€ ํŽธ์ง€ํ•จ UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋งŽ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ์˜๊ฒฌ์— ๋Œ€ํ•œ ์‘๋‹ต์ž…๋‹ˆ๋‹ค. ๊ณ ๋ ค ์‚ฌํ•ญ์€ ์ด๋ฟ๋งŒ์ด ์•„๋‹™๋‹ˆ๋‹ค!

@weitzhandler WinUI 3.0์€ ๋‹ค์–‘ํ•œ Win32, .NET Core ๋ฐ UWP ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋‹จ์ผ XAML ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฒฐํ•ฉํ•˜๊ณ  WPF, WinForms ๋ฐ MFC++์™€์˜ ์ƒํ˜ธ ์šด์šฉ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Windows์˜ XAML์€ Direct X๋กœ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ XAML์„ .NET Core์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ. ํ•ด๋‹น ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ƒˆ ๋ Œ๋”๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. iOS ๋ฐ macOS๋Š” Metal์„ Direct X์— ์ƒ์‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” Vulkan์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Linux๊ฐ€ ๋ Œ๋”๋ง์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์ „ํ˜€ ๋ชจ๋ฅด์ง€๋งŒ Open GL์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋Š” ๊ทธ๊ฒƒ์ด ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์Šค์Šค๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ WinUI 3.0์€ ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ”Œ๋žซํผ ๊ฐ„์— ๊ฐ€์ ธ์˜ค๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mdtauk

ํ•ด๋ช…ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Flutter๋Š” ์•„๋งˆ๋„ ์ œ ๋ฏธ๋ž˜์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฑด ์ œ ์ดํ•ด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์˜คํ•ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Flutter๋Š” ํ–ฅํ›„ Windows ์ง€์›์„ ๋ฐ›์„ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  React Native ์ง€์›์€ Windows์—๋„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์›น HTML ๋ฐ Javascript ์„ธ๊ณ„์— ํˆฌ์žํ•œ๋‹ค๋ฉด PWA๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ์ „์ฒด WinUI ์ด์•ผ๊ธฐ๋Š” ์›น์„ ํฌํ•จํ•˜์—ฌ ํ”Œ๋žซํผ ๊ฐ„(macOS, iOS, Android)์—์„œ ์‹คํ–‰๋˜๋Š” ๊ธฐ๋ณธ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๊ณ ๋ คํ•˜๊ณ  ๋” ๋‚˜์€ F# ์ง€์› ๋ฐ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ(ํฌํ•จ F# ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ XAML ์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ ๋ฐ ๋”์šฑ ๊ธฐ๋Šฅ์ ์ธ Elmish ๋ฐฉ์‹)

XAML์€ HTML ์ด HTML ์•ฑ์ฒ˜๋Ÿผ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋„๊ตฌ ์•ฑ์—๋„ 100mb ์ด์ƒ์„ ์‚ฌ์šฉํ•˜์ง€ ๊ฒŒ์ž„ ์—”์ง„์ด ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ถˆ๊ฐ€์ง€๋ก ์  ๋ Œ๋”๋ง ๋ฐฑ์—”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด UWP์— ์ดˆ์ ์„ ๋งž์ถ˜ XAML์ด XAML๊ณผ ํ•จ๊ป˜ ๋ช‡ ๋…„ ๋™์•ˆ ์ œ ํšŒ์‚ฌ๋‚˜ ์ œ๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์—†์Šต๋‹ˆ๋‹ค. TBH MS๋Š” UI์— ๋Œ€ํ•ด ์™„์ „ํžˆ ์ž˜๋ชป๋œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์œผ๋ฉฐ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ท€์ค‘ํ•œ ์‹œ๊ฐ„์„ ๋งŽ์ด ๋‚ญ๋น„ํ•ฉ๋‹ˆ๋‹ค). ์ด UWP XAML ํ•ด์ปค๋Š” ๋‚ด๊ฐ€ ๋ณด์—ฌ ์ฃผ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ž˜ ์–ด์šธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ์ด๋Š” XAML ์ฑ„ํƒ์— ๋Œ€ํ•œ ๋์—†๋Š” ๋ฐ˜๋ฐœ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šฌํ”„๊ณ  ์ด ์‹œ์ ์—์„œ ๋” ์ด์ƒ ๋…ผ์Ÿํ•  ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ์˜๊ฒฌ์œผ๋กœ๋Š” XAML์„ ์ €์žฅํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • .NET Core ๋ฐ C/C++์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ถˆ๊ฐ€์ง€๋ก ์ /์ด์‹ ๊ฐ€๋Šฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๋ˆ„๊ตฌ๋‚˜ pull-request๋ฅผ ํ†ตํ•ด ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ถˆ๊ฐ€์ง€๋ก ์  ๋ Œ๋”๋ง ์ถ”์ƒํ™” ๊ณ„์ธต์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • HTML๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ XAML์ด ๋‹จ์ผ ์ฐฝ ์•ฑ ๊ฐœ๋…์— ์ดˆ์ ์„ ๋งž์ถ”๋„๋ก ํ•˜๋˜(๊ฒŒ์ž„์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž„) ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์ค‘ ์ฐฝ ๋“ฑ์„ ์œ„ํ•œ ํ™•์žฅ๋œ ๋ฐ์Šคํฌํ†ฑ ๊ธฐ๋Šฅ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ XAML ์ ์‘์ด ์ œ์™ธ๋˜๊ธฐ ์ „์— ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉ๋˜์–ด์•ผ ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1 MS๋Š” XAML ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ๋žŒ๋“ค์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹คํŒจํ• ๊นŒ๋ด ๋‘๋ ค์›Œํ•ฉ๋‹ˆ๋‹ค.

2 ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋‘๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ๋ถ€ํ’€๋ ค์ง„ HTML ๋Ÿฐํƒ€์ž„์— ๊ฐ‡ํžˆ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ๋‚ด 2์„ผํŠธ์ด๊ณ  WinUI 3.0์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค๊ณ„๋˜์—ˆ๋‹ค๋ฉด ์ด์‹์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ idk ๋ฌด์—‡์„ ๋Š๊ปด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ํฌ๋กœ์Šค ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์ด ์žˆ์œผ๋ฉฐ WinUI๊ฐ€ ์„ฑ๊ณตํ•˜๋ ค๋ฉด ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  Mac์ด๋‚˜ Linux์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‘ ํ”Œ๋žซํผ ์ค‘ ํ•˜๋‚˜์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋Š๊ปด์ง€์ง€ ์•Š์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” Windows ๋‚ด๋ถ€๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ’๋ถ€ํ•œ ์ง€์‹์„ ๊ฐ€์ง„ ํŒ€์ด ์†Œ์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Mac ๋˜๋Š” Linux์—์„œ ๋™์ผํ•œ ์ •๋„๋กœ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์€ ๊ทธ๋“ค์ด ์ฃผ์˜๋ฅผ ์‚ฐ๋งŒํ•˜๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ... Fluent on Mac์€ ํˆฌ๋ฐ•ํ•˜๊ฒŒ ๋Š๊ปด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. iTunes๋ฅผ ๋ณด๋ฉด Apple์€ ์ „์ฒด UI ์‹œ์Šคํ…œ์„ Windows๋กœ ์ด์‹ํ•ด์•ผ ํ–ˆ๊ณ  ํ™•์‹คํžˆ ๋ถ€์ ์ ˆํ•˜๊ฒŒ ๋Š๊ปด์กŒ์Šต๋‹ˆ๋‹ค. ๊ธ€๊ผด ๋ Œ๋”๋ง์€ ๋‹ค๋ฅด๋ฉฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ณก์„ ๊ณผ ๊ทธ๋ฆผ์ž ๋ฐ ์ƒ‰์ƒ ์„ ํƒ์€ Win10์—์„œ ๋„ˆ๋ฌด ๋ถ€์ ์ ˆํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ๋‚ด ๋ง์€, ๊ทธ๊ฒƒ์€ ๊ดœ์ฐฎ๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ฐ์Šคํฌํƒ‘ UI๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜์ง€ ์•Š๊ณ  ํ›„๋“œ ์•„๋ž˜์—์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Spotify๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. Mac์—์„œ๋Š” ๋ชจ์„œ๋ฆฌ๊ฐ€ ๋‘ฅ๊ธ€๊ณ  ํ‘œ์‹œ ํšจ๊ณผ๊ฐ€ ์—†๋Š” ๋ฐ์Šคํฌํƒ‘์—์„œ ์ •์‚ฌ๊ฐํ˜• ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ํ‘œ์‹œ ์ŠคํฌํŠธ๋ผ์ดํŠธ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ํž˜๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ์ด ํ”„๋กœ์ ํŠธ๋Š” Windows ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋Š”/ํ•„์š”ํ•œ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ๊ธฐ๋ณธ Windows ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๋™๊ธ‰ ์ตœ๊ณ ์˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฌธ์ œ๋Š” Electron/Typescript ํŒ€์— ๋งก๊ฒจ ํ•ด๊ฒฐํ•˜์„ธ์š”.

์—ฌ๊ธฐ์— ํฌ๋กœ์Šค ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์ด ์žˆ์œผ๋ฉฐ WinUI๊ฐ€ ์„ฑ๊ณตํ•˜๋ ค๋ฉด ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  Mac์ด๋‚˜ Linux์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‘ ํ”Œ๋žซํผ ์ค‘ ํ•˜๋‚˜์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋Š๊ปด์ง€์ง€ ์•Š์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” Windows ๋‚ด๋ถ€๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ’๋ถ€ํ•œ ์ง€์‹์„ ๊ฐ€์ง„ ํŒ€์ด ์†Œ์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Mac ๋˜๋Š” Linux์—์„œ ๋™์ผํ•œ ์ •๋„๋กœ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์€ ๊ทธ๋“ค์ด ์ฃผ์˜๋ฅผ ์‚ฐ๋งŒํ•˜๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋˜ํ•œ... Fluent on Mac์€ ํˆฌ๋ฐ•ํ•˜๊ฒŒ ๋Š๊ปด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. iTunes๋ฅผ ๋ณด๋ฉด Apple์€ ์ „์ฒด UI ์‹œ์Šคํ…œ์„ Windows๋กœ ์ด์‹ํ•ด์•ผ ํ–ˆ๊ณ  ํ™•์‹คํžˆ ๋ถ€์ ์ ˆํ•˜๊ฒŒ ๋Š๊ปด์กŒ์Šต๋‹ˆ๋‹ค. ๊ธ€๊ผด ๋ Œ๋”๋ง์€ ๋‹ค๋ฅด๋ฉฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ณก์„ ๊ณผ ๊ทธ๋ฆผ์ž ๋ฐ ์ƒ‰์ƒ ์„ ํƒ์€ Win10์—์„œ ๋„ˆ๋ฌด ๋ถ€์ ์ ˆํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ๋‚ด ๋ง์€, ๊ทธ๊ฒƒ์€ ๊ดœ์ฐฎ๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ฐ์Šคํฌํƒ‘ UI๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜์ง€ ์•Š๊ณ  ํ›„๋“œ ์•„๋ž˜์—์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Spotify๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. Mac์—์„œ๋Š” ๋ชจ์„œ๋ฆฌ๊ฐ€ ๋‘ฅ๊ธ€๊ณ  ํ‘œ์‹œ ํšจ๊ณผ๊ฐ€ ์—†๋Š” ๋ฐ์Šคํฌํƒ‘์—์„œ ์ •์‚ฌ๊ฐํ˜• ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ํ‘œ์‹œ ์ŠคํฌํŠธ๋ผ์ดํŠธ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ํž˜๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์•„๋‹ˆ์š”, ์ด ํ”„๋กœ์ ํŠธ๋Š” Windows ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋Š”/ํ•„์š”ํ•œ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ๊ธฐ๋ณธ Windows ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๋™๊ธ‰ ์ตœ๊ณ ์˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฌธ์ œ๋Š” Electron/Typescript ํŒ€์— ๋งก๊ฒจ ํ•ด๊ฒฐํ•˜์„ธ์š”.

๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์™„์ „ํ•œ Fluent ๋””์ž์ธ์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ํ”Œ๋žซํผ ๊ฐ„์˜ ๊ณตํ†ต ์ฝ”๋“œ๋ฅผ ์ตœ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Microsoft ๋””์ž์ธ ํŒ€์—์„œ ์ด๋ฏธ ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Fluent ์›น์‚ฌ์ดํŠธ๋Š” "๊ธฐ๋ณธ์ ์œผ๋กœ iOS์ด๋ฉด์„œ ์—ฌ์ „ํžˆ ๊ณ ์œ ํ•œ Fluent์ธ ๋งž์ถคํ˜• ์•ฑ์„ ๋””์ž์ธํ•˜๊ณ  ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ๋งํ•ฉ๋‹ˆ๋‹ค. Fluent ๋ฌธ์„œ๋Š” ๊ธฐ๋ณธ ์ปจํŠธ๋กค ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
https://www.microsoft.com/design/fluent/#/ios
https://developer.microsoft.com/en-us/fabric#/controls/ios/button

ํ”ผํ•ด์•ผ ํ•  ๊ฒƒ์€ ๊ฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ์™„์ „ํžˆ ๋ณ„๋„์˜ UI๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ‘œ๋ฉด์ ์œผ๋กœ ๋™์ผํ•˜๊ฒŒ ๋ณด์ผ ํ•„์š”๋Š” ์—†์ง€๋งŒ ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ์„ ๊ณต์œ ํ•ด์•ผ ํ•˜๋ฉฐ UI ๋””์ž์ด๋„ˆ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์Šคํƒ€์ผ์€ Windows 10 ์‹œ์Šคํ…œ ์Šคํƒ€์ผ๊ณผ ์ผ์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ณธ์งˆ์ ์œผ๋กœ ์›ํ•˜๋Š” ๊ฒƒ์€ Fluent ๋””์ž์ธ์„ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „์ฒด UI๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค ํ•„์š” ์—†์ด ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ Windows ์•ฑ์„ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ๋จผ์ € Windows์šฉ์œผ๋กœ ์ž‘์„ฑํ•œ ๋‹ค์Œ ๋งŽ์€ ์ž‘์—… ์—†์ด ์•ฑ์„ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@KyleNanakdewa ๊ธ€์Ž„, ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์„ ์˜คํ”ˆ ์†Œ์‹ฑํ•œ๋‹ค๋ฉด ์ผ๋ถ€ Xaml ํŒฌ์ด ๋– ๋‚˜ ๊ธฐ๋ณธ ํ”Œ๋žซํผ ๋น„ํŠธ๋ฅผ ๋งŒ๋“ค๊ฒŒํ•˜์‹ญ์‹œ์˜ค. ์•„๋งˆ๋„ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋ณต์žกํ•˜๊ณ  Win32๋ฅผ ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•˜์—ฌ ํฌํŠธ๊ฐ€ ๋ง‰๋Œ€ํ•œ ์‚ฌ์—…์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๋ณธ Windows ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋™๊ธ‰ ์ตœ๊ณ ์˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Microsoft๊ฐ€ ์ด๋ฏธ WinUI์™€ ๋งค์šฐ ๋‹ค๋ฅธ XAML ๋ฐฉ์–ธ์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์กด ํฌ๋กœ์Šค ํ”Œ๋žซํผ XAML ๋„๊ตฌ ํ‚คํŠธ๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด ์ฃผ์žฅ์€ ์„ค๋“๋ ฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์›น HTML ๋ฐ Javascript ์„ธ๊ณ„์— ํˆฌ์žํ•œ๋‹ค๋ฉด PWA๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค... ๋„ค์ดํ‹ฐ๋ธŒ OS/์Šคํ† ์–ด/ํ˜ธ์ŠคํŒ… ๊ฐœ๋ฐœ์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋น ๋ฅด๊ฒŒ ๋Œ€์ฒดํ•˜๋Š” "๊ทธ ์„ธ๊ณ„"์ž…๋‹ˆ๋‹ค. ๐Ÿ˜†

https://onezero.medium.com/the-end-of-app-stores-is-rapidly-approaching-b972da395097

HTML5 ๋ Œ๋”๋Ÿฌ๊ฐ€ ์žˆ๋Š” _๋ชจ๋“ _ ์ตœ์‹  ๊ธฐ๊ธฐ์— "๊ทธ ์„ธ๊ณ„"๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”.

์ด์ œ Windows์˜ ์‹œ์žฅ ์ ์œ ์œจ์ด ๊ฐ€์žฅ ๋‚ฎ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด ํ”Œ๋žซํผ์— ํŠน๋ณ„ํžˆ ๋งž๋Š” ๋ชจ๋“  ์ œํ’ˆ์€ ๊ฐ€์žฅ ์ž‘์€ ์‹œ์žฅ์— ๋„๋‹ฌํ•˜๋Š” ์ œํ’ˆ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ตœ๋Œ€ ์ž ์žฌ์  ์‹œ์žฅ ๋„๋‹ฌ ๋ฒ”์œ„๊ฐ€ ์ค„์–ด๋“ค๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ตœ๋Œ€ ์ž ์žฌ์  ์ˆ˜์ต ํ•œ๋„๊ฐ€ ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์•ž์„œ ์–ธ๊ธ‰ํ•œ ๋งˆ์ผ“ ํ”Œ๋ ˆ์ด์Šค์˜ _๋ชจ๋“ _์— _ํ•˜๋‚˜์˜_ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ๋„๋‹ฌํ•˜๋Š” Flutter ์™€ ์›น ์ด 3๊ฐ€์ง€ ๋ชจ๋‘์˜ ์ง‘ํ•ฉ์ฒด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” Flutter์™€ ๋น„๊ตํ•˜์‹ญ์‹œ์˜ค. ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์—ฌ๊ธฐ์—์„œ ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•˜๊ณ , ํ˜‘์—…ํ•˜๊ณ , ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์˜ ์—ด๋ ฌํ•œ ํŒฌ ์ด์ง€๋งŒ, ์—ฌ๊ธฐ์—์„œ์˜ ๋…ธ๋ ฅ์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ํ™•์‹ ์„ ๊ฐ–๊ณ  ๋‚˜์—๊ฒŒ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๋Š” ์ด๋Ÿฌํ•œ ํ† ๋ก (๋‚˜๋„ ์ฆ๊น๋‹ˆ๋‹ค ๐Ÿ˜)์„ ์•„์ง ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. Flutter(btw ๋„ PWA์— ์ ํ•ฉํ•จ )์™€ ๋น„๊ตํ•  ๋•Œ ๊ฒฝ์Ÿ๋ ฅ์ด ์žˆ์œผ๋ฏ€๋กœ _์ˆ˜์ต์„ฑ ์žˆ๋Š”_์ž…๋‹ˆ๋‹ค.

๋‹ค์ด์–ด๊ทธ๋žจ ์ œ์–ด ๋Š” ๊ณง ๊ณต์‹ NET CORE 3(2019๋…„ 9์›”)๊ฐ€ ๋  ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ตœ์‹  ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์—์„œ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. NET 5(2020๋…„ 11์›”)

์ œ๊ณต๋œ Networkview ์˜คํ”ˆ ์†Œ์Šค ์ปจํŠธ๋กค์€ Xaml์„ ์‚ฌ์šฉํ•˜์—ฌ WPF๋ฅผ Win UI ์ปจํŠธ๋กค๋กœ ์ด์‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํšจ๊ณผ์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์ด์‹๋œ Win UI๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋ฅธ ์•ฝ๊ฐ„ ๋” ๋ณต์žกํ•œ WPF ์ปจํŠธ๋กค์„ Win UI๋กœ ์ด์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธธ๋“œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์•ฑ์ด ํ–ฅํ›„ Windows Core OS์—์„œ ํƒœ๋ธ”๋ฆฟ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” 2 in 1 ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ด…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” NET Core 3์˜ Winform์ด ๋„์›€์ด ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Win UI ๋‹ค์ด์–ด๊ทธ๋žจ ์ปจํŠธ๋กค์ด PoC์˜ ์—ฐ์Šต์ด ์•„๋‹ˆ๋ผ ์•ž์œผ๋กœ ์ด๋™ํ•˜๋Š” Grid ์ปจํŠธ๋กค๊ณผ ์œ ์‚ฌํ•œ FIRST ํด๋ž˜์Šค์˜ win ui ํ•ต์‹ฌ ์ปจํŠธ๋กค์˜ ์ผ๋ถ€์—ฌ์•ผ ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฐ•๋ ฅํ•œ ์ •๋‹นํ™”์ž…๋‹ˆ๋‹ค.

๋” ๋‚˜์€ F# ์ง€์›์ด๋‚˜ ์ƒˆ๋กœ์šด ๋งˆํฌ์—… ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ ๋˜๋ฉด ์ƒˆ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์—ด์–ด ๋ณ„๋„๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค!

@migueldeicaza ๊ฐ€ ์Šค์Šค๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค: https://github.com/microsoft/microsoft-ui-xaml/pull/736

ํฌ๋กœ์Šค ํ”Œ๋žซํผ์— ๋Œ€ํ•œ @eklipse2k8 ์˜ ์ƒ๊ฐ์„ ๋ฐ˜์˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ํ•ญ์ƒ ํƒ€ํ˜‘์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. WinUI๋Š” ํƒ€ํ˜‘ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. Win32 UI๋ฅผ ํ˜„๋Œ€์ ์œผ๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•˜๋ฉฐ(๋” ์ด์ƒ CreateWindowExW ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค!) Windows์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์˜ ์‡ผ์ผ€์ด์Šค๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. macOS ๋˜๋Š” Android์˜ WinUI๋Š” ํ•ญ์ƒ ๊ธฐ๋ณธ ๊ฒฝํ—˜๊ณผ ์ผ์น˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๊ณ  ๊ฐ ํ”Œ๋žซํผ์— ๊ธฐ๋ณธ UI๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ณ ๊ฐ์ด ์„ ํƒํ•œ ํ”Œ๋žซํผ์—์„œ ์ตœ๊ณ ์˜ ๊ฒฝํ—˜์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์†”๋ฃจ์…˜์„ ์›ํ•œ๋‹ค๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ชฉ์ ์„ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ Windows ํ”Œ๋žซํผ์—์„œ WinUI๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  PWA์™€ ๊ด€๋ จํ•˜์—ฌ ์ด๋“ค์€ Windows UI ์‹œ์Šคํ…œ์˜ ์ „์ฒด ์‚ฌ์šฉ์„ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š์œผ๋ฉฐ "๋‹จ์ผ ์ฐฝ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ"์— ์ค‘์ ์„ ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(๊ฒŒ์ž„ ์ œ์™ธ). PWA ๋ฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์†”๋ฃจ์…˜์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜๋ฌด XKCD:
https://xkcd.com/927/

@MarkIngramUK ํฌ๋กœ์Šค ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” UI๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด .NET ๋ฐ XAML๋กœ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ด๋‹น ์•ฑ์„ Android, iOS, macOS, Linux์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€์š”?! - ๋’ค์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ XAML์„ ํฌ๊ธฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ด๋Ÿฌํ•œ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ XAML ๋ Œ๋”๋Ÿฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ XAML์„ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ UI ํ”Œ๋žซํผ์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” Xamarin Forms์™€ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ปจํŠธ๋กค ์Šคํƒ€์ผ.

WinUI 3.0์€ ๋‹ค์–‘ํ•œ API ๋ฐ ABI๋ฅผ ์ตœ์‹  XAML ๊ธฐ๋ฐ˜ UI ํ”Œ๋žซํผ๊ณผ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด Windows ์ค‘์‹ฌ ํ”„๋กœ์ ํŠธ๋กœ ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด Xamarin์ด๋‚˜ ๊ฐœ์ธ์ด ๋ Œ๋”๋ง ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์šฉ ๋ฒ„์ „์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

(๋†’์€ ์ˆ˜์ค€์˜ ์‚ฌ๊ณ  ๋ฐฉ์‹์—์„œ) ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒƒ์€ Windows์˜ ํ™”๋ฉด์— XAML์„ ๋ Œ๋”๋งํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜๋„๋ก ํ•˜์—ฌ ๋‹ค๋ฅธ ๋ Œ๋”๋Ÿฌ๊ฐ€ ํ”Œ๋žซํผ ๊ฐ„ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

WinRT/UWP/XAML์€ Windows 10 OS์—์„œ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ–ฅํ›„ ํ™•์žฅ์„ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด ํ˜„์‹ค์ด ๋˜๋Š”์ง€ ์•„๋‹Œ์ง€.

@MarkIngramUK ๋‚˜๋Š” @mdtauk์— ๋™์˜

React๋ฅผ ํฌํ•จํ•œ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ UI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด xaml์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ์—†์Šต๋‹ˆ๋‹ค. http://www.cshtml5.com ๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณด๋ฉด html๋กœ ๋ณ€ํ™˜๋˜๋Š” xaml์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋˜ํ•œ ์ตœ์ข… ๋ชฉํ‘œ๊ฐ€ UI๊ฐ€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•˜๊ฒŒ ๋ณด์ด๋Š” ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์•„๋ฌด๋„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ์ธ์ ์œผ๋กœ ์›ํ•˜๋Š” ๊ฒƒ์€ UWP์™€ ๊ฐ™์€ ๊ธฐ์กด ํˆฌ์ž๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” UI ์ธก๋ฉด์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์š”์ ์€ ๋ฐ”๋กœ ์ด๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ธฐ์—… ๊ณ ๊ฐ์—๊ฒŒ ์ œ์•ˆ์„ ํ•˜๊ณ  ๋ชจ๋“  ๋ฉด์—์„œ ํ™˜์ƒ์ ์ธ ๋ฉ‹์ง„ UWP ์•ฑ์„ ์ œ์‹œํ•œ๋‹ค๋ฉด. ํ•ด๋‹น ๊ธฐ์—… ๊ณ ๊ฐ์—๊ฒŒ ์˜ˆ๋ฅผ ๋“ค์–ด MacBook Pro๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ 1๋ช… ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธฐ์—… ๊ณ ๊ฐ์€ ์‹คํ–‰ํ•˜๋”๋ผ๋„ ๋‚ด "๊ธฐ๋ณธ ์•ฑ"๋ณด๋‹ค ๋ชจ๋“  ๊ณณ์—์„œ ์ž‘๋™ํ•˜๋Š” ์•ฑ(์ตœ์ € ๋ถ„๋ชจ => ์›น ์‚ฌ์ดํŠธ)์„ ํƒํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฆ‰์‹œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์œˆ๋„์šฐ 10์—์„œ.

๊ทธ๋ž˜์„œ ์ ‘๊ทผ์„ฑ ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. MS๊ฐ€ ์—ฌ์ „ํžˆ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋กœ๋“œ๋งต ์—†์ด 2019๋…„์— "๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ"์— ํˆฌ์žํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ฏธ์นœ ์ง“์ž…๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ด€์ ์˜ ๋ชจ๋“  ์ƒˆ ํ”„๋กœ์ ํŠธ๋Š” ์•ก์„ธ์Šค ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•œ ์œ„์˜ ๋…ผ๋ฆฌ๋ฅผ ๋”ฐ๋ฅผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฏ€๋กœ XAML/UWP์— ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋Š” ๋กœ๋“œ๋งต์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ƒˆ ํ”„๋กœ์ ํŠธ๋Š” ์›น๊ณผ ๋ชจ๋‘์— ํŽธ์ค‘๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ๋ถ€ํ„ฐ 2-3๋…„ ํ›„, UWP/win32์— ๋Œ€ํ•œ ๊ธฐ์—…์˜

MS๋Š” XAML์ด ๋‚ด์ผ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ "์ƒˆ๋กœ์šด" UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์˜ˆ๋ฅผ ๋“ค์–ด React๋ผ๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. C#์„ ์ด ์ƒˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ํ•œ ์ €๋Š” ์†์‹ค์„ ์ค„์ด๊ณ  XAML์„ ๋ฒ„๋ฆฌ๊ณ  ์ด ์ƒˆ๋กœ์šด ๊ต์ฐจ ํ”Œ๋žซํผ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋‚ด ํˆฌ์ž๋Š” ๋‚ด๊ตฌ์„ฑ์ด ์žˆ๊ณ  ์žฅ๊ธฐ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๋กœ์Šค ํ”Œ๋žซํผ UI ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ๋œ ์ด ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ช…ํ™•์„ฑ ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ MS๋Š” "๋„ค์ดํ‹ฐ๋ธŒ ์Šคํƒ"์— ๋Œ€ํ•œ ๋ถˆํ™•์‹ค์„ฑ์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์—…์€ ๋ฏธ์ง€์˜ ๊ฒƒ์„ ํฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค ๋‚˜๋ฌด ๋‹ค๋ฆฌ๋กœ ๋ถˆ๊ธธ์„ ํ—ค์ณ ๋‚˜๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  PWA์™€ ๊ด€๋ จํ•˜์—ฌ Windows UI ์‹œ์Šคํ…œ์˜ ์ „์ฒด ์‚ฌ์šฉ์„ ๋‚˜ํƒ€๋‚ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ถฉ๋ถ„ํžˆ ๊ณต์ •ํ•˜๊ณ  ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. PWA์— ๋Œ€ํ•œ ๋‚˜์˜ ์ฃผ์š” ์š”์ ์€ ์‹œ์žฅ ์ ์œ ์œจ์ด ๋ชจ๋“  ์‹œ์žฅ์˜ ์ง‘ํ•ฉ์ฒด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ํŠน์ • ์‹œ์žฅ์ด ์™œ์†Œํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ž…์ฆํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์—ฌ๊ธฐ์—์„œ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๋ถ€๋ถ„์€ Microsoft.* ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ์—ฌ์ „ํžˆ Windows.* (๋˜๋Š” Microsoft.Windows.* )์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. .

PWA ๋ฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์†”๋ฃจ์…˜์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ .NET ๊ฐœ๋ฐœ์˜ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” ์ด ๋ฐœํ‘œ์™€ ํ›„์† ๋…ผ์˜์— ๋Œ€ํ•œ ํ˜ผ๋ž€๊ณผ ํ”Œ๋žซํผ ๊ฐ„ ๋ถˆ์•ˆ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์‹œ์žฅ ๋„๋‹ฌ ๋ฒ”์œ„์™€ ์ž ์žฌ์  ์ˆ˜์ต์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋™์‹œ์— ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋น„์šฉ์„ ์ค„์ž…๋‹ˆ๋‹ค.

๋•Œ๋กœ๋Š” ์„ฑ๋Šฅ๊ณผ UX ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ํฐ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Skype๋Š” ์„ฑ๋Šฅ์„ ํฌ์ƒํ•˜๋ฉด์„œ Electron ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์žฅ ๋„๋‹ฌ ๋ฒ”์œ„๋ฅผ ๊ทน๋Œ€ํ™”ํ–ˆ์œผ๋ฉฐ ๊ฒฐ๊ณผ๋Š” ์ƒ์—…์  ์žฌ์•™์ž…๋‹ˆ๋‹ค.

ํฌ๋กœ์Šค ํ”Œ๋žซํผ(xplat) ์†”๋ฃจ์…˜ ๊ด€๋ จ.
Xplat ์†”๋ฃจ์…˜์€ ์—ฌ๋Ÿฌ ๊ธฐ๋ณธ ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค. WinUI์— ๋Œ€ํ•œ ๋‚˜์˜ ์ดํ•ด๋Š” ์ด๊ฒƒ์ด Windows์˜ ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

WinUI๋„ xplat์ด ๋œ๋‹ค๋ฉด Windows ๊ณ ์œ ์˜ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉํ• ๊นŒ์š”? ๊ทธ๊ฒƒ์ด ์ƒˆ๋กญ๊ณ  ํ˜์‹ ์ ์ธ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์„๊นŒ์š”? ์•„๋‹ˆ๋ฉด Microsoft๊ฐ€ Windows์—์„œ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ํฌํŒ…ํ•˜๊ฑฐ๋‚˜ ์ฐจ๋ณ„ํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ๊ธฐ๋ณธ OS๊ฐ€ ์ง€์›ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด์‹ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์€ Windows์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๊ธฐ๋ณธ Windows ๊ธฐ์ˆ ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒฝ์šฐ Microsoft๊ฐ€ ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ์ด๋ฅผ ์ง€์›ํ•˜๊ณ  ํ–ฅํ›„ ์ƒˆ๋กœ์šด Windows ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. (SilverLight๋Š” ์˜ˆ์™ธ๋กœ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค.) ๊ธฐ๋ณธ Windows ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋นŒ๋“œํ•œ ๋‹ค์Œ ๊ฒฝ์Ÿ ์šด์˜ ์ฒด์ œ์—์„œ ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ Microsoft/Windows์— ๋‹ฌ๋ ค ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Swift๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ iPad์šฉ ์•ฑ์„ ๋งŒ๋“ค๊ณ  Windows ๋ฐ์Šคํฌํ†ฑ์—๋„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด Apple์ด iOS ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

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

์ฆ‰, ํ˜„์žฌ ์—ฌ๋Ÿฌ ์šด์˜ ์ฒด์ œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ฑฐ๋‚˜ ๋ฏธ๋ž˜์— ์›ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— xplat ์†”๋ฃจ์…˜์„ ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ(๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ์™€ ์ด์œ ๊ฐ€ ์žˆ์Œ), ์ด๋Š” ํ•ฉ๋ฆฌ์ ์ด๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ณธ.
์ด๋ฅผ ์œ„ํ•ด Microsoft์—๋Š” Xamarin์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” UWP์™€ ๊ฐ™์€ XAML์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ Uno๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹ค๋ฅธ ์˜ต์…˜๋„ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.)
์ €์ฒ˜๋Ÿผ Xamarin์ด Windows ์•ฑ ๋นŒ๋“œ์— ๋Œ€ํ•ด ๋” ๋‚˜์€ ๊ธฐ๋ณธ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด WinUI๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž‘์—…์„ ์‹œ๋„ํ•˜๊ณ  ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋‹ต์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

WinUI๋Š” XAML ๋ฐ ํŠน์ • ์ปจํŠธ๋กค ๊ทธ ์ด์ƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค๊ณผ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋œ ์•ฑ์ด ๊ธฐ๋ณธ ์šด์˜ ์ฒด์ œ์™€ ํ†ตํ•ฉ๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
WinUI ๊ณ„ํš์ด Windows์—์„œ Windows ๊ฐœ๋ฐœ์„ ์ตœ๊ณ ๋กœ ๋งŒ๋“œ๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถ”๋ฉด ํ˜์‹ ๊ณผ ์ข‹์€ ๋ฏธ๋ž˜ ์ง€์›์„ ์œ„ํ•œ ์ข‹์€ ์‚ฌ๋ก€๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ๋žŒ๋“ค์ด Windows๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง€๋ฏ€๋กœ ์—ฌ๋Ÿฌ xplat ์†”๋ฃจ์…˜์˜ ๊ฒฌ๊ณ ํ•œ ์ง€์›์ด ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค.

ํฌ๋กœ์Šค ํ”Œ๋žซํผ(xplat) ์†”๋ฃจ์…˜ ๊ด€๋ จ.
Xplat ์†”๋ฃจ์…˜์€ ์—ฌ๋Ÿฌ ๊ธฐ๋ณธ ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค. WinUI์— ๋Œ€ํ•œ ๋‚˜์˜ ์ดํ•ด๋Š” ์ด๊ฒƒ์ด Windows์˜ ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฏธ์•ˆํ•˜์ง€๋งŒ ๋‚œ ๊ทธ๋Ÿฐ ๋Š๋‚Œ์ด ์•„๋‹ˆ์•ผ...

Flutter๋ฅผ ๋ณด์„ธ์š”... ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋ฌด์—‡์ด๋“  ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ์—”์ง„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์—”์ง„ ๊ด€๋ฆฌ ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Dart์—์„œ ์™„์ „ํžˆ ๊ตฌํ˜„๋˜๊ณ  ํ”ฝ์…€ ์ถฉ์‹ค๋„๋กœ ํ‘œํ˜„(๊ทธ๋ฆฌ๊ธฐ/๋ Œ๋”๋ง)ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Material.io ๋ฐ Apple์˜ Cupertino์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ”Œ๋žซํผ ๋ฐ ๋””์ž์ธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ IMHO๋Š” ํ”Œ๋žซํผ ๊ฐ„ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ์ข‹์€ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋  ๊ฒƒ์ด๋ฉฐ ๋™์‹œ์— ๊ธฐ๋ณธ ํ”Œ๋žซํผ ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Windows ๊ธฐ์ˆ ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋นŒ๋“œํ•œ ๋‹ค์Œ ๊ฒฝ์Ÿ ์šด์˜ ์ฒด์ œ์—์„œ ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ Microsoft/Windows์— ๋‹ฌ๋ ค ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋งž์•„์š”... ์ œ ์ƒ๊ฐ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งํ•˜๊ณ  ์žˆ๋Š” ์š”์ ์€ ์ด๊ฒƒ์ด ์š”์ฆ˜, ํŠนํžˆ ์ƒˆ๋กœ์šด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•˜๋Š” ๋งฅ๋ฝ์—์„œ ์•ฝ๊ฐ„ ํ›„์ง„์ ์ด๊ฑฐ๋‚˜ ๋‘”๊ฐํ•ด ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ์žฅ์˜ ์ž‘์€ %์— ๋ถˆ๊ณผํ•  ๋•Œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ Windows ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ถ•ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์ž๋ณธ์˜ ์ข‹์€ ์‚ฌ์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

์ œ๊ฐ€ ํ•˜๋Š” ๋ง์ด ๋ฐ”๋กœ...

์˜ˆ๋ฅผ ๋“ค์–ด, Win10(WPF ๋ฐ UWP)๊ณผ OSX ๋ชจ๋‘์—์„œ ๋ฐ์Šคํฌํ†ฑ์šฉ ํ”Œ๋Ÿฌํ„ฐ ์ž„๋ฒ ๋”๊ฐ€ ์ถœ์‹œ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ๋“ค์€ ํ”Œ๋Ÿฌํ„ฐ ๋Ÿฐํƒ€์ž„์— ์˜ํ•ด 100% ๊ด€๋ฆฌ๋˜์ง€๋งŒ, ์œˆ๋„์šฐ ๊ด€๋ฆฌ์™€ Graphics ํฌ์ธํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด (์˜ˆ๋ฅผ ๋“ค์–ด) WPF/UWP๋งŒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ์—”์ง„์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค ...

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

๋‚ด๊ฐ€ ๋งํ•˜๋Š”๊ฑฐ์•ผ ์ด์œ ์ž…๋‹ˆ๋‹ค WinUI ๋ฅผ ์ด์šฉํ•˜์—ฌ UWP: The empire strikes back ์žฅ๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„.

MSFT๋Š” ํ”Œ๋žซํผ ๊ฐ„, ๊ฐœ๋ฐฉ์„ฑ, ์ด์‹์„ฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .Net Core, Blazor ๋“ฑ์—์„œ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ... Reinvent UWP/XAML์€ ์•„๋ฌด๋ฐ๋„ ๊ฐ€์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” XAML์ด UI๋ฅผ "์„ค๋ช…"(๋˜๋Š” ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด ๋งํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„ ์–ธ)ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์˜๋ฏธ์—์„œ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด ์ข‹์€ ์ž ์žฌ๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. "์—”์ง„"์€ ์—ฌ๊ธฐ์—์„œ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•œ ๋‹ค์Œ ๋ Œ๋” ๋ช…๋ น์„ ๊ธฐ๋ณธ ํ”Œ๋žซํผ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

MSFT๊ฐ€ ์ตœ๊ทผ Chromium์„ Edge์˜ ํ•ต์‹ฌ์œผ๋กœ ์‚ฌ์šฉํ•œ ๊ฒƒ์ฒ˜๋Ÿผ WinUI(๋˜๋Š” ์ด๋ฆ„์ด ๋ฌด์—‡์ด๋“  ๊ฐ„์—)๋Š” GL, DX, Vulkan, Software Rendering, FB ๋“ฑ์— ๋Œ€ํ•œ ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ Skia๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค๋ฅธ ํ”Œ๋žซํผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์—„์ฒญ๋‚œ ์ž ์žฌ๋ ฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„...

@galvesribeiro ,

Flutter๋ฅผ ๋ณด์„ธ์š”... ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋ฌด์—‡์ด๋“  ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ์—”์ง„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์—”์ง„ ๊ด€๋ฆฌ ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Dart์—์„œ ์™„์ „ํžˆ ๊ตฌํ˜„๋˜๊ณ  ํ”ฝ์…€ ์ถฉ์‹ค๋„๋กœ ํ‘œํ˜„(๊ทธ๋ฆฌ๊ธฐ/๋ Œ๋”๋ง)ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Material.io ๋ฐ Apple์˜ Cupertino์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ”Œ๋žซํผ ๋ฐ ๋””์ž์ธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. Apple์ด macOS์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ถœ์‹œํ•˜๊ณ  UI ์—…๋ฐ์ดํŠธ(์•„๋งˆ๋„ ๋ฒ„ํŠผ ๋ชจ์„œ๋ฆฌ ๋ฐ˜๊ฒฝ ๋ณ€๊ฒฝ ๋˜๋Š” ๋ฐฐ๊ฒฝ ๊ทธ๋ผ๋””์–ธํŠธ ๋ณ€๊ฒฝ ๋“ฑ)๋ฅผ ํ•˜์ž๋งˆ์ž Flutter ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ์™€ ๋‹ฌ๋ฆฌ ๊ณ„์† ์ด์ „ OS์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒƒ์ด ๋ฌด๋ฃŒ๋กœ ํ˜œํƒ์„ ๋ฐ›์„์ง€ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

@MarkIngramUK ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ํŒ€์˜ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

Xamarin ํŒ€์ด 0+1์ผ์งธ๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ด ํŒ€๋„ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Google ํŒ€๋„ ๊ทธ๋ ‡๊ฒŒํ•ฉ๋‹ˆ๋‹ค ...

"๋„ค์ดํ‹ฐ๋ธŒ" ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ž˜ํผ(๋ Œ๋”๋ผ๊ณ ๋„ ํ•จ)์™€ ๊ฐ™์€ Xamarin ์„ธ๊ณ„๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ปจํŠธ๋กค์— ๋Œ€ํ•œ C# ๋ฐ”์ธ๋”ฉ(Xamarin์ฒ˜๋Ÿผ)์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค... Flutter์—์„œ์™€ ๊ฐ™์€ ์ „์ฒด UI ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...

๊ธฐ๋ก์„ ์œ„ํ•ด ์•„๋ฌด๋„ ๋ชจ๋“  ํ”Œ๋žซํผ์— ๋Œ€ํ•ด "๊ธฐ๋ณธ" ํ…Œ๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ชจ๋‘ ๊ฐ ํ”Œ๋žซํผ์˜ ๋””์ž์ธ ์–ธ์–ด ์œ„์— ๊ณ ์œ ํ•œ UX๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํ•ญ์ƒ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ณด์ด๋Š” ๊ฒƒ์ด ๊ฑฑ์ •๋œ๋‹ค๋ฉด ์•ฑ์— ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ข‹์€ ์ฒญ์ค‘์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Œ...

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. WinUI๋Š” Win32๋ฅผ ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์†”๋ฃจ์…˜์„ ์š”๊ตฌํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋Š” ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ๋Š” ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Flutter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ "ํ…Œ๋งˆ"๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Win10 PC์—์„œ Cupertino๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฐ ์˜ˆ๋Š” ๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ์ž…๋‹ˆ๋‹ค. ์ปจํŠธ๋กค ์„ธํŠธ๊ฐ€ ์•„๋‹Œ ๋””์ž์ธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์–ด๋””์—์„œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ... Android์™€ ๊ฐ™์€ ์ผ๋ถ€ ํ”Œ๋žซํผ์—๋Š”์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ๋ณธ ์ปจํŠธ๋กค์ด ์žˆ์Šต๋‹ˆ๋‹ค ...

@MarkIngramUK

WinUI๊ฐ€ ๋‹จ์ˆœํžˆ Win32๋ฅผ ๋Œ€์ฒดํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ์ด์œ ๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด UWP์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์— ๋–จ์–ด์งˆ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค...

@MarkIngramUK WinUI ์ž์ฒด๋Š” C#, WinRT API, Win32 ABI, C++, F#, VB, .NET Core๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด Windows์šฉ ํ†ตํ•ฉ UI๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

WinUI 3.0์—๋Š” Windows OS์—์„œ ๋ชจ๋“  ์ฝ”๋“œ์™€ XAML ๋ Œ๋”๋ง์„ ๋“ค์–ด ์˜ฌ๋ ค OS ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ์™€ ๋…๋ฆฝ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋งŒ๋“ค๊ณ  ์˜คํ”ˆ ์†Œ์Šค๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์„ ๋“ค์–ด ์˜ฌ๋ฆฌ๊ณ  ์žฌํฌ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ณต์ค‘์ž…๋‹ˆ๋‹ค. Microsoft ๋‚ด๋ถ€ ์ง์›๋งŒ์ด ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. XAML์— ๋Œ€ํ•œ ํ–ฅํ›„ ๊ต์ฐจ ํ”Œ๋žซํผ ์ง€์›์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Windows์—์„œ XAML์„ ์ œ๊ฑฐํ•  ๋•Œ ํ–ฅํ›„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•ฝ๊ฐ„๋งŒ ์ƒ๊ฐํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

.NET Core๋Š” ์ด๋ฏธ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด๋ฏธ ์–‘๋„ ๊ฐ€๋Šฅํ•œ C# ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด์ œ iOS/macOS/Android/Linux(๋ฐ ํ–ฅํ›„ ์ œ๊ณต๋  ์ˆ˜ ์žˆ์Œ)์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ XAML ๋ฐ UI ๋ฐ ์ปจํŠธ๋กค๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ WinUI 3.0์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ์™€ ๋…ธ๋ ฅ๊ณผ ๊ฐ€์žฅ ํ™•์‹คํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

@jesbis @terrajobst @jevansaks

๋ฐ์Šคํฌํ†ฑ, ๋ชจ๋ฐ”์ผ(Droid, iOS) ๋ฐ ์›น์—์„œ ๋ Œ๋”๋ง๋˜๋Š” UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ .NET Core๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ Microsoft์˜ ๊ณ„ํš์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ด์— ๋Œ€ํ•œ ๋ถˆํ™•์‹ค์„ฑ์€ ์˜ค๋žซ๋™์•ˆ ์ง€์†๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค.

@weitzhandler , ๊ทธ๋“ค์€ ์ด๋ฏธ ๋‹ค์Œ ๋‹จ๋ฝ๊ณผ ํ•จ๊ป˜ ๋กœ๋“œ๋งต์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ๋ฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ Windows ๋Œ€์ƒ
WinUI 3์€ ๋นŒ๋“œํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ๋Š” WinUI 3์—์„œ ์ƒˆ๋กœ์šด ๊ณ ์„ฑ๋Šฅ C++ React Native Windows ๊ตฌํ˜„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

๊ฐ•์กฐ๋œ ๋ถ€๋ถ„์ธ "to build on"์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ทธ ์œ„์— ๊ตฌ์ถ•๋˜๋Š” Windows๊ฐ€ ๋จผ์ € ๋  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ž ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ...

/me keep working on FluSharp

ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ชฉ์ด ๋ง๋ผ @MarkIngramUK , ์šฐ๋ฆฌ์˜ ์˜ˆ์ƒ์„ ์šฉ์„œํ•˜์‹ญ์‹œ์˜ค. ๐Ÿ˜‚

๋‹ค์Œ ๋‹จ๋ฝ์œผ๋กœ

๋งŽ์€ ๋ง์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. C# ๋ฐ .NET ๊ฐœ๋ฐœ์„ xplat์œผ๋กœ ๋งŒ๋“ค๋ ค๋Š” MS์˜ ๋ช…ํ™•ํ•œ ์˜๋„๋Š” ๋ฐํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์‹์„ฑ์„ ์›ํ•œ๋‹ค๋ฉด HTML JS ๋ฐ CSS shi{๊ฐ€ C#๋ณด๋‹ค ๋” ๋‚˜์€ ์žฅ๋น„๋ผ๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ Xamarin ๋ฐ Xamarin Forms๋Š” Windows ์™ธ๋ถ€์—์„œ C# ๋ฐ .NET Core ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Microsoft์˜ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

Windows์šฉ React Native๋Š” Javascript ์ฝ”๋“œ ๋ฐ ๊ธฐ๋ณธ UI(WinUI 3.0 XAML ์‚ฌ์šฉ)์šฉ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ Microsoft๋Š” WinUI 3.0์˜ XAML์„ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ๊ณ„ํš์„ ๋ฐœํ‘œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

WinUI ํ”„๋กœ์ ํŠธ๋Š” ๋‹จ์ผ ์ตœ์‹  XAML ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ Win32, WPF, MFC, UWP, .NET Core ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„์—๋Š” macOS, iOS, Android ๋“ฑ๊ณผ ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ WinUI 3.0์šฉ์œผ๋กœ ์ž‘์„ฑ๋œ XAML์„ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ์ž‘์—…์ด ์ง„ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์•„์ง๊นŒ์ง€๋Š” ์˜์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ WinUI 3.0 ์ž‘์—…์ด ์‹œ์ž‘๋˜๋ฉด ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ–ฅํ›„ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ถ๊ทน์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๊ต์ฐจ ํ”Œ๋žซํผ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ Microsoft๊ฐ€ ์•„๋‹ˆ๋ผ ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

.NET์˜ ๋นจ๊ฐ„ ๋จธ๋ฆฌ ์˜๋ถ“์ž์‹์ธ F#์„ ์ผ๋ฅ˜ ์‹œ๋ฏผ์œผ๋กœ ๋งŒ๋“ค ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ๋žŒ๋“ค์€ ๋Œ€๋‹ค์ˆ˜์˜ .NET ๊ฐœ๋ฐœ์ž๊ฐ€ 10ํ”ผํŠธ ๊ธฐ๋‘ฅ์œผ๋กœ F#์„ ๋งŒ์ง€์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ๊ถ๊ธˆํ•ดํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ Xamarin ๋ฐ Xamarin Forms๋Š” Windows ์™ธ๋ถ€์—์„œ C# ๋ฐ .NET Core ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Microsoft์˜ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

์˜ˆ, Xamarin.Forms๋Š” macOS, GTK, UWP ๋ฐ WPF๋กœ ์ด์‹๋˜๊ณ  ์ž‘์—…์˜ ๋ชจ๋“  ๊ณณ์—์„œ ๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ์ด ์ ์šฉ๋˜์–ด ์‚ฌ์‹ค์ƒ .NET UI Framework๊ฐ€ ๋˜์ง€๋งŒ ๋„ˆ๋ฌด ๋Š๋ฆฌ๊ณ  ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Microsoft๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž์— ๋Œ€ํ•ด. ๋ฌธ์ œ ๋ชฉ๋ก๋งŒ ๋ณด์„ธ์š”! ๋ณธ๊ฒฉ์ ์ธ ๊ฐœ๋ฐœ์ด ์‹œ์ž‘๋˜๋ฉด ๋ฒ„๊ทธ๊ฐ€ ์ขŒ์šฐ๋กœ ๊ฐ•ํƒ€๋ฉ๋‹ˆ๋‹ค. WinUI๋ฅผ ํ†ตํ•ด ๋งˆ์นจ๋‚ด ๋” ๋‚˜์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์žฌ: F#

๋” ๋‚˜์€ F# ์ง€์›์ด๋‚˜ ์ƒˆ๋กœ์šด ๋งˆํฌ์—… ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ์ƒˆ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์—ด์–ด ๋ณ„๋„๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค!

์˜ˆ, ๋ณ„๋„๋กœ ์ถ”์ ๋˜๊ณ  ๋‹ค์‹œ ๋ฌด์‹œ๋˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ F#์ž…๋‹ˆ๋‹ค. UWP์™€ .NET Native๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ๋‘˜ ๋‹ค F#์„ ์—ผ๋‘์— ๋‘์ง€ ์•Š์•˜์œผ๋ฉฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ „์ฒด์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ํŒŒ์•…ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™„ 4๋…„์ด ์ง€๋‚œ ํ›„์—๋„ F#์€ ์—ฌ์ „ํžˆ โ€‹โ€‹.NET Native์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

F# ์ œ์•ˆ/์งˆ๋ฌธ์— ๋Œ€ํ•ด ์ „์šฉ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/microsoft/microsoft-ui-xaml/issues/740

์ž์œ ๋กญ๊ฒŒ F# ํ† ๋ก ์„ ์ง„ํ–‰ํ•˜์„ธ์š”.

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ ˆ๋Œ€ ๋ฌด์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์šฉ ๋ฌธ์ œ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์ถ”์ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๋ฟ์ž…๋‹ˆ๋‹ค.
ํŒ€์€ 3.0 ์ด์ƒ์„ ์œ„ํ•œ ๋กœ๋“œ๋งต์— ์–ด๋–ป๊ฒŒ ๋งž์ถœ ์ˆ˜ ์žˆ๋Š”์ง€ ๋…ผ์˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ์ด ์ง„ํ–‰๋˜๋ฉด ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

RE: ํ”Œ๋žซํผ ๊ฐ„ UI:

์ง€๊ธˆ๊นŒ์ง€ ์ œ๊ธฐ๋œ ์š”์ ๊ณผ .NET ๋ฐ Xaml์— ๋Œ€ํ•œ ์—ด์ •์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
๋ชจ๋“  ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋“ฃ๊ณ  ์žˆ์œผ๋ฉฐ ์ง„ํ–‰ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ƒ๊ฐ๊ณผ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ณต์œ ํ•  ๊ฒƒ์ž„์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋กœ๋“œ๋งต๊ณผ ๋‚˜์˜จ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์„ ์žฌํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด:

WinUI๋Š” Windows์šฉ ๊ธฐ๋ณธ UI ํ”Œ๋žซํผ(.NET๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ์•ฑ ํฌํ•จ)์ด๋ฉฐ ์ดˆ๊ธฐ 3.0 ๋ฒ„์ „์—์„œ๋Š” ์ฃผ๋กœ OS์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋” ๋น ๋ฅธ ๋ฆด๋ฆฌ์Šค์—์„œ ์˜คํ”ˆ ์†Œ์Šค ๊ฐœ๋ฐœ์„ ์ค€๋น„ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๊ธฐ. ์šฐ๋ฆฌ๋Š” ๋ฒ”์œ„๊ฐ€ ์˜ฌํ•ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์šฐ๋ฆฌ์˜ ๋‹ค๋ฅธ ๋‹จ๊ธฐ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๋Š” WinUI๊ฐ€ Windows์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ํ”Œ๋žซํผ์˜ ๊ธฐ๋ณธ ๋Œ€์ƒ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๋Š” react-native-windows - ๊ณ ์„ฑ๋Šฅ C++ React Native ๊ตฌํ˜„๋„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Windows์šฉ - WinUI ์‚ฌ์šฉ ๋ฐ WinUI ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜์—ฌ React Native ์•ฑ์—์„œ ๊ธฐ๋ณธ UI ๋ณด๊ธฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™„์ „ ์ •์งํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” 2006๋…„์— WinForms์— ์ž‘์„ฑํ•œ ๊ธฐ๋ณธ Windows ๋ฐ์Šคํฌํƒ‘ ์•ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ง€๊ธˆ๋„ ์˜จ๋ผ์ธ์—์„œ ํŒ๋งคํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์•ฑ์„ WPF, UWP๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜ ๋…์ ์ ์ธ Windows UI ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Windows ๋ฐ๋ชจ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋งค๋ ฅ์ ์ธ์ง€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด ์•ฑ์„ ๋‹ค์‹œ ์ž‘์—…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ๋‹ค๋ฉด ๋‹ค์Œ ์ฃผ์š” ๋ฒ„์ „์€ MacOS, Linux ๋ฐ Windows์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ข…์˜ ๊ต์ฐจ ํ”Œ๋žซํผ ๊ตฌํ˜„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ๋กœ์„œ๋Š” Blazor + .NET Core + Electron์ฒ˜๋Ÿผ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Mike-EEE๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ์ข‹์€ ์ ์„ ์ง€์ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. C# ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ฒญ์ค‘์—๊ฒŒ ๋‹ค๊ฐ€๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” UX/ํ”Œ๋žซํผ์€ ์ œ๊ฐ€ ์„ ํƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์€ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

Microsoft๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์กด ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜์—ฌ ์•ฑ์œผ๋กœ ๋” ๋งŽ์€ ์ฒญ์ค‘์—๊ฒŒ ๋‹ค๊ฐ€๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์Šน๋ฆฌํ•˜๋Š” ์ „๋žต์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๊ฒŒ์ž„์—์„œ Microsoft๋ฅผ ์œ ์ง€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๊ฒฝ์ œํ•™์—์„œ ์ƒํ’ˆ์€ ์™„์ „ํ•˜๊ฑฐ๋‚˜ ์‹ค์งˆ์ ์ธ ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์ œ์  ์žฌํ™” ๋˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. https://en.wikipedia.org/wiki/Commodity

Microsoft๋Š” ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ด์•ผ๊ธฐ์˜ ์ผ๋ถ€๊ฐ€ ๋˜๊ธฐ๋ฅผ ์›ํ•˜๋Š”๊ฐ€? ์•„๋‹ˆ๋ฉด Microsoft๋Š” ์ ์  ๋” ์ ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” UX ์Šคํƒ์˜ ๋ฌด๋ค์— ํ•ฉ๋ฅ˜ํ•˜๊ฒŒ ๋  ์ƒˆ๋กœ์šด Windows ์ „์šฉ UX ์Šคํƒ์— ์ˆ˜๋ฐฑ๋งŒ ๋‹ฌ๋Ÿฌ๋ฅผ ํˆฌ์žํ•ฉ๋‹ˆ๊นŒ?


์ด ํ”„๋กœ์ ํŠธ๋Š” Windows ๋‚ด๋ถ€๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ’๋ถ€ํ•œ ์ง€์‹์„ ๊ฐ€์ง„ ํŒ€์ด ์†Œ์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Mac ๋˜๋Š” Linux์—์„œ ๋™์ผํ•œ ์ •๋„๋กœ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์€ ๊ทธ๋“ค์ด ์ฃผ์˜๋ฅผ ์‚ฐ๋งŒํ•˜๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ํ•˜๊ธฐ ํž˜๋“  ํฌ์ง€์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹œ๋Œ€๊ฐ€ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚ ์˜ ์„ธ์ƒ์€ 1995๋…„์˜ ์„ธ์ƒ๊ณผ ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋ณด๊ธฐ์—๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Windows ์ด์ƒ์œผ๋กœ ์ง€์‹์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ์‚ฌ๋žŒ์„ ๊ณ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜๋Š” ํ•ด๋‹น ํŒ€์˜ ์ง€์‹์„ ์‚ฌ์šฉํ•˜์—ฌ Windows์—์„œ ๋” ์ž˜ ์‹คํ–‰๋˜๋„๋ก ํ”Œ๋žซํผ ๊ฐ„ UI ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ํ˜ธํ™˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” Windows ๋‚ด๋ถ€์˜ UX ๋ฐฐ๊ด€์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

WSL์ด Windows์—์„œ Linux๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ.

  • ํŒ€์˜ ์ง€์‹์„ ํ™œ์šฉํ•˜์—ฌ GTK๋ฅผ 200๋ฐฐ ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
  • ํŒ€์˜ ์ง€์‹์„ ์‚ฌ์šฉํ•˜์—ฌ QT ์•ฑ์„ 200๋ฐฐ ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
  • ํŒ€์˜ ์ง€์‹์„ ์‚ฌ์šฉํ•˜์—ฌ Electron ์•ฑ์„ ๋‹ค๋ฅธ ์–ด๋–ค OS๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋ƒฅ ๋‚ด 2 ์„ผํŠธ. :๋ˆ ๊ฐ€๋ฐฉ:

:horse_racing: :cowboy_hat_face: Lil Nas X - Old Town Road (๊ณต์‹ ์˜ํ™”) ft. Billy Ray Cyrus

@bchavez

Windows ์ „์šฉ์˜ ์ƒˆ๋กœ์šด UX ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“œ๋Š” ์ด ์Šต๊ด€์„ ๊นจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

-- ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ. Windows ์ž์ฒด์˜ ๋‚ด๋ถ€ XAML ์ด์‹์„ฑ์„ ๊นจ๋œจ๋ฆฌ๋Š” ์Šต๊ด€์กฐ์ฐจ๋„. WPF, Siliverlight, UWP ๋ชจ๋‘ ์ž์ฒด ํฌํฌ... ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์•ž์œผ๋กœ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์ผ๋ฐ˜์ ์ธ Windows ๊ฐœ๋ฐœ ๋„๊ตฌ์—์„œ ์ ์  ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์„ ๋ฐ€์–ด๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Windows ๊ฐœ๋ฐœ ๋„๊ตฌ์˜ ํ‘ธ์‹œ๋ฐฑ์ด ๋งŽ์„์ˆ˜๋ก C#์˜ ๊ด€๋ จ์„ฑ์ด ์ ์  ์ค„์–ด๋“ค๊ณ  ๋‚˜์—๊ฒŒ ์ค‘์š”ํ•œ ๊ฒƒ์€ C#์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

RE: ํ”Œ๋žซํผ ๊ฐ„ UI:

... WinUI๋Š” Windows์šฉ ๊ธฐ๋ณธ UI ํ”Œ๋žซํผ(_ .NET์ด ์•„๋‹Œ ๊ธฐ๋ณธ ์•ฑ ํฌํ•จ _)์ด๋ฉฐ ์ดˆ๊ธฐ 3.0 ๋ฒ„์ „์˜ ๊ฒฝ์šฐ ์ฃผ๋กœ OS์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์˜คํ”ˆ ์†Œ์Šค์— ๋งž๊ฒŒ ์ค€๋น„ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ๋” ๋น ๋ฅธ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ. ์šฐ๋ฆฌ๋Š” ๋ฒ”์œ„๊ฐ€ ์˜ฌํ•ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Fluent/FabricWeb ์ปจํŠธ๋กค ์Šคํƒ€์ผ๊ณผ ๋” ์ž˜ ์ผ์น˜ํ•˜๋„๋ก WinUI 3.0๊ณผ ํ•จ๊ป˜ ์‹คํ–‰๋˜๋Š” WinForms, MFC, WPF ์ปจํŠธ๋กค์˜ ์‹œ๊ฐ์  ๋ชจ์–‘์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์•„์ด๋””์–ด์— +1์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ๋‹ค๋ฅธ ์ปจํŠธ๋กค ํฌ๊ธฐ(WinRT XAML์ด ์•„๋‹Œ ๋ชจ๋“  ๊ฒƒ์€ UWP ์ปจํŠธ๋กค์˜ Compact ๋ฒ„์ „๊ณผ ํ•ด๋‹น ๋ฉ”ํŠธ๋ฆญ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•จ)๊ฐ€ ์žˆ์ง€๋งŒ ์ผ๊ด€์„ฑ ์žˆ๊ณ  ์ผ๊ด€๋œ ์„ธ๋ จ๋œ ๋ชจ์–‘์ž…๋‹ˆ๋‹ค.

WinForms์— WinUI 3.0 ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ปจํŠธ๋กค์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

WinUI 3.0 WPF ์•ฑ์€ Fluent.Light.xaml ๋˜๋Š” Fluent.Dark.xaml ์ œ์–ด ํ…Œ๋งˆ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@weitzhandler ๋‹น์‹ ์˜ ์‹ฌ์ •์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ด ํฌ๋กœ์Šค ํ”Œ๋žซํผ GUI๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JavaScript ๋ฐ ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๋งŒ์งˆ ํ•„์š”๊ฐ€ ์—†๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ „์ž, ๊ฐ๋„, ๋‹คํŠธ, ํ”Œ๋Ÿฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์ƒ๊ฐ์กฐ์ฐจ ํ•˜๊ธฐ ์‹ซ์Šต๋‹ˆ๋‹ค.
Universal XAML์˜ ๊ฟˆ์„ ์‹คํ˜„ํ•  .NET 5๋ฅผ ํ†ตํ•ด ๊ณง ์†”๋ฃจ์…˜์„ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. Microsoft XAML์€ WIN, ์›น, ๋ชจ๋ฐ”์ผ, ๋ฐ์Šคํฌํ†ฑ ๋ฐ IoT๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
Silverlight๋Š” ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ๊ฑฐ์˜ ๊ทธ๋ ‡๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค .

Windows ์ „์šฉ์˜ ์ƒˆ๋กœ์šด UX ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“œ๋Š” ์ด ์Šต๊ด€์„ ๊นจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WinUI 3.0์€ ํ”Œ๋žซํผ ๊ฐ„ ์ง€์›์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ์†์ƒ๋จ) ๋ฆด๋ฆฌ์Šค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WinUI๋Š” Windows์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆ˜์ค€์˜ UI ํ”„๋ ˆ์ž„์›Œํฌ์—ฌ์•ผ ํ•˜๋ฉฐ, ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ธฐ๋Šฅ์„ ์›ํ•˜๋ฉด ๊ทธ ์œ„์— ๋นŒ๋“œ(๋˜๋Š” React Native, Xamarin ๋“ฑ ์‚ฌ์šฉ)ํ•ฉ๋‹ˆ๋‹ค.

Windows ์ „์šฉ์˜ ์ƒˆ๋กœ์šด UX ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“œ๋Š” ์ด ์Šต๊ด€์„ ๊นจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WinUI 3.0์œผ๋กœ ์ƒˆ๋กœ์šด UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹˜์„ ๋ถ„๋ช…ํžˆ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์ดˆ๊ธฐ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ์กด ์ตœ์‹  ๊ธฐ๋ณธ ๊ธฐ์ˆ (Windows 10 Xaml UI ๋ฐ ํ•ฉ์„ฑ๊ธฐ)์„ OS์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ธฐ์กด ์•ฑ ๋ชจ๋ธ(win32 ๋ฐ UWP), ์–ธ์–ด, ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ(์„ฌ์„ ํ†ตํ•ด) ๋ฐ Windows ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๊ธฐ์กด ๊ธฐ๋ณธ ๊ธฐ์ˆ (Windows 10 Xaml UI ๋ฐ ํ•ฉ์„ฑ๊ธฐ) ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์žฅ๋ฒฝ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

  • ์—”์ง€๋‹ˆ์–ด๋ง ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜คํ”ˆ ์†Œ์Šค๋กœ ์—…๋ฐ์ดํŠธ

WinUI 3.0์€ ํ”Œ๋žซํผ ๊ฐ„ ์ง€์›์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ์†์ƒ๋จ) ๋ฆด๋ฆฌ์Šค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ด... ์ •๋ง ๊ทธ๋ ‡๊ฒŒ ๋ฏฟ๋Š”๋‹ค๋ฉด Flutter์™€ ๊ฐ™์€ ์„ฑ๊ณต์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค...

๋‚˜๋Š” Dart๋„ ์ข‹์•„ํ•˜์ง€ ์•Š์ง€๋งŒ ์ง„ํ™”ํ•˜๊ณ  ์žˆ๊ณ  ์ •๋ง ๋น ๋ฅด๊ฒŒ ๊ฒฌ์ธ๋ ฅ์„ ์–ป๊ณ  ์žˆ๋Š” ๊ฝค ํ•˜๊ฐ•ํ•˜๋Š” ์ œํ’ˆ์„ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

WinUI๊ฐ€ ๊ทธ๋ƒฅ ์œˆ๋„์šฐ์šฉ์ด ๋  ๊ฒƒ ๊ฐ™์•„์„œ ๋‹ต๋‹ตํ•˜๋„ค์š”...

.Net์—๋Š” Blazor(ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ์ธก)๊ฐ€ ์žˆ๋Š” ์›น์šฉ์œผ๋กœ ์–ป์€ ๊ฒƒ์ฒ˜๋Ÿผ .Net Core ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ธฐ๋Šฅ์˜ ์šฐ์ˆ˜์„ฑ๊ณผ ์ผ์น˜ํ•˜๋Š” UI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋‹น์‹ ์˜ ํŒ€์ด @jesbis์—์„œ ๋ฌด์—‡์„ ํ•˜๋ ค๊ณ  ํ•˜๋Š”์ง€ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค... ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด .Net/C++/UWP/MFC/Windows์—์„œ UI๋ฅผ ๋ณด๋Š” ๋ฐ ์ง€์ณค์Šต๋‹ˆ๋‹ค. ์ „ ์„ธ๊ณ„๊ฐ€ Windows์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” _silo_' (ofc Apple ๋ฐ OSX ์ œ์™ธ) ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋” ๋‚˜์€ ๊ต์ฐจ ํ”Œ๋žซํผ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. React์™€ Rect-Native์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ(์ฐธ๊ณ ๋กœ ์ €๋Š” ๋‘˜ ๋‹ค ์ข‹์•„ํ•˜์ง€ ์•Š๊ณ  ์ง„ํ™”ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค).

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์€ Avalonia ๋˜๋Š” Uno์™€ ๊ฐ™์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฃผ๋„ ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์™€ ๋ช…๋ฐฑํ•œ ์ด์œ ๋กœ ๋งค์šฐ ๋Š๋ฆฌ๊ฒŒ ๋ฐœ์ „ํ•˜๋Š” ๊ธฐํƒ€ ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ: ๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ•œ FluSharp)์ž…๋‹ˆ๋‹ค...

์ œ ์ œ์•ˆ์€ XAML๊ณผ ํ•ฉ์„ฑ๊ธฐ๋ฅผ Windows ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๊บผ๋‚ด์„œ Windows ์ „์šฉ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ€์ ธ์™€์„œ ์ ์ ˆํ•œ ์ถ”์ƒํ™”๋ฅผ ๋งŒ๋“ค์–ด ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” Windows ์ „์šฉ์ด์—ˆ์ง€๋งŒ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฃผ๋„์˜ ๋…ธ๋ ฅ์œผ๋กœ Linux, OSX ๋ฐ ARM ์žฅ์น˜์—์„œ๋„ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” .Net Core์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ...

(๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ์†์ƒ๋จ) ํ”Œ๋žซํผ ๊ฐ„ ์ง€์›

ํ”Œ๋žซํผ ๊ฐ„ ๋””์ž์ธ์ด UWP์˜ XAML UI์™€ Fluent Design์˜ ํ•ต์‹ฌ ์ธก๋ฉด์ด๊ณ  ํ•ญ์ƒ ๊ทธ๋žฌ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Windows ๋ฒ„์ „ ๊ฐ„์— ์‹œ๊ฐ์  ๋””์ž์ธ์ด ๋‹ค๋ฅธ ์ปจํŠธ๋กค์ด ๋ถ„๋ช…ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์›ํ™œํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด ์žฅ์น˜์˜ OS์™€ ์ผ์น˜ํ•˜๋Š” ๊ธฐ๋ณธ UI๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, Acrylic ๋ฐ Reveal์ด ์ปจํŠธ๋กค์— ๋‚ด์žฅ๋˜์–ด ์žˆ๊ณ , Pivots ๋ฐ NavigationViews์˜ ์•ก์„ผํŠธ ์ƒ‰์ƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์€ Creator์˜ ์—…๋ฐ์ดํŠธ์—๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์ง€๋งŒ FCU ์ด์ƒ์—์„œ๋Š” ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ์™„์ „ํžˆ ๋‹ค๋ฅธ OS์—์„œ UI๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ์—๋Š” ํ›จ์”ฌ ๋” ๋ณต์žกํ•œ ๋ฐฐํ›„๊ฐ€ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ UI๋ฅผ ๋””์ž์ธํ•˜๋Š” ๊ด€์ ์—์„œ ๋ณด๋ฉด ๊ทธ ์–ด๋Š ๋•Œ๋ณด๋‹ค ์ทจํ•ด์•ผ ํ•  ์ƒˆ๋กœ์šด ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. UWP ๋ฐ WinUI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


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

๊ทธ๋งŒํผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋ฒ”์œ„๋Š” ์—„์ฒญ๋‚ฉ๋‹ˆ๋‹ค. ๋‹จ๊ธฐ ๊ณ„ํš์ด ์•„๋‹ˆ๋ผ ์ตœ์ข… ๊ณ„ํš์ด๋ผ๋ฉด ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํˆฌ๋ช…์„ฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํ•œ ๋ฏธ๋ž˜ ์—†์ด ํ”Œ๋žซํผ์„ ์ง€์›ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.


MS๊ฐ€ ์ „๋ฐ˜์ ์œผ๋กœ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์Œ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. Fluent Design(ํ˜„์žฌ iOS, Android ๋ฐ ์›น์— ๋Œ€ํ•œ ์˜ˆ์ œ๊ฐ€ ์žˆ์Œ), ๋‹ค๋ฅธ ํ”Œ๋žซํผ์˜ ์ˆ˜๋งŽ์€ MS ์ œ์ž‘ ์•ฑ์—์„œ ์ด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณต์œ  UI๋Š” ์ •๋ง ๊ทธ๋ƒฅ ํฐ ๋ˆ„๋ฝ๋œ ๋งํฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ์‹ค๋ง์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด MS์—์„œ ๋งŒ๋“  ๋ฒ”์šฉ ์•ฑ ํ”Œ๋žซํผ์˜ ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ง€์›์ด ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์™„๋ฒฝํ•œ ์†”๋ฃจ์…˜.

์š”์ ์€... material.io ๋ฐ Cupertino์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์šฐ๋ฆฌ๋Š” ์œ ์ฐฝํ•œ ๋””์ž์ธ ์–ธ์–ด๋ฅผ ์œ„ํ•ด flutter์— "ํ…Œ๋งˆ"๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Google์—์„œ ์ด๋ฏธ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ ๋†€๋ž์ง€ ์•Š์Šต๋‹ˆ๋‹ค!)...

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ์ง„์ •ํ•œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ UI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  Flutter์ฒ˜๋Ÿผ ์ž‘๋™ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ–ˆ์„ ๋•Œ์˜ ์š”์ ์ž…๋‹ˆ๋‹ค... ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ํƒ€ํ˜‘์ ์ด ์žˆ๋Š” ๊ณณ์„ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค...

@weitzhandler ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์šฉ HTML๋„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‚˜๋Š” React ๐Ÿ˜„์™€ ํ•จ๊ป˜ Electron์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ์—ด์ •์ ์ด์ง€ ์•Š๊ณ  ๋Œ€์‹  ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

์ €๋Š” WinUI 3.0์„ ์ •๋ง ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ƒˆ๋กœ์šด C++/WinRT Windows ๋ฐ์Šคํฌํ†ฑ ํ”„๋กœ์ ํŠธ์— ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  3.0 ์ดํ›„์˜ ๋‹ค์Œ ๋ฉ”์ด์ € ๋ฒ„์ „์—์„œ๋Š” (Flutter ๋Ÿฐํƒ€์ž„๊ณผ ๊ฐ™์€) WinUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ์ด์‹ ๊ฐ€๋Šฅํ•œ ๋Ÿฐํƒ€์ž„์ด ๋„์ž…๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ƒ๋‹น์ˆ˜์˜ LOB ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ฐ Photoshop๊ณผ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ GUI๋Š” ๊ฐ ํ”Œ๋žซํผ์—์„œ ๋™์ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ต์‹ฌ์€ ์„ฑ๋Šฅ ๋ฐ ์†Œ์Šค ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  xlang ํ”„๋กœ์ ํŠธ๋Š” ์ข‹์€ ์•„์ด๋””์–ด์ด๋ฉฐ ๋ฏธ๋ž˜์— ์ข‹์€ ์†Œ์‹์„ ์•ฝ์†ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์‚ฌ์šฉ์ž๋“ค์€ BUILD 2019 ์ดํ›„์— Win UI, Xamarin Form, UNO, Web Assembly๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด Scott Hunter์˜ ์ด์•ผ๊ธฐ๋ฅผ ๋“ฃ๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

Scott Hunter @.NET Rock ๊ณผ ํ•จ๊ป˜ํ•˜๋Š” .NET Core 3 ์ด์ƒ

Xamarin Forms(XAML)์™€ UNO(XAML)๋Š” ๋ชจ๋‘ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๋น„์ „์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. UNO์˜ ๊ฒฝ์šฐ(iOS, Android, ์›น ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ํ†ตํ•œ ์›น์šฉ XAML ์ถ”๊ฐ€).

UWP๋Š” ์›น, Android, iOS์™€ ๊ฐ™์€ Microsoft ์—์ฝ”์‹œ์Šคํ…œ์„ ๋„˜์–ด์„œ๋Š” ๋น„์ „ ์—†์ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ธ์ƒ์ ์ธ Fluent ๋””์ž์ธ ๋…ธ๋ ฅ์€ UWP์˜ ๋Š๋ฆฐ ์ฑ„ํƒ์œผ๋กœ ์ธํ•ด ๊ฑฐ์˜ ์ฐจ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@Mike-EE๊ฐ€ ์ง€์ ํ–ˆ๋“ฏ์ด droid์™€ iOS์—๋Š” 2~15์–ต~์ด ์žˆ๊ณ  Win10์—๋Š” 9์–ต์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ์ „ํžˆ WinForm ๋ฐ WPF์—์„œ UWP๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ๊บผ๋ฆฝ๋‹ˆ๋‹ค.

์™œ์š”? ์ƒ์—…์šฉ ๋ฐ Microsoft์˜ UWP ์ปจํŠธ๋กค์€ ์™„์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค !!!!! WinForm ๋ฐ WPF์™€ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ „ํ™˜์„ ๋•๊ธฐ ์œ„ํ•œ Microsoft์˜ ๋…ธ๋ ฅ์€ ์—†์Šต๋‹ˆ๋‹ค. XAML Island ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ winForm ๋ฐ WPF์—์„œ UWP๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ˆ„๋ฝ๋œ ๋ถ€๋ถ„์ด MICROSOFT์— BLIND SPOT ์ด ์žˆ๋Š” ํ•œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ˆ„๋ฝ๋œ UWP ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ œ Win UI๋ฅผ ์›น์šฉ React Native๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์ƒ๋‹นํ•œ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ???? WinForm ๋ฐ WPF์—์„œ UWP๋กœ์˜ ์ „ํ™˜์„ ์œ„ํ•ด ๋กœ๋น„ํ•  ์ˆ˜ ์žˆ๋„๋ก UWP์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ๋ˆ„๋ฝ๋œ Win UI ์ปจํŠธ๋กค์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌํ•œ ์ปจํŠธ๋กค ์ค‘ ํ•˜๋‚˜๊ฐ€ Diagram Control ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ง‘์•ฝ์  ๋น„์ฆˆ๋‹ˆ์Šค ์•ฑ์—๋Š” UWP์— ๋Œ€ํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

==> UWP UI๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํ•„์š”์„ฑ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ iOS, Android, ์›น๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์— Fluent Design ๋ธŒ๋žœ๋”ฉ์„ ์ „ํŒŒํ•˜๋Š” ๋ฐ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
==> ๋” ๋‚˜์€ 3D ๋ชจ๋ธ ์ œ์–ด ๋ฐ ๋‹ค์ด์–ด๊ทธ๋žจ ์ œ์–ด(2D/3D ๋ชจ๋‘) ์ œ๊ณต์— ์ง‘์ค‘ํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” HOLOLENS ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ 3D UI์˜ ๋ฏธ๋ž˜๋ฅผ ๋ณด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  BCL์ด Windows์˜ ๊ธฐ๋ณธ๊ณผ ๋ณ‘ํ•ฉ๋  ๋•Œ(์›น ์–ด์…ˆ๋ธ”๋ฆฌ ๋“ฑ์˜ ๊ฒฝ์šฐ) NET5๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” UWP๋ฅผ ์œ„ํ•œ 2d/3D Diagram Control ๊ณผ ๋‹จ์ˆœํžˆ ๋ชจ๋ธ์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณจ๊ฒฉ/์ •์  ์• ๋‹ˆ๋ฉ”์ด์…˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” 3D ๋ชจ๋ธ ์ œ์–ด ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@jesbis UWP์šฉ Win UI์˜ ์ด๋Ÿฌํ•œ USP(๊ณ ์œ ํ•œ ํŒ๋งค ํฌ์ธํŠธ)์— ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์„ ํˆฌ์ž…ํ•  ๊ฒƒ์„ ์ด‰๊ตฌํ•ฉ๋‹ˆ๋‹ค.

@weitzhandler

์ด ๋ฌธ์ œ๋Š” WinUI 3.0 ๋กœ๋“œ๋งต ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@jesbis ๋Š” ๋ช…ํ™•ํ•œ ์„ฑ๋ช…์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค .

WinUI๋Š” Windows์šฉ ๊ธฐ๋ณธ UI ํ”Œ๋žซํผ(.NET๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ์•ฑ ํฌํ•จ)์ด๋ฉฐ ์ดˆ๊ธฐ 3.0 ๋ฒ„์ „์—์„œ๋Š” ์ฃผ๋กœ OS์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋” ๋น ๋ฅธ ๋ฆด๋ฆฌ์Šค์—์„œ ์˜คํ”ˆ ์†Œ์Šค ๊ฐœ๋ฐœ์„ ์ค€๋น„ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๊ธฐ. ์šฐ๋ฆฌ๋Š” ๋ฒ”์œ„๊ฐ€ ์˜ฌํ•ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ ๋‘ ๊ฐœ์˜ ๋Œ“๊ธ€์€ ์ฃผ์ œ์— ๊ด€ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ 6๊ฐœ๋Š” ๋น„์ƒ์‚ฐ์ ์ด๋ฉฐ ๊ฒฝ๋ฉธ์ ์ธ ํ‘œํ˜„์ด๋ฉฐ Microsoft ์˜คํ”ˆ ์†Œ์Šค ํ–‰๋™ ๊ฐ•๋ น ์œ„๋ฐ˜์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Microsoft์™€์˜ ์ƒ์‚ฐ์ ์ด๊ณ  ์ „๋ฌธ์ ์ธ ๋Œ€ํ™”๋กœ ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// ๋‚˜๋Š” ํ•˜๋ฃจ ์ข…์ผ ์–ด๋–ค ๋‚จ์ž ๋ฒคํŠธ๋ฅผ ๋“ฃ๊ธฐ ์œ„ํ•ด ์ด ๋Œ€ํ™”๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” ๋‘ ๊ฐ€์ง€ ๋ณ„๋„์˜ ํ† ๋ก ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ํ›Œ๋ฅญํ•œ ์˜๊ฒฌ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด์šฉ์ด ์ด์ „์— ์–ธ๊ธ‰๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด๋งŒ ์ค„์ด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐ ์›น

.NET Core๋Š” ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์นจ๋‚ด ์šฐ๋ฆฌ๋Š” ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์™€ ๋ฉ‹์ง„ ์–ธ์–ด๋กœ ๋ชจ๋“  ํ”Œ๋žซํผ๊ณผ ์ ‘์ ์„ ๋ชฉํ‘œ๋กœ ์‚ผ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ˆ„๋ฝ๋œ ์œ ์ผํ•œ ๊ฒƒ์€ Blazor๋ฅผ ์ œ์™ธํ•œ UI ์Šคํƒ์ž…๋‹ˆ๋‹ค(HTML/CSS๋Š” ํ˜•ํŽธ์—†์ง€๋งŒ). ์ตœ๋Œ€์˜ ๋น„๊ต ๊ฐ€๋Šฅ์„ฑ์„ ์œ„ํ•ด ๋ฐ์Šคํฌํ†ฑ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์ผํ•œ ๊ธฐ์ˆ , ๋„๊ตฌ ๋ฐ ์–ธ์–ด(Xaml ๋ฐ C#)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ๋ฐ ๊ทธ ์ด์ƒ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Tbh, Silverlight๋Š” ๊ฑฐ๊ธฐ์—์„œ ํ›Œ๋ฅญํ•œ ์ผ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. WinUI์— ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•„์š”ํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜์‹ญ์‹œ์˜ค. ๊ธฐ๋ณธ์ ์œผ๋กœ .NET ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ Flutter์™€ ์›น์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Xamarin์ด ํ•ด๋‹น ํ”Œ๋žซํผ์ด ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๋ฉด Xaml์ด WinUI์™€ Xamarin์—์„œ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ์ •๋ ฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

WinUI

์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. Windows ํ”Œ๋žซํผ์—์„œ ๊ฐ€๋Šฅํ•œ ์ตœ๊ณ ์˜ ๊ฒฝํ—˜์„ ๋งŒ๋“ค๋ ค๋ฉด ํ•˜๋‚˜์˜ ๊ณตํ†ต Xaml ์Šคํƒ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ์ปจํŠธ๋กค ๋ฐ ๊ธฐ๋Šฅ ์ธก๋ฉด์—์„œ WPF์˜ ๋ˆ„๋ฝ๋œ ๊ฒฉ์ฐจ๊ฐ€ ์ฑ„์›Œ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HoloLens ๋ฐ ๊ทธ ์ด์ƒ

Lite๊ฐ€ ๋“ฑ์žฅํ•˜๊ณ  HoloLens์™€ ๊ฐ™์€ ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ์ƒˆ๋กœ์šด ํผ ํŒฉํ„ฐ๊ฐ€ ๋‚˜์˜ค๋ฉด UWP๊ฐ€ UI ์ธก๋ฉด์—์„œ ์ด์— ๋Œ€ํ•ด ์ค€๋น„๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ฃผ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ, HoloLens์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Unity๋ฅผ ์™„์ „ํžˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ 3D์šฉ์œผ๋กœ ์•ฑ์„ ์‹ค์ œ๋กœ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

WinUI๋Š” Xamarin๋ณด๋‹ค ํ›จ์”ฌ ์•ž์„œ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Microsoft Team์€ Xamarin 4.0์„ ๋ฐ€์–ด๋ƒ…๋‹ˆ๋‹ค...
์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ Xamarin์ด Cross Platform์˜ ๊ฐ€์žฅ ๋‚ฎ์€ ๋ช…์นญ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ SaaS์šฉ Native Apps์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Xamarin ์™ธ์— ๋ช‡ ๊ฐ€์ง€ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
1) UNO ํ”Œ๋žซํผ์„ ์ˆ˜์šฉํ•˜๊ณ  SkiaSharp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ๋ Œ๋”๋ง์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
2) @zezba9000 ๊ฒŒ์ž„ ์—”์ง„์ด ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ถˆ๊ฐ€์ง€๋ก ์  ๋ Œ๋”๋ง ๋ฐฑ์—”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์–ด๋Š์ •๋„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค....

๋‹ค๋ฅธ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์†”๋ฃจ์…˜๊ณผ ๋‹ฌ๋ฆฌ ๋‚ด๋ถ€์— ๋น„ ์˜คํ”ˆ ์†Œ์Šค ์ฝ”๋“œ ์ถ”์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— Microsoft๊ฐ€ WinUI๋ฅผ ๋” ๋งŽ์ด ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Xamarin, UNO์—๋Š” UNIX ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

์–ด์จŒ๋“  ํž˜์ด ๋‹น์‹ ๊ณผ ํ•จ๊ป˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ถ”์‹ : Github ์Šคํฐ์„œ๋Š” Microsoft์—์„œ ์ œ๊ณตํ•˜๋ฏ€๋กœ WPF/Winforms์˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํฌํฌ์— ๋Œ€ํ•ด ์ผ๋ถ€ ์ฃผ๋ชฉํ• ๋งŒํ•œ Mac/Linux ๊ฐœ๋ฐœ์ž๋ฅผ ํ›„์›ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

@jkoritzinsky , WinUI ํŒ€์ด WinUI 3.0 ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ์™€ ํ•จ๊ป˜ ์ฃผ์˜ํ•ด์•ผ ํ•  ํ•œ ๊ฐ€์ง€: .NET์— ํ”„๋กœ์ ์…˜๋œ ์œ ํ˜•์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด ํ”„๋กœ์ ์…˜์ด ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋” ์ด์ƒ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. ์œ ์ง€ ๊ฐ€๋Šฅํ•œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—). ๋‹ค์Œ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ณ„ํšํ•˜๋Š” ์œ ํ˜• ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. https://github.com/dotnet/coreclr/blob/master/src/inc/winrtprojectedtypes.h

์ด๋Ÿฌํ•œ ์œ ํ˜•์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์œ ํ˜•์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ์ฒด๋ฅผ ์ƒˆ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ƒˆ ๊ฐœ์ฒด๋กœ ๋ž˜ํ•‘ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ ์œ ํ˜•์— ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ INotifyPropertyChanged ๋ฐ INotifyCollectionChanged ์œ ํ˜•์€ XAML ์•„์ผ๋žœ๋“œ์™€ ๊ด€๋ จํ•˜์—ฌ ๊ด€์‹ฌ์ด ์žˆ๊ณ  ๋‹ค์šด์ŠคํŠธ๋ฆผ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋™์˜ํ•˜๊ณ  ๋‹น์‹ ์ด ์ด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•œ ๊ฒƒ์„ ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ด๋Ÿฌํ•œ ์˜ˆ์ธก์ด ์•ฝ๊ฐ„ ๋ถˆํ–‰ํ•œ ์•…์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๊ณ  ๋ง๋ถ™์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” (System.IO API์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋ฉด์„œ) ์•„๋งˆ๋„ ์žˆ์–ด์•ผ ํ•  ๋ชจ๋“  ๋‹จ์ผ API๋ฅผ ์˜ˆ์ƒํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์Œ์— ๋– ์˜ค๋ฅด๋Š” ํ•œ ๊ฐ€์ง€๋Š” ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์œ ํ˜•์„ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ .NET ์œ ํ˜•์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  C++ ๊ฐœ๋ฐœ์ž๊ฐ€ System.ComponentModel.INotifyDataErrorInfo๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ C++/CLI์—์„œ ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์ด์ง€๋งŒ ์ˆœ์ˆ˜ C++ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด CLR์„ ๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋” ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ API ๊ณ„์ธต์—์„œ .NET ๋ฐ WinRT ๊ธฐ์ˆ ์˜ ๊ทผ๋ณธ์ ์ด๊ณ  ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์ด ๋ˆ„์ถœ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ ธ์„œ ์ผ๊ด€์„ฑ์ด ์—†์–ด์ง‘๋‹ˆ๋‹ค.

@meir-pletinsky. NET์€ UWP XAML๋กœ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ…์ŠคํŠธ ํ•„๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ˆ์ด ์•„๊น์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ๋Š” C++ ๊ฐœ๋ฐœ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ .NET ์ปค๋ฎค๋‹ˆํ‹ฐ์— ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@mdtauk , ์•„๋‹ˆ์š”, WinUI Desktop(์ด์ „์˜ Xaml Desktop)์„ ์‚ฌ์šฉํ•˜๋ฉด ์•„์ผ๋žœ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Win32์™€ ํ•จ๊ป˜ Xaml์„ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์ง€ ์•Š๋Š” ํ•œ @meir-pletinsky๊ฐ€ .NET/C++๋ฅผ ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

@MarkIngramUK ์—ฌ๊ธฐ์—์„œ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. WinUI๋Š” Win32๋ฅผ ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์†”๋ฃจ์…˜์„ ์š”๊ตฌํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋Š” ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ _this_ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค! ๋‚˜์—๊ฒŒ WinUI๋Š” ๊ฐ€์žฅ ํ˜„๋Œ€์ ์ด๊ณ  ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ Windows์šฉ ์ตœ๊ณ ์˜ UI๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Xamarin์€ Microsoft์˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์Šคํ† ๋ฆฌ์—ฌ์•ผ ํ•˜๋ฉฐ WinUI๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐœ์ „ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@mdtauk

Fluent/FabricWeb ์ปจํŠธ๋กค ์Šคํƒ€์ผ๊ณผ ๋” ์ž˜ ์ผ์น˜ํ•˜๋„๋ก WinUI 3.0๊ณผ ํ•จ๊ป˜ ์‹คํ–‰๋˜๋Š” WinForms, MFC, WPF ์ปจํŠธ๋กค์˜ ์‹œ๊ฐ์  ๋ชจ์–‘์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์•„์ด๋””์–ด์— +1์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ๋‹ค๋ฅธ ์ปจํŠธ๋กค ํฌ๊ธฐ(WinRT XAML์ด ์•„๋‹Œ ๋ชจ๋“  ๊ฒƒ์€ UWP ์ปจํŠธ๋กค์˜ Compact ๋ฒ„์ „๊ณผ ํ•ด๋‹น ๋ฉ”ํŠธ๋ฆญ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•จ)๊ฐ€ ์žˆ์ง€๋งŒ ์ผ๊ด€์„ฑ ์žˆ๊ณ  ์ผ๊ด€๋œ ์„ธ๋ จ๋œ ๋ชจ์–‘์ž…๋‹ˆ๋‹ค.

WinForms์— WinUI 3.0 ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ปจํŠธ๋กค์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

WinUI 3.0 WPF ์•ฑ์€ Fluent.Light.xaml ๋˜๋Š” Fluent.Dark.xaml ์ œ์–ด ํ…Œ๋งˆ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

MS๊ฐ€ ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์— ์‹œ๊ฐ„๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ํˆฌ์žํ•˜์—ฌ ๊ธฐ๋ณธ Windows 10 ์•ฑ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— WinUI 3.0์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. WPF/WinForms ์•ฑ์—์„œ Windows 10 ๋ชจ์–‘๊ณผ ๋Š๋‚Œ์„ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ? WinUI 3.0์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
MS๋Š” ์ด์ „ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๊ธฐ๋ณด๋‹ค UWP/WinUI์™€ Win32 ๋Œ€์‘ ๊ฐ„์˜ ๊ธฐ์กด(๋ฐ ์ฐจ๋‹จ) ๊ฒฉ์ฐจ๋ฅผ ์ค„์ด๋Š” ๋ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ํˆฌ์žํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ WinUI๊ฐ€ Windows์šฉ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ...

WinUI์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ UI/UX์— ๋Œ€ํ•œ Microsoft์˜ ์˜๋„์— ๋Œ€ํ•ด ๋ฌป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  1. WinUI๋Š” Win32, ATL, MFC, WinForms, Silverlight(๋‚˜๋Š” ์•Œ๊ณ  ์žˆ์Œ), WPF, UWP ๋ฐ/๋˜๋Š” XAML ์•„์ผ๋žœ๋“œ๋ฅผ ๋ชจ๋‘ ๋Œ€์ฒดํ•ฉ๋‹ˆ๊นŒ(๊ฐ€์ƒ์ ์œผ๋กœ?)? ๋ณธ์ธ์€ ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์ด ๊ณ„์† ์กด์žฌํ•˜๊ณ  ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ณ„์† ์ง€์›๋  ๊ฒƒ์ž„์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค . ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ๋งํ•˜๋Š” "์•ž์œผ๋กœ์˜ ๊ธธ"์ด๋ฉฐ, (์˜ˆ๋ฅผ ๋“ค์–ด) WinForms์™€ WPF๋ฅผ Win32๋‚˜ MFC๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ถ„๋ช…ํžˆ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  2. WinUI๋Š” UWP์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๊นŒ? (๋˜๋Š” ๋‘˜์€ ์–ผ๋งˆ๋‚˜ ์œ ์‚ฌํ•ฉ๋‹ˆ๊นŒ?) WinUI๋Š” UWP, XAML Islands ๋˜๋Š” WPF์™€ ๋น„๊ตํ•˜์—ฌ ์–ผ๋งˆ๋‚˜ ์œ ์‚ฌ(๋˜๋Š” ๋‹ค๋ฆ…๋‹ˆ๊นŒ)ํ•ฉ๋‹ˆ๊นŒ?

์ „๋ฌธ์ ์ธ C# ๋ฐ C++ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ €๋Š” WinForms๋กœ ์ž‘์—…์„ ์‹œ์ž‘ํ•œ ๋‹ค์Œ WPF๋กœ ์˜ฎ๊ฒผ๊ณ , WinForms์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉ์ ์„ ์œ„ํ•œ UI/UX๋ฅผ WPF์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋Œ€๋žต ๋‘ ๋ฐฐ ๋น ๋ฅด๊ฒŒ ๋””์ž์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— WinForms๋กœ ๋‹ค์‹œ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. WPF๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ–ˆ์œผ๋ฉฐ ํ›จ์”ฌ ๋” ์ข‹์•„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ XAML์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜๋Š” ๋Œ€์‹  Designer๋ฅผ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ„ฐ์น˜ํ•˜์ž๋งˆ์ž ๋ฐœ์ƒํ•˜๋Š” XAML ๋งน๊ธ€๋ง์€ ๋”์ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” WinForms(๋””์ž์ด๋„ˆ ์‚ฌ์šฉ)๊ฐ€ ์œ ์‚ฌํ•œ XAML ์–‘์‹์ด๋‚˜ ์ปจํŠธ๋กค์„ ์ˆ˜๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” Microsoft ์ œํ’ˆ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ๋™์ผํ•œ UI๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ Win32 ๋˜๋Š” .NET์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ชจ๋“  Microsoft ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ผ๊ด€๋˜๊ณ  ํ˜„๋Œ€์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜๋ฏธํ•˜๋ฉฐ ๋‹จ์ผ ๊ธฐ์ˆ ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์„ธ์…˜์—์„œ ์ผ๋ฐ˜์ ์ธ ์งˆ๋ฌธ๊ณผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปจํŠธ๋กค์— ๋Œ€ํ•ด ์งˆ๋ฌธํ•  ๋•Œ Win32 ๊ฐœ๋ฐœ์ž ๋˜๋Š” .NET ๊ฐœ๋ฐœ์ž์˜ ๋Œ€๋‹ต์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค(๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋Š” ์•Š๋”๋ผ๋„). ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด "WinUI" ํ•™์Šต์ด ์ฃผ์–ด์ง„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์–ด๋Š ์Šคํƒ์—๋‚˜ ์œ ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋ฉฐ, ๊ฐœ๋ฐœ ์ค‘์ธ ์œ„์น˜์— ๊ด€๊ณ„์—†์ด ์˜จ๋ผ์ธ ์ •๋ณด(StackOverflow ๋“ฑ)์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ํ›จ์”ฌ ๋” ๊ฐ€์น˜๊ฐ€ ์žˆ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Xamarin์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ Xamarin์ด ์ด๋Ÿฌํ•œ ๋ฐœ์ž์ทจ๋ฅผ ๋”ฐ๋ฅด๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด(WinUI์˜ ํ™•์žฅ์œผ๋กœ?) ์œ„์˜ ์„ค๋ช…์€ Windows ๊ฐœ๋ฐœ์ž๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Android, iOS ๋“ฑ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ข…๋ฅ˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— WinUI๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ ๊นŒ์š”?

WinUI์— ๋Œ€ํ•œ ๋‚˜์˜ ์ดํ•ด๊ฐ€ ์ •ํ™•ํ•˜๊ณ  Win32, MFC, Forms, WPF ๋“ฑ์„ ๋Œ€์ฒดํ•˜๋Š” "์•ž์œผ๋กœ์˜ ๊ธธ"์ด๊ณ  ๋™์ผํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ณธ ๋˜๋Š” .NET ๊ฐœ๋ฐœ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ธฐ๊บผ์ด ์ปดํฌ์ง€์…˜์„ ๋Œ€์ฒดํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ง€์›ํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ _ ALL _์—์„œ. ํ”Œ๋žซํผ์ด๋‚˜ ์Šคํƒ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•˜๊ฒŒ ์ž‘๋™(๋ฐ ๋™์ž‘)ํ•˜๋Š” ํ˜„๋Œ€์ ์ด๊ณ  ์ผ๊ด€๋œ UI? ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๊นŒ? WinForms ๋˜๋Š” WPF์—์„œ ์™„์ „ํžˆ ๋ณ„๋„์˜ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ Win32์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด CreateWindowEx() ๋ฐ ๋ฉ”์‹œ์ง€ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์‚ฌ๋žŒ์€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. "ํ˜„๋Œ€"๋ฅผ ์œ„ํ•œ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด WinUI(3.0)๊ฐ€ ๋˜๊ธฐ๋ฅผ ์ง„์‹ฌ์œผ๋กœ ๋ฐ”๋ž๋‹ˆ๋‹ค.

OS ํ˜ธํ™˜์„ฑ ๋ฐ ํ•˜์œ„ ์ˆ˜์ค€ ์ง€์›

WinUI๊ฐ€ OS์™€ ๊ตฌ์„ฑ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ์ฃผ๋ ฅํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์€ ์ข‹์€๋ฐ, ์•„์ง Windows 10๋„ ์•ˆ ๋œ ๊ณ ๊ฐ์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ผ๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ํƒ€๊ฒŸ ๊ณ ๊ฐ์ด ์ตœ์‹  ๋ฒ„์ „์„ ์‹คํ–‰ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ์ง€๋งŒ, ์ด๋Š” ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๋งค์ผ ์ง๋ฉดํ•˜๋Š” ์‹ค์ œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ํ”Œ๋žซํผ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” 1703 ์ดํ›„์˜ ์ด์ „ ํ”Œ๋žซํผ์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ค ๋…ผ์˜๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

WinUI๋ฅผ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ํฌํ•จ ๊ฐ€๋Šฅ(์˜ˆ: .NET Core/5)์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์˜ต์…˜์ž…๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” Windows 8.1, Windows 8, Windows 7, ์‹ฌ์ง€์–ด Windows PE๊นŒ์ง€ ๋ชฉํ‘œ๋กœ ์‚ผ์•„์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ WinUI๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@์‰ฌ๋ธ :

WinUI๋Š” UWP์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๊นŒ? (๋˜๋Š” ๋‘˜์€ ์–ผ๋งˆ๋‚˜ ์œ ์‚ฌํ•ฉ๋‹ˆ๊นŒ?) WinUI๋Š” UWP, XAML Islands ๋˜๋Š” WPF์™€ ๋น„๊ตํ•˜์—ฌ ์–ผ๋งˆ๋‚˜ ์œ ์‚ฌ(๋˜๋Š” ๋‹ค๋ฆ…๋‹ˆ๊นŒ)ํ•ฉ๋‹ˆ๊นŒ?

WinUI 3.0์€ ์–ด๋–ค ์˜๋ฏธ์—์„œ Xaml ํ”Œ๋žซํผ, ๊ตฌ์„ฑ ๋ฐ ์ž…๋ ฅ์„ ํฌํ•จํ•˜์—ฌ Windows 10/UWP์˜ UI ํ”Œ๋žซํผ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋‹ค์Œ ๋ฒ„์ „์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ทธ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์™”์Šต๋‹ˆ๋‹ค.

๋กœ๋“œ๋งต์— ์–ธ๊ธ‰๋œ ์‚ฌํ•ญ์„ ์ œ์™ธํ•˜๊ณ  Windows 10/UWP Xaml ํ”Œ๋žซํผ API์™€ ๋งค์šฐ ์œ ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ๋‹ค๋ฅธ ๊ธฐ์ˆ ๊ณผ์˜ ํ˜ผํ•ฉ ๋ฐ ์ผ์น˜์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ์ง€์›(์˜ˆ: UWP ๋Œ€์‹  win32 ์•ฑ ๋ชจ๋ธ ์‚ฌ์šฉ) ๋ฐ ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ.


WinUI๋Š” Win32, ATL, MFC, WinForms, Silverlight(๋‚˜๋Š” ์•Œ๊ณ  ์žˆ์Œ), WPF, UWP ๋ฐ/๋˜๋Š” XAML ์•„์ผ๋žœ๋“œ๋ฅผ ๋ชจ๋‘ ๋Œ€์ฒดํ•ฉ๋‹ˆ๊นŒ(๊ฐ€์ƒ์ ์œผ๋กœ?)? ๋ณธ์ธ์€ ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์ด ๊ณ„์† ์กด์žฌํ•˜๊ณ  ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ณ„์† ์ง€์›๋  ๊ฒƒ์ž„์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ๋งํ•˜๋Š” "์•ž์œผ๋กœ์˜ ๊ธธ"์ด๋ฉฐ, (์˜ˆ๋ฅผ ๋“ค์–ด) WinForms์™€ WPF๋ฅผ Win32๋‚˜ MFC๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ถ„๋ช…ํžˆ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

WinUI๋Š” Windows์˜ ๊ธฐ๋ณธ ์•ฑ UI์— ๋Œ€ํ•œ ์ฃผ์š” ํ™œ์„ฑ ๊ฐœ๋ฐœ ๋ฐ ์ง„ํ–‰ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Windows ์ž์ฒด์™€ ๊ธฐ๋ณธ Microsoft ์•ฑ ๋ฐ ์žฅ์น˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Xaml ์„ฌ์€ WinUI์˜ ์ผ๋ถ€์ด๋ฉฐ WinUI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ์•ฑ(์˜ˆ: WPF, WinForms)์—์„œ ์ƒˆ ๋ณด๊ธฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


ํ˜„์žฌ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ํ”Œ๋žซํผ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” 1703 ์ดํ›„์˜ ์ด์ „ ํ”Œ๋žซํผ์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ค ๋…ผ์˜๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
WinUI๋ฅผ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ํฌํ•จ ๊ฐ€๋Šฅ(์˜ˆ: .NET Core/5)์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์˜ต์…˜์ž…๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” Windows 8.1, Windows 8, Windows 7, ์‹ฌ์ง€์–ด Windows PE๊นŒ์ง€ ๋ชฉํ‘œ๋กœ ์‚ผ์•„์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ WinUI๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. 3.0์˜ ๊ฒฝ์šฐ ๋กœ๋“œ๋งต์˜ ํ”Œ๋žซํผ(1703+, 8.1์—์„œ ์ผ๋ถ€ ์ง€์› ํฌํ•จ)์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋„ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ๊ณ ๊ฐ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์‹คํžˆ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•ž์œผ๋กœ ํ‰๊ฐ€ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. WinUI๊ฐ€ "์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ธธ"์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๊ณ , ์ด์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ ์ œ๊ฐ€ ํฅ๋ถ„๋œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ์ ˆ์ œ๋œ ํ‘œํ˜„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ XAML ์•„์ผ๋žœ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ WinUI๋ฅผ WPF ๋ฐ WinForms์™€ ๊ฐ™์€ ์ด์ „ ๊ธฐ์ˆ ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์€ ํ™˜์ƒ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์˜ค๋ž˜๋œ(์–ด) ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์—…/ํ™•์žฅํ•˜๋Š” ๋™์•ˆ "์•ž์œผ๋กœ" ํ›Œ๋ฅญํ•œ ๋‹ค๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. WinUI๊ฐ€ "์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ธธ"์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๊ณ , ์ด์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ ์ œ๊ฐ€ ํฅ๋ถ„๋œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ์ ˆ์ œ๋œ ํ‘œํ˜„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ XAML ์•„์ผ๋žœ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ WinUI๋ฅผ WPF ๋ฐ WinForms์™€ ๊ฐ™์€ ์ด์ „ ๊ธฐ์ˆ ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์€ ํ™˜์ƒ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์˜ค๋ž˜๋œ(์–ด) ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์—…/ํ™•์žฅํ•˜๋Š” ๋™์•ˆ "์•ž์œผ๋กœ" ํ›Œ๋ฅญํ•œ ๋‹ค๋ฆฌ์ž…๋‹ˆ๋‹ค.

WinUI 3.0์ด ํฌํ•จ๋œ WinForms, MFC ๋˜๋Š” WPF ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ Form/WPF Window/HWND Window์—์„œ XAML Island๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ XAML ํŽ˜์ด์ง€/์ปจํ…์ธ /์ฐฝ์„ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ˆœ์ˆ˜ XAML์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์„ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ ์ œ๊ณต ํ‘œ๋ฉด์— XAML์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ธฐ๋Šฅ์€ WinUI 3.0์„ ์ง„์ •์œผ๋กœ "๋ชจ๋“  ๊ฒƒ์„ ์ง€๋ฐฐํ•˜๋Š” ํ•˜๋‚˜์˜ UI"๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง„์ •์œผ๋กœ WinUI 3.0์„ "๋ชจ๋“  ๊ฒƒ์„ ์ง€๋ฐฐํ•˜๋Š” ํ•˜๋‚˜์˜ UI"๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

... ์œˆ๋„์šฐ์—์„œ. ๐Ÿ˜‰

WinUI 3.0์€ ์–ด๋–ค ์˜๋ฏธ์—์„œ Xaml ํ”Œ๋žซํผ, ๊ตฌ์„ฑ ๋ฐ ์ž…๋ ฅ์„ ํฌํ•จํ•˜์—ฌ Windows 10/UWP์˜ UI ํ”Œ๋žซํผ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋‹ค์Œ ๋ฒ„์ „์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ทธ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์™”์Šต๋‹ˆ๋‹ค.

๊ทธ ๋ฉ”๋ชจ์—์„œ @jesbis , WPF์™€ UWP ๊ฐ„์˜ ํ†ตํ•ฉ์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด

๋ฌผ๋ก  ์‹œ๋„๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ 2๋…„์ด ๋„˜๊ฒŒ ๊ฑธ๋ ธ์Œ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ 

๋˜ํ•œ WPF ํƒœ๊ทธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋งŽ์€ ์„œ๋น„์Šค๊ฐ€ UWP์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ตฌํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด UWP ๊ธฐ๋ฐ˜ WinUI 3.0 ๋งˆํฌ์—…์ด WPF์™€ ์™„์ „ํžˆ ์ผ์น˜ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ด ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ์–ด๋”˜๊ฐ€์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค๋ฉด ์‚ฌ๊ณผํ•˜์ง€๋งŒ, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ณด๊ธฐ ์œ„ํ•ด ์•„์ง ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ๋‚ด ์ดํ•ด๋ฅผ ์ˆ˜์ •/๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค).

์ง„์ •์œผ๋กœ WinUI 3.0์„ "๋ชจ๋“  ๊ฒƒ์„ ์ง€๋ฐฐํ•˜๋Š” ํ•˜๋‚˜์˜ UI"๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

... ์œˆ๋„์šฐ์—์„œ. ๐Ÿ˜‰

์ ์–ด๋„ WinUI 3.0์˜ ๋ฆด๋ฆฌ์Šค ์ฐฝ์—์„œ๋Š”. XAML ๋ Œ๋”๋ง์„ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์‹œ์ž‘์ด ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค...

WPF์™€ UWP ๊ฐ„์˜ ํ†ตํ•ฉ์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋ ์ง€ ๋ง์”€ํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ๋ช‡ ๋…„ ๋™์•ˆ UWP์—์„œ ์š”์ฒญํ•œ ๋งˆํฌ์—… ํ™•์žฅ๊ณผ ๊ฐ™์€ ๊ฐœ๋…์€ ๊ฑฐ์˜ ์„ฑ๊ณต์„ ๊ฑฐ๋‘์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. [...] ์ƒˆ๋กœ์šด UWP ๊ธฐ๋ฐ˜ WinUI 3.0 ๋งˆํฌ์—…์ด WPF์™€ ์™„์ „ํžˆ ์ผ์น˜ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ด ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๊นŒ?

@Mike-EEE WPF์˜ ์™„์ „ํ•œ ์ถฉ์‹ค๋„๋Š” 3.0์˜ ๋ชฉํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฒฉ์ฐจ๋ฅผ ์ขํžˆ๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์ž‘์—… ํ•ญ๋ชฉ์„ ์ถ”์ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: #741 ๋งˆํฌ์—… ํ™•์žฅ ๊ฐœ์„  - ์‚ดํŽด๋ณด๊ณ  ์ด๊ฒƒ์ด ๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”!) WPF(์˜ˆ: # 686 3D ๋ชจ๋ธ ์ง€์›).

WinUI์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€/ํ•„์š”ํ•œ WPF์˜ ๋‹ค๋ฅธ ํŠน์ • ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ œ์•ˆ ๋ฌธ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์—ด๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ตœ๊ทผ " WPF ๊ธฐ๋Šฅ์ด WinRT XAML์— ์žˆ์–ด์•ผ ํ•จ " ๋ฌธ์ œ #719์— ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ์šฐ๋ฆฌ๋Š” ๋ฌดํ•œํ•œ ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์ง€๋งŒ ์šฐ๋ฆฌ ๊ณ„ํš์—์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์˜๊ฒฌ์„ ๋ฐ˜์˜ํ•˜๋ ค๊ณ  ํ™•์‹คํžˆ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ๋˜๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ž ์žฌ์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฉ๋ ค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. @jebis ๋‹˜,

๋‚ด ๋ˆˆ์— ๋„๋Š” ๊ด€์‹ฌ์‚ฌ๋Š” ์ „์ฒด WPF ์ถฉ์‹ค๋„๊ฐ€ ๋ชฉํ‘œ๊ฐ€ ์•„๋‹ˆ๊ณ  WPF ๋‚ด์—์„œ WinUI๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ธ ๊ฒฝ์šฐ WPF ์ฑ„ํƒ๊ณผ ๋งˆ์ฐฐ์— ๋ถ€๋”ชํžˆ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ์ˆ˜ํ•œ(๊ทธ๋ฆฌ๊ณ  ๋…์ฐฝ์ ์ธ) Xaml ๋ชจ๋ธ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฆ‰, Xaml Islands์— ๋ช…๋ฐฑํ•œ ๊ฐ€์น˜ ์ œ์•ˆ์ด ์—†๋Š” ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ WinUI3.0์„ WPF์— ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ฐฑํ•œ ๊ฐ€์น˜ ์ œ์•ˆ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜๋ฃจ๊ฐ€ ๋๋‚˜๋ฉด ํ‡ด๋ณดํ•œ/์—ด๋“ฑํ•œ/์ €๊ฐœ๋ฐœ๋œ Xaml ๋ชจ๋ธ์„ ๊ธฐ์กด์˜ ์šฐ์ˆ˜ํ•œ Xaml ๋ชจ๋ธ๋กœ ๊ฐ€์ ธ์˜ค๋ ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

WinForms, MFC ๋“ฑ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ WinUI3.0์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ WPF๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด MSFT ๋˜๋Š” ์™ธ๋ถ€ ๊ณต๊ธ‰์—…์ฒด์˜ ๋‹ค๋ฅธ ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์™€ ๋น„๊ตํ•  ์ˆ˜ ์—†๋Š” ์šฐ์ˆ˜ํ•œ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ชจ๋ธ ๋ฐ ๊ฐœ๋ฐœ์ž/๋””์ž์ด๋„ˆ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@Mike-EEE Scott Hunter์˜ ๋ง์— ๋”ฐ๋ฅด๋ฉด "ํ•˜๋‚˜์˜ BCL์ด ๊ทธ๋“ค ๋ชจ๋‘๋ฅผ ์ง€๋ฐฐ"ํ•˜๋Š” ๋ชฉํ‘œ๊ฐ€ "๊ทธ๋“ค์„ ๋ชจ๋‘ ์ง€๋ฐฐํ•˜๋Š” ํ•˜๋‚˜์˜ UI"๋ณด๋‹ค ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„์— ์˜จ๋‹ค๋Š” ๊ฒƒ์ด ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์›น์„ ํ†ตํ•œ ์›น ์–ด์…ˆ๋ธ”๋ฆฌ์˜ MONO ๊ธฐ๋ณธ Xamarin Forms XAML ๋ฐ UNO XAML์„ AoC, Xamarin Forms XAML ๊ธฐ๋ฐ˜ ์•ฑ์ด ์žˆ๋Š” ๊ณตํ†ต BCL๋กœ ๋Œ€์ฒดํ•จ์œผ๋กœ์จ ์›น์˜ Uno XAML์€ ์†๋„ ์„ฑ๋Šฅ์—์„œ ๋ชจ๋“  ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์†๋„ ์„ฑ๋Šฅ์€ ๋‹ค๋ฅธ ๊ธฐ์ˆ (์˜ˆ: ํ”Œ๋Ÿฌํ„ฐ, ๋ฐ˜์‘ ๋“ฑ)์—์„œ ์˜ค๋Š” ์น˜์—ดํ•œ ๊ฒฝ์Ÿ์˜ ๊ด€์ ์—์„œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ์šฉ C#์— ํˆฌ์žํ•˜๋Š” ๊ฒฝ๋ ฅ์˜ ๋ฏธ๋ž˜๋ฅผ ๊ฑฑ์ •ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”๋ผ๊ฑด๋Œ€, .NET5 = ๊ทธ๊ฒƒ๋“ค์„ ๋ชจ๋‘ ์ง€๋ฐฐํ•˜๋Š” ๊ณตํ†ต BCL์„ ํ–ฅํ•œ ์ด ์—ฌ์ •์—์„œ XAML ํ‘œ์ค€ํ™”๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋”ฐ๋ผ ๋ถ€๋ถ„์ ์œผ๋กœ ๋˜๋Š” ์™„์ „ํžˆ ์ฒ˜๋ฆฌ๋˜์ง€๋งŒ .NET5์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

XAML ํ‘œ์ค€ํ™”์˜ ํ•„์š”์„ฑ ์™ธ์— ๋˜ ๋‹ค๋ฅธ ์šฐ์„  ์ˆœ์œ„๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ(๋ชจ๋ฐ”์ผ, ๋ฐ์Šคํฌํ†ฑ ๋ฐ ์›น)์— ์œ ์ฐฝํ•œ ๋””์ž์ธ์„ ํ†ตํ•ด Microsoft ๋ธŒ๋žœ๋”ฉ์„ ํ™•์‚ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. [๊ธฐ์ˆ ์ ์œผ๋กœ WinUI 3.0 ๋กœ๋“œ๋งต์˜ ๋ชฉ์ ์— ์ดˆ์ ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋ช‡ ๋ฒˆ์ด๊ณ  ๊ฑฐ๋“ญ ๋ฌป๊ณ  ์žˆ๋Š” Win UI 3.0์„ ํ†ตํ•œ ๋””์ปคํ”Œ๋ง]

๊ฒฐ๊ตญ, Win UI๊ฐ€ ์ƒ์„ฑํ•˜๋Š” UWP๊ฐ€ .NET5๊ฐ€ ์ถœ์‹œ๋  ๋•Œ 2020๋…„ 11์›”๊นŒ์ง€ ๋ชจ๋‘๋ฅผ ์ง€๋ฐฐํ•˜๋Š” ์ด ํ•˜๋‚˜์˜ BCL์—์„œ ์‹ค์ œ๋กœ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ ์ œ ์ƒ๊ฐ์—๋Š” ๋†’์€ ์šฐ์„  ์ˆœ์œ„ ๋ชฉํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋งˆ์ผ€ํŒ… ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ๋ถˆํ–‰ํžˆ๋„ ์šฐ๋ฆฌ๊ฐ€ ๊นŠ์ด ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ ๋กœ ๋ฒˆ์—ญ๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์œ ์ฐฝํ•œ ๋””์ž์ธ์„ ํ†ตํ•œ Microsoft ๋ธŒ๋žœ๋”ฉ์€ ์œ ๋น„์ฟผํ„ฐ์Šค ์ด๋ฉฐ ํ•ด๋‹น ๋””์ž์ธ์„ ํ™๋ณดํ•˜๋Š” ์•ฑ ์€ ๋ชจ๋“  ๊ณณ์—์„œ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ๋ชจ๋ฐ”์ผ ์กด์žฌ์˜ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด "์‹œ์žฅ ์ ์œ ์œจ์„ ๋”ฐ๋ผ์žก๊ธฐ" ์œ„ํ•œ Microsoft์˜ ์žฅ๊ธฐ ์ „๋žต์„ ๋ณด๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Hololens 2์™€ ๊ทธ ์ดํ›„์— ํ›จ์”ฌ ๋” ํฐ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด WinUI 3.0์ด ํฌํ•จ๋œ UWP ์•ฑ์— 3D ๋‹ค์ด์–ด๊ทธ๋žจ ์ปจํŠธ๋กค ๋ฐ ๊ณ ๊ธ‰ 3D ๋ชจ๋ธ ๋ทฐ์–ด๊ฐ€ ์ œ๊ณต๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์ง„ ์ œํ•œ๋œ ์‹œ๊ฐ„์„ BEST OF BEST TECHNOLOGY์— ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์–ด์„œ ๊ณ„์† ์ด ์ž‘์—…์„ ์ถ”์ง„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. :-)

WinUI 3.0 ์ „ํ™˜ ๊ธฐ๊ฐ„์— ๋Œ€ํ•ด

Microsoft๋Š” ๋‹ค์Œ์„ ์œ„ํ•ด Windows Community Toolkit ์œ ์ง€ ๊ด€๋ฆฌ์ž(์ผ๋ถ€๋Š” MS์—์„œ ์ž‘๋™)์™€ ์ง์ ‘ ํ˜‘๋ ฅํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

  1. ํˆดํ‚ท์„ WinUI 3.0(์ƒ˜ํ”Œ ์•ฑ ํฌํ•จ)์œผ๋กœ ๋Œ€์ƒ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์•ˆ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์žฅ์• ๋ฌผ์ด ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜์‹ญ์‹œ์˜ค.
  2. Visual Studio ๋˜๋Š” "๋‹ค๋ฅธ ๋„๊ตฌ"๋ฅผ ํ†ตํ•ด ์ž๋™ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธํ•˜์—ฌ ์–ผ๋งˆ๋‚˜ ์›ํ™œํ•˜๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  3. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜์—ˆ๋Š”์ง€ ๊ณต๊ฐœ์ ์œผ๋กœ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค(๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ/GitHub ๋ฌธ์ œ/์›ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ).
  4. WinUI 3.0 ๋ฐ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ GitHub/Nuget/๊ธฐํƒ€ ์ถ”๊ฐ€ ์ •๋ณด์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ „ํ™˜์— ๋Œ€ํ•œ ํ…์ŠคํŠธ์˜ ๋ณต์‚ฌ + ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์ด์— ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ์ ์–ด๋„ URL์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ WinUI 3.0์— ๋Œ€ํ•ด ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์ „ํ™˜์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  5. ํ”„๋กœ์ ํŠธ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์•ˆ๋œ ์ „ํ™˜ ํ”„๋กœ์„ธ์Šค ๋ฐ ์ผ์ •์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œ์•ˆ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • WinUI 3.0 ์•ฑ(์˜ˆ: WCT v6.0)๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋จ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒˆ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ์„ ํƒ์ ์œผ๋กœ(?) ์•„์ง WinUI 3.0์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ถ„๊ธฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ง€์›์ด ์ œ๊ณต๋  ๊ธฐ๊ฐ„(์˜ˆ: 3/6/12๊ฐœ์›”)์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์—์„œ ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ ๋ณ‘ํ•ฉ). ์—ฌ๊ธฐ์—๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”„๋กœ์ ํŠธ/๋„์„œ๊ด€ ์ „์ฒด์—์„œ ์ง€์› ๊ธฐ๊ฐ„์„ '๋™๊ธฐํ™”'ํ•˜๊ธฐ ์œ„ํ•œ ํŠน์ • ๋‚ ์งœ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Windows 10 ๋ฒ„์ „ 1507 ๋ฐ 1607 LTSB๋ฅผ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ W10์—์„œ ์ง€์›๋˜๋Š” ๋ฒ„์ „ ์ค‘ ์œ ์ผํ•˜๊ฒŒ 2๊ฐ€์ง€ ๋ฒ„์ „์œผ๋กœ ์ถœ์‹œ๋  ์˜ˆ์ •์ด๋ฉฐ WinUI 3.0์€ ๋ฆด๋ฆฌ์Šค ์‹œ์ ์— ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์›๋ž˜๋Š” ํ”„๋กœ๋•์…˜ ํ’ˆ์งˆ์˜ ์˜คํ”ˆ ์†Œ์Šค ์•ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— Windows 10 ๊ณ„์‚ฐ๊ธฐ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ด ์•ฑ์ด 6-7๋…„ ๋™์•ˆ 1507 & 1607 LTSB์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์†Œ๊ทœ๋ชจ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์•ฑ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋ถ„๋ช…ํžˆ ์•ฝ๊ฐ„์˜ ๋…ผ์Ÿ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ์ •๋ง๋กœ ์ด๋Ÿฌํ•œ ์ง€์›์„ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด, ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์žฅ๊ธฐ ์ „๋žต์ด ์ œ๊ณต๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WinUI 4.0/3.x/vNext ๊ด€๋ จ

์—ฌ๊ธฐ ๋Œ“๊ธ€์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์—๋Š” WinUI์˜ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ๋งค์šฐ ๊ธด ํฌ๋ง ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณด๋‹ค ์žฅ๊ธฐ์ ์ธ ๊ณ„ํš ์ค‘ ์ผ๋ถ€๋ฅผ ๊ณต๊ฐœ์ ์œผ๋กœ ๋ฌธ์„œํ™”ํ•˜์—ฌ ์—ฌ๊ธฐ์—์„œ ๊ตฌ์ถ•๋˜๊ณ  ์žˆ๋Š” ์ถ”์ง„๋ ฅ๊ณผ ์—ด์ •์„ ์‹ค์ œ๋กœ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์˜ ๋Œ€๋ถ€๋ถ„์€ v3.0์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— WinUI 4.0/3.x/vNext์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์กฐ๋งŒ๊ฐ„ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์žˆ๋‹ค๋ฉด WinUI ํŒ€์ด ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋Š” ์ž‘์—… ์œ ํ˜•๊ณผ WinUI ๋ฐ/๋˜๋Š” ๋‹ค๋ฅธ MS ํŒ€์˜ ์ฑ…์ž„ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ž‘์—…์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์š”์ ์˜ ์˜ˆ - ๋‹ค์Œ ์‚ฌํ•ญ์„ ์ •๋ง ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • UWP ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ .NET Core 3.0 ์ง€์›(๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ .NET ํŒ€์˜ ์ฑ…์ž„)
  • Visual Studio App Center์˜ Windows ์•ฑ(UWP ๋ฐ Win32)์— ๋Œ€ํ•œ ์ „์ฒด ์ง€์›(WinUI ํŒ€์ด ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜)
  • Material Design ๋ฌธ์„œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ Fluent Design ์ง€์นจ(๋‹ค์‹œ ๋ณ„๋„ ํŒ€์˜ ์ฑ…์ž„)
  • ์ธ๋ฐ•์Šค W10 ์•ฑ์—์„œ WinUI 3.0 ๋ฐ Fluent ๋””์ž์ธ ์‚ฌ์šฉ(๋ณ„๋„์˜ ํŒ€ ๋ฐ ์ผ๋ถ€ ์•ฑ์€ LTSB ๋ฒ„์ „์„ ์ง€์›ํ•ด์•ผ ํ•จ)

์ด๋Ÿฌํ•œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ํ•ญ๋ชฉ์„ ์‹๋ณ„ํ•˜์—ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ ์ ˆํ•œ ํ”ผ๋“œ๋ฐฑ ์ง€์ ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ์˜์—ญ์—์„œ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—๋„ ๋ฒ”์œ„ ๋‚ด ํฌ๋ง ๋ชฉ๋ก์ด ํ•จ๊ป˜ ๋ชจ์ด๊ธฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ํ–ฅํ›„ WinUI์—์„œ ๊ฐ€์žฅ ์›ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ง€์›์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด C#๊ณผ ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด F#์ด C#๊ณผ ๋™๋“ฑํ•˜๊ฒŒ ์ง€์›๋œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

WinUI(UWP vNext)์— Top, Left, Width, Height, StartupPosition, IsTopMost, AllowTransparency ๋ฐ Show() / ShowDialog() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” WPF์™€ ๊ฐ™์€ ์ ์ ˆํ•œ Window ๊ฐœ์ฒด๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

(_์ด ์ฐฝ์ด ํœด๋Œ€ ์ „ํ™” ๋ฐ IoT์™€ ๊ฐ™์€ ์ž‘์€ ํ™”๋ฉด ์žฅ์น˜์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€(๋˜๋Š” ํ—ˆ์šฉ๋˜๋Š”์ง€) ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค_)

@TonyHenrique 1903๋…„์— UWP๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์œˆ๋„์šฐ API๊ฐ€ ์žˆ์ง€๋งŒ ์•„์ง ๋๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

WinUI 3.0์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ XAML์˜ ๋ Œ๋”๋ง์„ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

WPF์˜ ๋ Œ๋”๋ง์—์„œ ํ•œ ๋‹จ๊ณ„ ๋–จ์–ด์ง„ ๋Š๋‚Œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ClearType์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ…์ŠคํŠธ ๋Œ€์‹  ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์•คํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ๋‘๋ฆฌ ์„ ๊ณผ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•œ ํ”ฝ์…€ ์ •๋ฐ€๋„๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

Windows Phone 7๊ณผ Windows Phone 8์ด ์–ธ์ œ ๋ Œ๋”๋ง ์‹œ์Šคํ…œ์„ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™”๋ฉด ๊ธฐ์ˆ ์˜ ์œ ํ˜•๊ณผ ๋ Œ๋”๋ง ์†๋„๊ฐ€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋ฐ€์–ด๋ถ™์ด๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ WinUI๊ฐ€ ๋จผ์ € ๋ฐ์Šคํฌํƒ‘์œผ๋กœ ํ”ผ๋ฒ—ํ•˜๊ณ  ๋” ํฐ ๋””์Šคํ”Œ๋ ˆ์ด๋กœ ์ธํ•ด ์ด๋Ÿฌํ•œ ํ’ˆ์งˆ์„ XAML ๋ Œ๋” ์—”์ง„์œผ๋กœ ๋ณต์›ํ•ด์•ผ ํ•  ๋•Œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Hololens์™€ Xbox์™€ ๊ฐ™์€ ๊ฒƒ์ด ํŠน๋ณ„ํ•œ ๊ณ ๋ ค๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ง€๊ธˆ์ฒ˜๋Ÿผ ๋ Œ๋”๋ง์ด ํ•„์š”ํ•œ ์žฅ์น˜์—์„œ ํ”Œ๋žซํผ ์ˆ˜์ค€์—์„œ ์ผค ์ˆ˜ ์žˆ๋Š” ์„ฑ๋Šฅ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

f# ํ…œํ”Œ๋ฆฟ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

.NET Framework 4.5 ์ด์ƒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ํ‘œ์ค€ Windows Forms ๋ฐ WPF ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ•œ WinUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฑ„ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ตœ์‹  Windows 10 ๋ฆด๋ฆฌ์Šค ๋ฐ/๋˜๋Š” UWP ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๋งŒ ํ•„์š”ํ•˜๋ฉด Fluent ๋””์ž์ธ์„ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Microsoft๋Š” Windows Community Toolkit ์œ ์ง€ ๊ด€๋ฆฌ์ž(์ผ๋ถ€๋Š” MS์—์„œ ์ž‘๋™)์™€ ์ง์ ‘ ํ˜‘๋ ฅํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

@kmgallahan
์ข‹์€ ์ œ์•ˆ! ์ด๊ฒƒ์€ ํ™•์‹คํžˆ ๊ณ„ํš์— ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์€ ์ข…์ข… Windows Community Toolkit ์œ ์ง€ ๊ด€๋ฆฌ์ž์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ˜‘๋ ฅํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.


WinUI 3.0์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ XAML์˜ ๋ Œ๋”๋ง์„ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@mdtauk
๋ Œ๋”๋ง ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ 3.0์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์ง€๋งŒ ํ›„์† ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ž ์žฌ์ ์œผ๋กœ ๋‹ค์‹œ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค. ํฐ ์ดˆ์ ์€ Windows 8+์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋ Œ๋”๋ง ๋ณ€๊ฒฝ์œผ๋กœ ์ด์–ด์ง„ ๋ณดํŽธ์ ์ธ ์„ฑ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ๋ชจ๋“œ ์Šค์œ„์น˜๋Š” ํฅ๋ฏธ๋กœ์šด ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.


f# ํ…œํ”Œ๋ฆฟ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@edgarsanchez , @khoshroomahdi
F#์— ๋Œ€ํ•œ ๊ด€์‹ฌ์ด ๋งŽ์•„์ง€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! F#์„ ์›ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ๋” ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. F# ๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ์ด์œ ์™€ ์šฉ๋„์— ๋Œ€ํ•ด ์ž์œ ๋กญ๊ฒŒ ์˜๊ฒฌ์„ ๋ณด๋‚ด์ฃผ์„ธ์š”. #740


.NET Framework 4.5 ์ด์ƒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ํ‘œ์ค€ Windows Forms ๋ฐ WPF ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ•œ WinUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฑ„ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@jozefizso
Xaml ๊ตฐ๋„๋ฅผ ์‚ดํŽด๋ณด์…จ๋‚˜์š”? ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด WPF ๋ฐ Windows Forms ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ WinRT Xaml์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ตœ์‹  Xaml ๋ณด๊ธฐ/ํŽ˜์ด์ง€๋กœ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://docs.microsoft.com/windows/apps/desktop/modernize/xaml-islands

์šฐ๋ฆฌ๋Š” WinUI 3.0์— ์„ฌ์„ ํฌํ•จํ•˜๊ณ  Creators Update ์ด์ƒ(์ตœ์†Œํ•œ Windows์˜ ๋งˆ์ง€๋ง‰ 5๊ฐœ ๋ฒ„์ „์ธ ์ตœ์‹  ๋ฒ„์ „)๊ณผ ์—ญํ˜ธํ™˜๋˜๋„๋ก ๊ณ„ํšํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

WinUI 3.0๊ณผ ํ•จ๊ป˜ Creators Update ์ด์ƒ์—์„œ ์ž‘์—…ํ•˜๋Š” Xaml Islands๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ Œ๋”๋ง ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ 3.0์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์ง€๋งŒ ํ›„์† ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ž ์žฌ์ ์œผ๋กœ ๋‹ค์‹œ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค. ํฐ ์ดˆ์ ์€ Windows 8+์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋ Œ๋”๋ง ๋ณ€๊ฒฝ์œผ๋กœ ์ด์–ด์ง„ ๋ณดํŽธ์ ์ธ ์„ฑ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ๋ชจ๋“œ ์Šค์œ„์น˜๋Š” ํฅ๋ฏธ๋กœ์šด ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.

์™„๋ฃŒ #768

XAML ์•„์ผ๋žœ๋“œ์—๋Š” Windows 10, ๋ฒ„์ „ 1903์ด ํ•„์š”ํ•˜๊ณ  Windows Community Toolkit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ UWP์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฑด ์•ˆ๋ผ.

XAML ์•„์ผ๋žœ๋“œ์—๋Š” Windows 10, ๋ฒ„์ „ 1903์ด ํ•„์š”ํ•˜๊ณ  Windows Community Toolkit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ UWP์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฑด ์•ˆ๋ผ.

WinUI 3.0์€ Windows 7/8/8.1๋กœ ์ด๋™ํ•˜์ง€ ์•Š์ง€๋งŒ ํ•ด๋‹น OS๋Š” ๊ณง ๋‹จ์ข…๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ๋กœ์„œ๋Š” ์—ฌ์ „ํžˆ WPF ๋ฐ WinForms๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ Windows 10์œผ๋กœ ์ด๋™ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ๋Š” Windows 10์šฉ UWP์ด๋ฏ€๋กœ WPF/WinForms๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ง€ ์›์„ ๊ทธ๋ฆฌ๋ฉฐ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์กฐ๊ฐํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jozefizso UWP๊ฐ€ WPF ๋ฐ WinForms์™€ ๋” ์œ ์‚ฌํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜๊ณ  ์žˆ๊ณ  XAML UI๊ฐ€ WPF ๋ฐ WinForms ํ”Œ๋žซํผ์— ๊ฐ€๊นŒ์›Œ์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ์ ์ธ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ๋ฒ—์–ด๋‚˜๊ณ  WPF ๋ฐ WinForms ํ”Œ๋žซํผ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์‹  XAML UI๊ฐ€ ํฌํ•จ๋œ UWP ์•ฑ.

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

XAML ์•„์ผ๋žœ๋“œ์—๋Š” Windows 10, ๋ฒ„์ „ 1903์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ๋Š” Windows 10์šฉ UWP๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

WinUI 3.0์—์„œ๋Š” ์•„์ผ๋žœ๋“œ๋ฅผ 1703 ์ด์ƒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ„ํšํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(ํ›จ์”ฌ ๋” ๋’ค๋กœ).

๋˜ํ•œ UWP(๋น„๊ณต์‹์ ์œผ๋กœ "WinUI ๋ฐ์Šคํฌํ†ฑ"์ด๋ผ๊ณ  ํ•จ) ๋Œ€์‹  Win32 ์•ฑ ๋ชจ๋ธ์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ UWP ์•ฑ์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ UWP(๋น„๊ณต์‹์ ์œผ๋กœ "WinUI ๋ฐ์Šคํฌํ†ฑ"์ด๋ผ๊ณ  ํ•จ) ๋Œ€์‹  Win32 ์•ฑ ๋ชจ๋ธ์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ UWP ์•ฑ์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ํฅ๋ถ„๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Windows์˜ ์ „์ฒด API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ Win32์ด๋“  Windows ๋Ÿฐํƒ€์ž„์ด๋“  ์ƒ๊ด€์—†์ด Xaml์„ ํ†ตํ•ด ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚œ UI๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ UWP(๋น„๊ณต์‹์ ์œผ๋กœ "WinUI ๋ฐ์Šคํฌํ†ฑ"์ด๋ผ๊ณ  ํ•จ) ๋Œ€์‹  Win32 ์•ฑ ๋ชจ๋ธ์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ UWP ์•ฑ์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ํฅ๋ถ„๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Windows์˜ ์ „์ฒด API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ Win32์ด๋“  Windows ๋Ÿฐํƒ€์ž„์ด๋“  ์ƒ๊ด€์—†์ด Xaml์„ ํ†ตํ•ด ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚œ UI๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WinForms ์•ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ฝ”๋“œ ์ˆจ๊น€์„ ์œ ์ง€ํ•˜๋˜ Form์„ XAML ์ฐฝ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ๋ชจ๋“  ๋ธŒ๋Ÿฌ์‹œ์™€ XAML ์ปจํŠธ๋กค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WPF๋Š” WinUI XAML์„ ์ œ์ž๋ฆฌ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์•ฝ๊ฐ„ ๋” ๋ณต์žกํ•˜์ง€๋งŒ ์ ์–ด๋„ WPF ์ปจํŠธ๋กค์€ WinUI ์ปจํŠธ๋กค๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. "Xaml"์€ Xaml์ด ๊ธฐ๋ณธ UWP ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ๋งˆ์ผ€ํŒ… ์–ธ์–ด(์ž์ฃผ ๋ณ€๊ฒฝ๋จ)๋กœ ์ž˜๋ชป ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋งˆํฌ์—… ์–ธ์–ด๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "Xaml"์€ "WinUI"๋กœ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. "Xaml"์ด .xaml ์–ธ์–ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ๋˜๋Š” ui ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ๋งค์šฐ ์ž์ฃผ ๋ถˆ๋ถ„๋ช…ํ•œ ์ด ์Šค๋ ˆ๋“œ์—์„œ๋„ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ํ˜ผ๋ž€์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ด๊ฒƒ์ด WPF์™€ UWP๋ฅผ ๋” ๊ฐ€๊น๊ฒŒ ์ด๋™์‹œํ‚ค๋Š” ํ•œ ์ด๊ฒƒ์€ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์—๋Š” ์—†๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉฐ ์ด ๋‘˜์„ ๊ฒฐํ•ฉํ•œ "Windows UI"๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์˜ ์ผ๋ถ€ ์ค‘๋ณต์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ „ํ™˜ ๊ฒฝ๋กœ WPF -> UWP์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. Windows ๋ฒ„์ „์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์ง€๋งŒ ์ด ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด Win7์ด EOL์„ ํ›จ์”ฌ ๋Šฅ๊ฐ€ํ•  ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ƒ๋Œ€์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ Win10์„ ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

Xaml์€ UI ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Windows.UI.Xaml...

Xaml์€ UI ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

Xaml์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์žฅ๋ฉด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๋ฅผ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” WPF์˜ ๊ธฐ์ˆ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, UI ์š”์†Œ _๋ฐ POCO_๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .NET์ด๋ผ๋ฉด โ€‹โ€‹Xaml๋กœ ํ’๋ถ€ํ•˜๊ฒŒ ๊ธฐ์ˆ ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์— ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Xaml์ด eXtended Application Markup Language์˜ ์•ฝ์ž๋ผ๋Š” ์‚ฌ์‹ค์„ ์žŠ์–ด๋ฒ„๋ฆฌ์ง€ ์•Š๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. Xaml์€ .NET _application_ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์šฐ์•„ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆํฌ์—… ์–ธ์–ด๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡๊ฒŒ ๊ฐ•๋“ฑ๋˜๊ฑฐ๋‚˜ ์ œํ•œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ Xaml์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์„ฑ์„ ์„ค๋ช…ํ•˜๊ณ  App.config(์˜ˆ, Web.config๋„ ํฌํ•จ)๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ต์ฒดํ•˜๋ฉด์„œ ๋ณต์žก์„ฑ์„ ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ์™ธ๋ถ€ API์˜ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

Xaml์€ UI๊ฐ€ _์•„๋‹Œ_์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์ด์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ UWP์—์„œ ์ˆ˜๋…„ ๋™์•ˆ ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” "Xaml"์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์ด๋Ÿฌํ•œ ๋…ธ๋ ฅ์—์„œ ํ’€๋ ค๋‚˜๋Š” ๊ฒƒ์„ _์‚ฌ๋ž‘_ ํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ๊ทธ๋Ÿฌํ•œ ์กฐ์น˜๊ฐ€ ์‹œํ–‰๋˜๋Š” ๊ฒƒ์€ ๊ณ ์‚ฌํ•˜๊ณ  ๊ณ ๋ ค๋  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

@charlesroddie ๋‚˜๋Š” ๋ช…๋ช…์ด ์ •๋ง๋กœ ์ž„์˜์ ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. WUXaml ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ๋น„๋กฏ๋œ ๊ฒƒ์˜ ์Šคํƒ ์ถ”์ ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ DirectUI ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” ์ ‘์„ ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋‹น์‹œ ์ฃผ๋ณ€์— ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด Win8์˜ ์ด์•ผ๊ธฐ๋ฅผ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด์–ด ํ•ฉ์„ฑ์„ ์œ„ํ•œ DirectComp, ๋ถ€๋“œ๋Ÿฌ์šด ์Šคํฌ๋กค ๋ฐ ๋Ÿฌ๋ฒ„ ๋ฐด๋”ฉ์„ ์œ„ํ•œ DirectManipulation, ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ํ•จ๊ป˜ ๋Œ์–ด๋‚ด๊ธฐ ์œ„ํ•ด ๋งจ ์œ„์— DirectUI๊ฐ€ ์žˆ๋Š” ๋ฒกํ„ฐ ๊ทธ๋ž˜ํ”ฝ ์—”์ง„์ธ Direct2D/DirectWrite. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์–ด๋–ค ์ด์œ ๋กœ ์ผ๋ถ€๋Š” Win7์œผ๋กœ ๋‹ค์‹œ ํฌํŒ…๋˜์—ˆ์œผ๋ฉฐ Xaml ๋น„ํŠธ๋งŒ WinRT ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋…ธ์ถœ๋˜์—ˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ๋ชจ๋“  API๋Š” ์ƒ˜ํ”Œ์„ ๋ณด๋Š” ๋ฐ ํ•„์š”ํ•œ ์ด์ƒํ•œ ํŒฉํ† ๋ฆฌ ๋ฐ ํŒจํ„ด์ด ์žˆ๋Š” ์•”ํ˜ธ ํ†ต์‹  ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‚จ๊ฒจ์กŒ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ฅด๋‹ค.

์‚ฌ์‹ค, ์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด WUComposition์ด WinRT๋ฅผ ํ†ตํ•ด DirectComp์™€ DirectManipulation์„ ๋…ธ์ถœํ•œ ๊ฒƒ์ฒ˜๋Ÿผ(๋˜๋Š” ์žฌ์ž‘์„ฑ์ธ ๊ฒฝ์šฐ) Direct2D/DirectWrite๊ฐ€ ์—ฌ๊ธฐ์—๋„ ๊ณต์‹ ํ™ˆ์ด ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ชจ๋‘ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์˜ ํƒˆ์ถœ ํ•ด์น˜์™€ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ถฉ์‹ค๋„์˜ ์ ‘์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Win2D๋Š” ์‹ค์ œ๋กœ ๋ฐ˜์ฏค ๊ตฌ์›Œ์กŒ๊ณ  ์ข‹์€ API๋„ ์•„๋‹™๋‹ˆ๋‹ค.

Windows.UI.Composition์€ ๋‚ด๊ฐ€ ๋ฏฟ๋Š” DirectComposition์˜ ์žฌ์ž‘์„ฑ์ž…๋‹ˆ๋‹ค. API๋Š” ๋น„์Šทํ•˜์ง€๋งŒ ๋™์ผํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ๋” ์ด์ƒ sRGB๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
๋ชจ๋“  ๋ ˆ๊ฑฐ์‹œ ์•ฑ์˜ ์ƒ‰์ƒ์„ sRGB๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๋™์•ˆ ๊ฐ ๋ชจ๋‹ˆํ„ฐ์— ๋Œ€ํ•ด ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•ฝ๊ฐ„ ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚œ ์ˆ˜ ์žˆ์ง€๋งŒ ++, ๋‹น์‹ ์€ ๋‹น์‹ ์ด ์ตœ์†Œํ•œ์˜ ์˜์กด์„ฑ๊ณผ WinUI ๋˜๋Š” ๊ฒฝํ™”์ œ๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ์ง€ ์ธ -์—†์ด ์‚ฌ์šฉ ๊ฒฝํ™”์ œ์ฒ˜๋Ÿผ์˜ UI ์‹œ์Šคํ…œ์„ ํ˜„๋Œ€ํ™”ํ•˜๋ ค๋Š” ๋‹น์‹ ์ด ์ด๋ฏธ C๋กœ ์ž‘์„ฑ๋œ ๋Œ€๊ทœ๋ชจ์˜ Win32 appliation์„ ๊ฐ€์ • ํ•  ์ˆ˜ ์ƒ์ž ์ปจํŠธ๋กค ์„ธํŠธ ๋˜๋Š” XAML ์—†์ด๋„ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์ด๋ฏธ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์œ„ํ•ด WinUI 3.0์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋„ค์ด๋ฐ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ•œ ๋ฐ”์™€ ๊ฐ™์ด ์˜ค๋Š˜๋‚  ํ˜ผ๋™์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” "Xaml ํ”Œ๋žซํผ" ๊ณผ "Xaml ์–ธ์–ด" (์ž์ฒด ์‚ฌ์–‘/๋ฐฉ์–ธ ํฌํ•จ) ์‚ฌ์ด์— ๊ตฌ๋ณ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฃผ์š” ๋ฆฌ๋ธŒ๋žœ๋”ฉ์ด ์นด๋“œ์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๋ช…๋ช… ๋ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด ํ™•์‹คํžˆ ๋…ผ์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


Photoshop๊ณผ ๊ฐ™์€ ๊ธฐ์กด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜„๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด XAML ์—†์ด C++ Win32 ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ Windows.UI.Composition์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ด๋ฏธ UI ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ฃผ์ œ์—์„œ ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ฏธ C++๋กœ ์ž‘์„ฑ๋œ ๋Œ€๊ทœ๋ชจ Win32 ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  UI ์‹œ์Šคํ…œ์„ ํ˜„๋Œ€ํ™”ํ•˜๋ ค๊ณ  ํ•˜๋ฏ€๋กœ In- ์—†์ด Comp๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ตœ์†Œํ•œ์˜ ์ข…์†์„ฑ์œผ๋กœ WinUI ๋˜๋Š” Comp๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์ž ์ปจํŠธ๋กค ์„ธํŠธ ๋˜๋Š” XAML ์—†์ด๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. Windows.UI.Composition์„ ์‚ฌ์šฉํ•˜๋Š” "ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์—†๋Š”" ์•ฑ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์˜ค๋Š˜๋‚  ์ด๋ฏธ ํ•  ์ˆ˜ ์žˆ๋Š” WinUI 3์—์„œ ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. WinUI NuGet ํŒจํ‚ค์ง€ ๋ฐ ์ข…์†์„ฑ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•  ๋•Œ ์ด ์ ์„ ์—ผ๋‘์— ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.


๋ชจ๋“  ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ๋” ์ด์ƒ sRGB๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
๋ชจ๋“  ๋ ˆ๊ฑฐ์‹œ ์•ฑ์˜ ์ƒ‰์ƒ์„ sRGB๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๋™์•ˆ ๊ฐ ๋ชจ๋‹ˆํ„ฐ์— ๋Œ€ํ•ด ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

@reli-msft ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ด์–ด ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@jesbis ๐Ÿ‘‰ # 67

Apple์€ ์˜ค๋Š˜ SwiftUI๋ฅผ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค...

๊ฐœ๋ฐœ์ž๊ฐ€ XAML ๋ฐ ์ฝ”๋“œ ์ˆจ๊น€ ๋Œ€์‹  ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๋งŒ๋“ค๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก Xaml Direct ์— Visual Studio ํ…œํ”Œ๋ฆฟ์ด ์ œ๊ณต๋œ๋‹ค๋ฉด

๋‚˜๋Š” ์ฃผ์š” ๋ฆฌ๋ธŒ๋žœ๋”ฉ์ด ์นด๋“œ์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๋ช…๋ช… ๋ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด ํ™•์‹คํžˆ ๋…ผ์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@jesbis ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์— ์ฐธ์—ฌํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋Ÿฐ ๊ฒŒ์‹œ๋ฌผ/๊ณต์ง€์‚ฌํ•ญ์„ ์ž‘์„ฑํ•˜๊ณ  ์ฃฝ์€ ์ƒํƒœ๋กœ ๋‘๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ(๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ด€๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ), ์Šค๋ ˆ๋“œ ์ž‘์„ฑ์ž๋กœ์„œ ๊ท€ํ•˜๊ฐ€ ์ฐธ์—ฌํ•˜๊ณ  ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งํ•˜๋Š” ๊ฒƒ. ํŠนํžˆ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด _me_์ผ ๋•Œ. ๐Ÿ˜†

1) ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํ”Œ๋žซํผ๊ณผ 2) ์–ธ์–ด/๋งˆํฌ์—…/์„ค๋ช… ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋น„ํŒ์  ๋ฐœ์–ธ์—์„œ ๋‚˜๋Š” (์ฒซ ๋ฒˆ์งธ) ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํ•œ ๊ณต์„ ๋“ค์ธ ์ ์ด ์—†๋‹ค๊ณ  ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Windows ํŒ€์ด ์ด ๋ฌธ์ œ์— ๊ด€ํ•ด ๋งŽ์€ ํ›Œ๋ฅญํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜์—๊ฒŒ ๊ฒฐ์ฝ” ๊ฑฑ์ •๊ฑฐ๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์˜ (๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜) ๋ถ„๋…ธ์™€ ๊ฒฝ์•…์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค๋Š” ๋‘ ๋ฒˆ์งธ ์˜์—ญ์ด๋ฉฐ, ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๋ช‡ ๋…„ ๋™์•ˆ ์ƒ๊ฒจ๋‚œ UserVoice ๋ฌธ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์€ ๋‚ด๊ฐ€ ์ด ๋‘ ์˜์—ญ์„ ๋” ์ž˜ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ธŒ๋žœ๋”ฉ ๋…ธ๋ ฅ์„ ๋” ๊ณ ๋ คํ•ด ๋‹ฌ๋ผ๊ณ  ์ ์–ด๋„ ์š”์ฒญ(๊ฐ„์ฒญ, ์‹ฌ์ง€์–ด ๐Ÿ˜…)ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์ด "๋งˆํฌ์—… ์–ธ์–ด"๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— "Xaml Direct"๊ฐ€ ์—ฌ๊ธฐ์„œ ํ˜ผ๋ž€์˜ ์ •์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ๋งž์Šต๋‹ˆ๋‹ค! -- ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ ์‚ฌ์šฉ๋ฒ•์—๋Š” ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ธŒ๋žœ๋“œ์˜ ๊ฒฝ๊ณ„์„  ๋‚จ์šฉ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

Xaml Direct์— ๋Œ€ํ•ด ๋งํ•˜์ž๋ฉด @mdtauk :

๊ฐœ๋ฐœ์ž๊ฐ€ XAML ๋ฐ ์ฝ”๋“œ ์ˆจ๊น€ ๋Œ€์‹  ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๋งŒ๋“ค๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก Xaml Direct์— Visual Studio ํ…œํ”Œ๋ฆฟ์ด ์ œ๊ณต๋œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”?

CSharpForMarkup ๊ณผ ๊ฐ™์€?

Xaml Direct๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ๊ณ  ์ ์ ˆํ•œ ์ด๋ฆ„์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  _any_ ์ด๋ฆ„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜‰

Xaml Direct์— ๋Œ€ํ•ด ๋งํ•˜์ž๋ฉด @mdtauk :

๊ฐœ๋ฐœ์ž๊ฐ€ XAML ๋ฐ ์ฝ”๋“œ ์ˆจ๊น€ ๋Œ€์‹  ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๋งŒ๋“ค๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก Xaml Direct์— Visual Studio ํ…œํ”Œ๋ฆฟ์ด ์ œ๊ณต๋œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”?

CSharpForMarkup ๊ณผ ๊ฐ™์€?

Xaml Direct๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ๊ณ  ์ ์ ˆํ•œ ์ด๋ฆ„์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  _any_ ์ด๋ฆ„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜‰

@Mike-EEE https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.core.direct

์ฝ”๋“œ์—์„œ XAML UI๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ XAML ํŒŒ์ผ ๋Œ€์‹  ์‚ฌ์šฉํ•  ํ…œํ”Œ๋ฆฟ์ด ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๊ทธ๋ƒฅ ๋†”๋‘˜ ์ƒ๊ฐ...

@mdtauk ๋„ค! SwiftUI๋Š” Xaml์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ฝ”๋“œ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” React๊ฐ€ ํ•˜๋Š” ๋ฐฉ์‹๋Œ€๋กœ ์ฝ”๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ ํŒŒ์ผ์„ ๋ถ„ํ•ดํ•œ ๋‹ค์Œ ์ผ์ข…์˜ ์ฝ”๋“œ ์ˆจ๊น€๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์ผ์ข…์˜ ๊ตฌ์‹์ด๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

์นœ๊ตฌ๊ฐ€ iPad Pro์˜ 120hz ๋””์Šคํ”Œ๋ ˆ์ด์™€ ์ž‘๋™ํ•˜๋ ค๋ฉด SwiftUI ๋ ˆ์ด์•„์›ƒ ์—”์ง„์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋ฐฉ๊ธˆ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๊ทธ๋“ค์ด ์ง‘์ค‘ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ •๋ง ๋งค๋ ฅ์ ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” SwiftUI์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ† ๋ก ์ด @eklipse2k8์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ œ #804๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋น„์ฃผ์–ผ Basic.๐Ÿ˜€์„์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค

WPF๊ฐ€ WinUI 3์˜ ํ•˜์œ„ ๊ณ„์ธต์„ _on_ ๊ตฌ์ถ•ํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค!

@reli-msft WPF๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์–ด๋–ค ์ด์ ์„ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

WinUI์—์„œ ๋ณด๊ณ  ์‹ถ์€ ํŠน์ • WPF ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ "WinRT [WinUI]์— ์žˆ์–ด์•ผ ํ•˜๋Š” WPF ๊ธฐ๋Šฅ" ์Šค๋ ˆ๋“œ์—์„œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. https://github.com/microsoft /microsoft-ui-xaml/issues/719

์ƒˆ๋กœ์šด ๊ณ ์ • ๋ฌธ์ œ #888์— ์ฐฌ์„ฑํ•˜์—ฌ ๋งˆ๊ฐ

์ •๋ง ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฒ„์ „๊ณผ ๊ด€๋ จ๋œ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@weitzhandler [ 2019๋…„ 5์›” 16์ผ

๋‚˜์—๊ฒŒ ๋ชจ๋“  ๊ธฐ์ˆ ์  ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ๋œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
UWP, WPF ๋˜๋Š” ๋ชจ๋“  Windows ์ „์šฉ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์•„๋ฌด๋ฆฌ ํ›Œ๋ฅญํ•˜๋”๋ผ๋„ ๋ชจ๋“  ํ”Œ๋žซํผ(์ตœ์†Œํ•œ Windows, Droid, iOS ๋ฐ ์›น)์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ํ™”๋ฉด ํฌ๊ธฐ.

์ผ๋ฐ˜์ ์œผ๋กœ WinUI ๋ฐ XAML์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธก๋ฉด์—์„œ ๊ฐœ์„ ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ์ œ ์ž‘์—…์„ ์„ฑ๊ฐ€์‹œ๊ฒŒ ํ•˜๊ณ  ๋Š๋ฆฌ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

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

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํ›จ์”ฌ ๋” ๋งŽ์€ ๋‚ด์žฅ ๋ณ€ํ™˜๊ธฐ

๋ฐฐ๋น„์ง€(Babbage)์˜ ๋ถ„์„ ์—”์ง„๊ณผ ํŠœ๋ง(Turing)์˜ ๋ณดํŽธ์  ๊ณ„์‚ฐ ์ด๋ก  ์ดํ›„, ๋ชจ๋“  ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ์ปดํ“จํ„ฐ๊ฐ€ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๊ณ  ์‹ถ์€ ๋ชจ๋“  ๊ณ„์‚ฐ์„ ์œ„ํ•ด ์ƒˆ ์ปดํ“จํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์‹œ๊ฐ„์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ „์ฒด ๋ณ€ํ™˜๊ธฐ ์‚ฌ์—…์€ ๋ฌด๋ก€ํ•˜๊ฒŒ ๋ฒ„๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€์šธ ๋ณ€ํ™˜๊ธฐ ๊ฐœ์ฒด

๋ถ€์šธ์€ ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ์ฒด๋Š” ๋ถ€์šธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด์—์„œ ๋ถ€์šธ๋กœ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ณ€ํ™˜์€ ์—†์Šต๋‹ˆ๋‹ค. ์œ ํ˜•์€ .Net์—์„œ ์ค‘์š”ํ•˜๋ฉฐ ์œ ํ˜•์ด ์ง€์ •๋˜์ง€ ์•Š์€ ์ถ”๊ฐ€ ์‹œ์Šคํ…œ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๋ฐ”์ธ๋”ฉ๊ณผ ๊ฐ™์€ ๊ธฐ์กด์˜ ์œ ํ˜•์ด ์ง€์ •๋˜์ง€ ์•Š์€ ์‹œ์Šคํ…œ๋„ ๋ฒ„๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด ๋ณ€ํ™˜๊ธฐ ์‚ฌ์—…์€ ๋ฌด๋ก€ํ•˜๊ฒŒ ๋ฒ„๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๋ถ€์šธ์€ ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ์ฒด๋Š” ๋ถ€์šธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ UI์— ๊ด€ํ•ด์„œ๋Š” ๋ณ„๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด์˜ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ญ๋ชฉ์„ ํ‘œ์‹œ/์ˆจ๊ธฐ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ „์šฉ ๊ฐ€์‹œ์„ฑ ์†์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ฐ”์ธ๋”ฉ๊ณผ ๊ฐ™์€ ๊ธฐ์กด์˜ ์œ ํ˜•์ด ์ง€์ •๋˜์ง€ ์•Š์€ ์‹œ์Šคํ…œ๋„ ๋ฒ„๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ญ? ์‚ฌ์‹ค ์žฅ์ ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์š”. V์™€ VM ๊ฐ„์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์ด ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”์ธ๋”ฉ๊ณผ ๊ฐ™์€ ๊ธฐ์กด์˜ ์œ ํ˜•์ด ์ง€์ •๋˜์ง€ ์•Š์€ ์‹œ์Šคํ…œ๋„ ๋ฒ„๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

V์™€ VM ๊ฐ„์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์ด ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ปดํŒŒ์ผ๋œ ๋ฐ”์ธ๋”ฉ์ด ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

@weitzhandler ๋‚ด ๋ง์€ ๋‹น์‹ ์˜ ๋Œ€์•ˆ์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
... ๋ชจ๋“  ๊ฒƒ์ด ์ „์šฉ ๊ฐ€์‹œ์„ฑ ์†์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
๋ญ? ์‚ฌ์‹ค [๋ฐ”์ธ๋”ฉ]์ด ์žฅ์ ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์š”. V์™€ VM ๊ฐ„์˜ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์ด ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ๋ฐ˜์‘ํ˜• ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” name:Mutable<string> ์™€ ๊ฐ™์€ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜(์ฝ”๋“œ์—์„œ)๋ฅผ ์ •์˜ํ•œ ๋‹ค์Œ let visibility = name.map(fun s -> s <> "") ๋งคํ•‘ํ•œ ๋‹ค์Œ visibility.bind someView.set_IsVisible ๋˜๋Š” name.bind(fun s -> someView.IsVisible <- s <> "") ํ•˜์—ฌ ๋ทฐ ์†์„ฑ์— ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” https://github.com/ReedCopsey/Gjallarhorn์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ฃผ๋ณ€์— ๋‹ค์–‘ํ•œ ๋ฐ˜์‘ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๋ฐ”์ธ๋”ฉ๊ณผ ๋‹ฌ๋ฆฌ ๋ชจ๋“  ๊ฒƒ์ด ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค. 2. ์‚ฌ๋ฌผ(ํ•จ์ˆ˜, ์†์„ฑ, ๋ณด๊ธฐ)์€ ๋ฌธ์ž์—ด ์ด๋ฆ„์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 3. ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜์ผ ๋ฟ์ด๋ฉฐ ๋ณ€ํ™˜๊ธฐ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ํˆฌ๋ฐ•ํ•ฉ๋‹ˆ๋‹ค. 4. ๊ฐ„๋‹จํ•œ ๊ฐ์ฒด ์†์„ฑ์— ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๋ฐ”์ธ๋”ฉ ์ƒ์šฉ๊ตฌ "๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅํ•œ ์†์„ฑ" ๋“ฑ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ทฐ๋Š” ์—ฌ์ „ํžˆ Xaml๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€๋ถ€๋ถ„์ด ์ •์  ๋ ˆ์ด์•„์›ƒ์ธ ๋‹จ์ˆœํ•˜๊ณ  ๋ชจ๋“  ๊ณณ์— ๋งค์ง ๋ฌธ์ž์—ด์ด ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ๋””์ž์ด๋„ˆ๊ฐ€ ๋ผ์ด๋ธŒ ๋ทฐ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ ๋ทฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ํ†ต์—ญ์‚ฌ์™€ ํ•จ๊ป˜๋ผ๋ฉด ๋งค์šฐ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด ๋งํ•˜์ž๋ฉด Chain Reactive ๋ฅผ ํ™•์ธํ•˜๊ณ  ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

์•ˆ๋…•ํ•˜์„ธ์š”, ms ํŒ€์ด uservoice์˜ ๋ชจ๋“  ๋ฒ„๊ทธ/๊ธฐ๋Šฅ์„
๊ทธ๋ ‡๋‹ค๋ฉด WinUI 3.0 ์ด์ƒ์˜ ํ›Œ๋ฅญํ•œ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ hupo376787 ๋‚˜๋Š” ์ด๊ฒƒ์ด Windows ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์„ ๋” ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ๋…ผ์˜ํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์‹ ์ด downvotes๋ฅผ ์–ป์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์œˆ๋„์šฐ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ๊ณต๊ฐœ ํ† ๋ก ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ด๊ณ , ํ•ด๋‹น ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๊ทธ๋ฃน์ด ํ”ผ๋“œ๋ฐฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ๋Œ€์‘ํ•˜์ง€ ์•Š๊ณ  ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋‹ค. ๋ช‡ ๋…„ ๋™์•ˆ ์‚ฌ์šฉ์ž ๋ชฉ์†Œ๋ฆฌ.

@charlesroddie ๋„ค, ์œ ์ € ๋ณด์ด์Šค๊ฐ€ ๋ฒ„๋ ค์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ ํ—ˆ๋ธŒ์— ์ œ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ๋ณด๋‚ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ms๋Š” ๋ฌด์‹œํ•˜๊ฒ ์ง€๋งŒ ๋‚˜๋Š” ๋‚ด ์ผ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

UserVoice๋Š” ์ด๋ฒˆ ๋‹ฌ์— ์™„์ „ํžˆ ์‚ฌ์šฉ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

ํŠน์ • ์ œํ’ˆ์˜ ๊ฒฝ์šฐ GitHub ์ €์žฅ์†Œ(์˜ˆ: ์ด์™€ ๊ฐ™์€)๋Š” ๊ด€๋ จ ์—”์ง€๋‹ˆ์–ด๋ง ํŒ€์—์„œ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”ผ๋“œ๋ฐฑ์„ ์œ„ํ•œ ์ตœ๊ณ ์˜ ์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

ํŠน์ • repo์˜ ์ œํ’ˆ๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ํ”ผ๋“œ๋ฐฑ์€ Feedback Hub๋ฅผ ์ด์šฉํ•ด์ฃผ์„ธ์š”. ํŠนํžˆ API ๋ฐ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ํ•˜์œ„ ๋ฒ”์ฃผ๊ฐ€ ์žˆ๋Š” "๊ฐœ๋ฐœ์ž ํ”Œ๋žซํผ" ๋ฒ”์ฃผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ UserVoice์— ๋Œ€ํ•œ ๋งŽ์€ ๊ธฐ๋ก๊ณผ ์ด์ „ ํ”ผ๋“œ๋ฐฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ(์•„์ง๋„ ์ถ”์ ํ•  ์˜ˆ์ •์ž„) GitHub์™€ Feedback Hub ๋ชจ๋‘ UserVoice๋ณด๋‹ค ์—”์ง€๋‹ˆ์–ด๋ง ํŒ€๊ณผ ์ž‘์—… ํ•ญ๋ชฉ ์ถ”์ ์— ๋” ์ง์ ‘์ ์ธ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ธ์ •์ ์ธ ๋ณ€ํ™”์—ฌ์•ผ ํ•œ๋‹ค. ๋‹ค์–‘ํ•œ ์ง€์› ๋ฐ ํ”ผ๋“œ๋ฐฑ ๋งํฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋‘ ์ฑ„๋„์—์„œ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋ณด๊ณ  ์žˆ์œผ๋ฉฐ ํ”ผ๋“œ๋ฐฑ๊ณผ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์— ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@jesbis ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค.

WinForms์˜ ๊ฒฝ์šฐ ์ƒˆ WinUI ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•  ๋•Œ ์†์„ฑ ์ฐฝ์ด ๊ณ„์† ์ž‘๋™ํ•˜๊ณ  WinUI ์ปจํŠธ๋กค์˜ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ•˜๋ฃจ ์ข…์ผ HTML์„ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ(์ผ๋ฐ˜์ ์œผ๋กœ Asp.net MVC) ์ปจํŠธ๋กค์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ •์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์ง€๋‚œ 20๋…„ ๋™์•ˆ ์†์„ฑ ์ฐฝ์„ ์ฆ๊ฒจ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

@Dean-NC WinFoms/Windows Forms๊ฐ€ ์•„๋‹Œ XAML ๋””์ž์ด๋„ˆ์— ๋Œ€ํ•ด ๋ฌป๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ์š”? ๊ทธ๋ ‡๋‹ค๋ฉด XAML ๋””์ž์ด๋„ˆ์—์„œ ํ•ญ๋ชฉ์„ ์„ ํƒํ•  ๋•Œ ์†์„ฑ ํŒจ๋„์ด WinUI ์ปจํŠธ๋กค์— ๋Œ€ํ•ด ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@marb2000 ๋‚˜๋Š” ์ˆœ์ง„ํ•˜๊ฒŒ๋„ WinUI 3๊ฐ€ ์ƒˆ๋กœ์šด ์ปจํŠธ๋กค์„ WinForms์— ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ๋งค๋„๋Ÿฝ๊ณ  ๋ ˆ๊ฑฐ์‹œ ์ปจํŠธ๋กค๊ณผ WinUI ์ปจํŠธ๋กค์ด ๋ชจ๋‘ ์žˆ๋Š” ํผ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ  ์†์„ฑ ์ฐฝ์ด ์ž‘๋™ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ๋ฐ WinUI ์ปจํŠธ๋กค ๋ชจ๋‘์— ๋Œ€ํ•ด.

๋‚˜๋Š” ์œ„์˜ ์ „์ฒด ๊ฒŒ์‹œ๋ฌผ์„ ์ฝ์—ˆ๊ณ  (WinForms ๊ฐœ๋ฐœ์ž๋กœ์„œ) ๋งŽ์€ ํฅ๋ถ„์„ ๊ฐ€์ง€๊ณ  ์ด๊ฒƒ์„ ๋”ฐ๋ผ ์™”์ง€๋งŒ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋†’์€ ์ˆ˜์ค€์˜ ์›Œํฌ ํ”Œ๋กœ์šฐ๋ฅผ ์˜คํ•ด ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (๋‹ค์‹œ WinForms์˜ ๊ด€์ ์—์„œ ).

๋‚˜๋Š” ์˜ค๋žซ๋™์•ˆ WinForms๊ฐ€ ์•ž์œผ๋กœ ๋ช‡ ๋…„ ๋™์•ˆ ์—ฌ์ „ํžˆ ์ข‹์€ ์ผ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์ง€๋งŒ, ๊ฐ€์žฅ ํฐ ์•ฝ์ ์€ ๊ธฐ๋ณธ ์ปจํŠธ๋กค์ด ๊ตฌ์‹์œผ๋กœ ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ…์ŠคํŠธ ์ƒ์ž๋Š” ํŒจ๋”ฉ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ€๋Š˜๊ณ  ์ž‘์€ ๋ผ๋””์˜ค ๋ฐ ํ™•์ธ๋ž€ ๋ฒ„ํŠผ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. , ๋“ฑ.). Win 10 ์ปจํŠธ๋กค(ํ…์ŠคํŠธ ์ƒ์ž, ๋ผ๋””์˜ค, ํ™•์ธ๋ž€)์˜ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋งŒ์œผ๋กœ๋„ WinForms์— ์ƒˆ๋กœ์šด ์ƒ๋ช…์„ ๋ถˆ์–ด๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋ ˆ๊ฑฐ์‹œ ์ปจํŠธ๋กค๊ณผ ์ƒˆ ์ปจํŠธ๋กค์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ƒˆ WinForms ํ”„๋กœ์ ํŠธ์˜ ์›Œํฌํ”Œ๋กœ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๊ฐ์‚ฌ ํ•ด์š”.

@marb2000 ๋‚˜๋Š” ์ˆœ์ง„ํ•˜๊ฒŒ๋„ WinUI 3๊ฐ€ ์ƒˆ๋กœ์šด ์ปจํŠธ๋กค์„ WinForms์— ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ๋งค๋„๋Ÿฝ๊ณ  ๋ ˆ๊ฑฐ์‹œ ์ปจํŠธ๋กค๊ณผ WinUI ์ปจํŠธ๋กค์ด ๋ชจ๋‘ ์žˆ๋Š” ํผ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ  ์†์„ฑ ์ฐฝ์ด ์ž‘๋™ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ๋ฐ WinUI ์ปจํŠธ๋กค ๋ชจ๋‘์— ๋Œ€ํ•ด.

๋‚˜๋Š” ์œ„์˜ ์ „์ฒด ๊ฒŒ์‹œ๋ฌผ์„ ์ฝ์—ˆ๊ณ  (WinForms ๊ฐœ๋ฐœ์ž๋กœ์„œ) ๋งŽ์€ ํฅ๋ถ„์„ ๊ฐ€์ง€๊ณ  ์ด๊ฒƒ์„ ๋”ฐ๋ผ ์™”์ง€๋งŒ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋†’์€ ์ˆ˜์ค€์˜ ์›Œํฌ ํ”Œ๋กœ์šฐ๋ฅผ ์˜คํ•ด ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (๋‹ค์‹œ WinForms์˜ ๊ด€์ ์—์„œ ).

๋‚˜๋Š” ์˜ค๋žซ๋™์•ˆ WinForms๊ฐ€ ์•ž์œผ๋กœ ๋ช‡ ๋…„ ๋™์•ˆ ์—ฌ์ „ํžˆ ์ข‹์€ ์ผ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์ง€๋งŒ, ๊ฐ€์žฅ ํฐ ์•ฝ์ ์€ ๊ธฐ๋ณธ ์ปจํŠธ๋กค์ด ๊ตฌ์‹์œผ๋กœ ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ…์ŠคํŠธ ์ƒ์ž๋Š” ํŒจ๋”ฉ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ€๋Š˜๊ณ  ์ž‘์€ ๋ผ๋””์˜ค ๋ฐ ํ™•์ธ๋ž€ ๋ฒ„ํŠผ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. , ๋“ฑ.). Win 10 ์ปจํŠธ๋กค(ํ…์ŠคํŠธ ์ƒ์ž, ๋ผ๋””์˜ค, ํ™•์ธ๋ž€)์˜ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋งŒ์œผ๋กœ๋„ WinForms์— ์ƒˆ๋กœ์šด ์ƒ๋ช…์„ ๋ถˆ์–ด๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋ ˆ๊ฑฐ์‹œ ์ปจํŠธ๋กค๊ณผ ์ƒˆ ์ปจํŠธ๋กค์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ƒˆ WinForms ํ”„๋กœ์ ํŠธ์˜ ์›Œํฌํ”Œ๋กœ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๊ฐ์‚ฌ ํ•ด์š”.

์•ฑ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  WinUI ์ฐฝ๊ณผ ํŽ˜์ด์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ตœ์‹  XAML UI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UI๋ฅผ ์™„์ „ํžˆ ๋˜๋Š” ์กฐ๊ธˆ์”ฉ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ํฝ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด Winforms ๋ฐ WPF UI์— XAML์„ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•œ XAML ์•„์ผ๋žœ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Blazor ํŒ€์€ Uno์™€ ํ˜‘๋ ฅํ•˜์—ฌ Uno(ํŠนํžˆ ์„œ๋ฒ„ ์ธก)์— ํฌํ•จ๋œ ํ˜ธ์ŠคํŒ… ๋ชจ๋ธ ์ค‘ ์ผ๋ถ€๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ Blazor์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Uno UI(๋ฐ WinUI 3) ๋ Œ๋”๋ง/๋น„์ฃผ์–ผ ๋ ˆ์ด์–ด๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.... ๋ฐ/๋˜๋Š” Blazor์šฉ Xaml Islands?

๋Œ€๋ถ€๋ถ„์˜ ํ”ผ๋“œ๋ฐฑ์ด ์ฃผ๋กœ xaml ๊ณต๊ฐ„์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค๋กœ๋ถ€ํ„ฐ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ์•ฝ๊ฐ„ ์˜์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€ ๋ฒ„์ „์„ ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์ข‹์„์ง€ ๋ชจ๋ฅด์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ UWP๋ฅผ ๊ธฐํ”ผํ•œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ์–ด๋“ค์ผ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํŒ€์€ 1๊ฐœ์˜ UWP ์•ฑ๋งŒ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋” ์ด์ƒ ๋ฐœ์ „ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

UWP ์ œํ’ˆ์—์„œ Stimulsoft Reports๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์œผ๋ฉฐ UWP ์‚ฌ์šฉ๋ฅ ์ด ๋„ˆ๋ฌด ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ WinUI๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐœ๋ฐœ์ž๋ณด๋‹ค ์–‘์‹์„ ์œ ์ธํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋‚ด์žฅ๋œ ํ‘œ ํ˜•์‹์˜ ๋ณด๊ณ ์„œ ์ž‘์„ฑ๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์‹œ๊ฐ์ ์ธ ์‚ฌ๋žŒ๋“ค์˜ ๊ธฐ๋ถ„์„ ์ƒํ•˜๊ฒŒ ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค :-)

์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ๊ณผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด๊ณ  ์‹œ์Šคํ…œ ์—†์ด ์–ด๋–ป๊ฒŒ ํ˜„๋Œ€์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ์•ฑ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋Œ€ํ•œ ํ˜‘๊ณก์ž…๋‹ˆ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค ์‚ฌ์šฉ์ž๋Š” ํ‘œ๋กœ ์ž‘์„ฑ๋œ ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•œ ๋‹ค์Œ ์ธ์‡„ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์†ก์žฅ, ๊ฒฌ์ ์„œ, ๋ช…์„ธ์„œ ๋ฐ ๊ธฐํƒ€ ๋„๊ตฌ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค/๊ธฐ์—…์ด ์—ฌ์ „ํžˆ Windows์˜ ๊ฐ€์žฅ ํฐ ์†Œ๋น„์ž๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. UWP์šฉ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์ง€ ์•Š์€ Windows ์—์ฝ”์‹œ์Šคํ…œ์˜ ๊ทผ๋ณธ์ ์ธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ”ผ๋“œ๋ฐฑ @VagueGit ๋ฐ @Elmarcotoro์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ œ์–ด๋Š” ํ˜„์žฌ ์šฐ๋ฆฌ์—๊ฒŒ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํƒ€์ด๋ฐ์ด ์ข‹์Šต๋‹ˆ๋‹ค. DataGrid ์ปจํŠธ๋กค ๋””์ž์ธ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ˆ˜์ง‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ #1500 ์„ ์ฝ๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์„ธ์š”.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •์‚ฌ๊ฐํ˜• ํ…Œ์ด๋ธ” ํ˜•์‹ ๋ฐ์ดํ„ฐ ์ œ์–ด ์™ธ์—๋„ ๋‹ค์ด์–ด๊ทธ๋žจ ์ œ์–ด๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ๊ด€๊ณ„๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฐฝ์˜์ ์œผ๋กœ ๋ฏผ์ฃผํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค UWP ๊ทธ๋ž˜ํ”„ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ณด๊ณ  ์‹œ์Šคํ…œ์œผ๋กœ๋Š” Telerik UI๊ฐ€ ํ˜„์žฌ ์ตœ๊ณ ์˜ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ค‘๊ตญ ์†๋‹ด์— "์–ด๋–ค ์‚ฌ๋žŒ์€ ์–ด๋–ค ์ง์—…์„ ์ „๋ฌธ์œผ๋กœ ํ•˜๊ณ  ์–ด๋–ค ์‚ฌ๋žŒ์€ ๋‹ค๋ฅธ ์ง์—…์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค." Telerik, DevExpress ๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์€ ๋ณด๊ณ ์— ๋Šฅ์ˆ™ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ์ปจํŠธ๋กค์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด ํŒ€์„ ํƒ“ํ•  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „์ฒด MS ์ „๋žต์„ ํƒ“ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Satya์˜ ์‹œ์ž‘๋ถ€ํ„ฐ ๋ชจ๋ฐ”์ผ ํฌ๊ธฐ, ๊ทธ๋“ค์€ ios ๋ฐ android๋ฅผ ๋” ์„ ํ˜ธํ•˜์—ฌ ๋ณด์Šค๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด UWP ์ƒํƒœ๊ณ„๊ฐ€ ์•ฝํ•ด์ง€๊ณ  ์•ฝํ•ด์ง‘๋‹ˆ๋‹ค.

ํ˜„์žฌ๋กœ์„œ๋Š” ํŠธ์œ„ํ„ฐ์— "UWP๋Š” ์ฃฝ์—ˆ๋‹ค"๋Š” ์ฃผ์žฅ์ด ์žˆ๋Š”๋ฐ, MS๊ฐ€ ์ด๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  uwp ๊ธธ์„ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

ํ˜„์žฌ๋กœ์„œ๋Š” ํŠธ์œ„ํ„ฐ์— "UWP๋Š” ์ฃฝ์—ˆ๋‹ค"๋Š” ์ฃผ์žฅ์ด ์žˆ๋Š”๋ฐ, MS๊ฐ€ ์ด๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  uwp ๊ธธ์„ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋ฐฉ๊ธˆ ๋กœ๋“œ๋งต ์Šค๋ ˆ๋“œ์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค ...

@jevansaks DataGrid ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ

@hupo376787
"๋ณด๊ณ  ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ Telerik UI๊ฐ€ ํ˜„์žฌ ์ตœ๊ณ ์˜ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค."

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด Dev Express๋Š” ํ˜„์žฌ UWP์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ณด๊ธฐ ์œ„ํ•œ ์ „์ฒด ์Šคํƒ์„ ์ œ๊ณตํ•˜๋Š” ์œ ์ผํ•œ ํšŒ์‚ฌ์ด๋ฉฐ ๊ฐ€๊ฒฉ์€ ํ”„๋ฆฌ๋ฏธ์—„ ์ชฝ์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Telerik์„ ํฌํ•จํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ œํ’ˆ์€ ๋„๊ตฌ์— ๊ณต๋ฐฑ์ด ์žˆ์–ด UWP์šฉ ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ •์ •ํ•  ์˜ํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค(ํฌ๋ง).

๋ณด๊ณ  ์‹œ์Šคํ…œ์œผ๋กœ๋Š” Telerik UI๊ฐ€ ํ˜„์žฌ ์ตœ๊ณ ์˜ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ค‘๊ตญ ์†๋‹ด์— "์–ด๋–ค ์‚ฌ๋žŒ์€ ์–ด๋–ค ์ง์—…์„ ์ „๋ฌธ์œผ๋กœ ํ•˜๊ณ  ์–ด๋–ค ์‚ฌ๋žŒ์€ ๋‹ค๋ฅธ ์ง์—…์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค." Telerik, DevExpress ๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์€ ๋ณด๊ณ ์— ๋Šฅ์ˆ™ํ•ฉ๋‹ˆ๋‹ค.

@hupo376787 ๊ฒŒ์‹œ๋ฌผ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ์•”์‹œํ•˜๊ธฐ ์ „์— ์‚ฌ์‹ค ํ™•์ธ์— ๊ฐ๋ณ„ํ•œ ์ฃผ์˜๋ฅผ Telerik Reporting ์—๋Š” WPF ๋ฐ WinForms์šฉ ๋ณด๊ณ ์„œ ๋””์ž์ด๋„ˆ๊ฐ€ ์žˆ์ง€๋งŒ UWP๋Š” ์—†์Šต๋‹ˆ๋‹ค.

DevExpress ์—๋Š” WinForms ๋ฐ WPF์šฉ ๋ณด๊ณ ์„œ ๋””์ž์ด๋„ˆ๋„ ์žˆ์ง€๋งŒ UWP๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์˜์›ํžˆ ๋ณด์กด๋˜๊ณ  ๋„๋ฆฌ ์œ ํฌ๋  ์˜ค๋ฅ˜๋ฅผ ๋ฒ”ํ•˜๊ธฐ ์ „์— ์‚ฌ์‹ค์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ด์•ผ, ์–ธ์  ๊ฐ€๋Š” ์˜›๋ง์ด ๋  ๊ฒƒ ๊ฐ™์€ ์†Œ๋ฆฌ๋„ค์š” ๐Ÿ˜‰

@hupo376787 ๊ฒŒ์‹œ๋ฌผ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ์•”์‹œํ•˜๊ธฐ ์ „์— ์‚ฌ์‹ค ํ™•์ธ์— ๊ฐ๋ณ„ํ•œ ์ฃผ์˜๋ฅผ Telerik Reporting ์—๋Š” WPF ๋ฐ WinForms์šฉ ๋ณด๊ณ ์„œ ๋””์ž์ด๋„ˆ๊ฐ€ ์žˆ์ง€๋งŒ UWP๋Š” ์—†์Šต๋‹ˆ๋‹ค.

DevExpress ์—๋Š” WinForms ๋ฐ WPF์šฉ ๋ณด๊ณ ์„œ ๋””์ž์ด๋„ˆ๋„ ์žˆ์ง€๋งŒ UWP๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์˜์›ํžˆ ๋ณด์กด๋˜๊ณ  ๋„๋ฆฌ ์œ ํฌ๋  ์˜ค๋ฅ˜๋ฅผ ๋ฒ”ํ•˜๊ธฐ ์ „์— ์‚ฌ์‹ค์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ด์•ผ, ์–ธ์  ๊ฐ€๋Š” ์˜›๋ง์ด ๋  ๊ฒƒ ๊ฐ™์€ ์†Œ๋ฆฌ๋„ค์š” ๐Ÿ˜‰

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://www.telerik.com/universal-windows-platform-ui ๋ฐ https://www.devexpress.com/products/net/controls/win10apps/๋ฅผ ์˜๋ฏธ

๋‚ด๊ฐ€ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. Dev Express๋Š” UWP์— ๋Œ€ํ•œ ๋ณด๊ณ ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํƒ€์‚ฌ ๋„๊ตฌ ๊ฐœ๋ฐœ์ž๋Š” ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! UWP์— ๋Œ€ํ•œ ๋ณด๊ณ ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋กœ๋“œ๋งต์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ์ฑ„ํŒ…์„ ํ†ตํ•ด Dev Express์— ๋ฌธ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋“ค์€ ๋งํ–ˆ๋‹ค,
"XtraReports Suite๋Š” System.Drawing ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉฐ Universal Window Applications์— ๋Œ€ํ•ด ๋™์ผํ•œ ๋„๊ตฌ ์„ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ์ด ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(https://stackoverflow.com/questions /31545389/windows-universal-app-with-system-drawing-and-possible-alternative) ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์•„์ง ์ด ๋ถ„์•ผ์— ๋Œ€ํ•œ ๋ฏธ๋ž˜ ๊ณ„ํš์„ ์„ธ์šฐ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."

@jevansaks , Microsoft UI ํŒ€๊ณผ ์ด๋Ÿฌํ•œ ํƒ€์‚ฌ ๋„๊ตฌ ์ œ๊ณต์—…์ฒด ๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํƒ€์‚ฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๊ฒ ์ง€๋งŒ UWP ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ํšŒ์‚ฌ์—์„œ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์šฉ ๋„๊ตฌ๋ฅผ UWP์— ํ†ตํ•ฉํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ๋ณด๊ณ  ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ ๊ทธ๋“ค์˜ [email protected] ์— ์—ฐ๋ฝํ•˜๋„๋ก ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค. Win UI 3.0 ํŒ€์ด ๊ทธ๋“ค์—๊ฒŒ ์—ฐ๋ฝํ•˜์—ฌ ๊ตฌํ˜„์„ ์ง€์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๋ณด๊ณ  ๋„๊ตฌ ์—†์ด ์–ด๋–ป๊ฒŒ ๋ฒ”์šฉ ํ”Œ๋žซํผ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐœ๋ฐœ์ž๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

https://www.devexpress.com/subscriptions/reporting/

๋ณด๊ณ : WinForms์˜ ๊ด€์ ์—์„œ ์ €๋Š” Telerik๊ณผ DevExpress(์ตœ์‹  ๋ฒ„์ „๋„ ํฌํ•จ)๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ Telerik๋„ ์ข‹์•˜์ง€๋งŒ DevExpress๋Š” ์ „๋ฐ˜์ ์ธ ๋””์ž์ด๋„ˆ์™€ ๊ฒฝํ—˜์ด ๋” ๋‚˜์•˜์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ›จ์”ฌ ๋” ๋ฏธ๋ฌ˜ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Telerik๋ณด๋‹ค ๋” ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. DevExpress ๋ Œ๋”๋ง ๊ธฐ์ˆ ์ด ๋” ๋ฐœ์ „ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Win UI 3.0 ํŒ€์ด ๊ทธ๋“ค๊ณผ ์—ฐ๋ฝํ•˜๊ณ  ๊ทธ๋“ค์ด ๊ตฌํ˜„์— ๋„์›€์ด ๋˜๋Š” ๋ฐฉ๋ฒ•์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „ํ™”์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋„ ๊ทธ๋“ค์—๊ฒŒ ๋‹ค๊ฐ€๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ „ํ™”์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋„ ๊ทธ๋“ค์—๊ฒŒ ๋‹ค๊ฐ€๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋“ค ๋ชจ๋‘์™€ ์ด์•ผ๊ธฐํ•˜๊ณ  ๋ธ”๋ก์ด ๋ฌด์—‡์ธ์ง€ ๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? Telerik, Grapecity, DevExpress ๋“ฑ

์ „ํ™”์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋„ ๊ทธ๋“ค์—๊ฒŒ ๋‹ค๊ฐ€๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋“ค ๋ชจ๋‘์™€ ์ด์•ผ๊ธฐํ•˜๊ณ  ๋ธ”๋ก์ด ๋ฌด์—‡์ธ์ง€ ๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? Telerik, Grapecity, DevExpress ๋“ฑ

ํ™•์‹คํžˆ, ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

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

์•ฑ์ด ์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ Windows ์•ฑ์˜ ๋ชจ์–‘๊ณผ ๋Š๋‚Œ์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ์ปจํŠธ๋กค์˜ ๊ฐ€์น˜๋Š” ๋งค์šฐ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ฐ ๊ณ ๊ฐ์— ๋Œ€ํ•ด ๋ธŒ๋žœ๋“œ๊ฐ€ ๋†’์€ ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ํ‘œ์ค€ Windows ์•ฑ์˜ ๋งŽ์€ ๊ณตํ†ต _๋™์ž‘_ ๋ฐ ์ปจํŠธ๋กค์ด ํ•„์š”ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ ์•ฑ์˜ ์ปจํŠธ๋กค ํ…œํ”Œ๋ฆฟ์„ ๋งŽ์ด ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ์ตœ์†Œํ•œ ํ•ต์‹ฌ ์Šคํƒ€์ผ์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ์˜ค๋žซ๋™์•ˆ ์šฐ๋ฆฌ๋Š” UI์šฉ Flash ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ํฌํ•จ๋œ WinForms ๋ฐฑ์—”๋“œ๋กœ ๋งŽ์€ ์•ฑ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋žต์ ์œผ๋กœ ๋งํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์•ฑ์€ ์ผ์ข…์˜ ์›น ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ๋ฅผ ์ผ๋ถ€ ํ•˜๋“œ์›จ์–ด(์˜ˆ: ํ”„๋ฆฐํ„ฐ, ๋ฐ”์ฝ”๋“œ ์Šค์บ๋„ˆ, ๋งˆ๊ทธ๋„คํ‹ฑ ์ŠคํŠธ๋ผ์ดํ”„ ๋ฆฌ๋”, RFID ์Šค์บ๋„ˆ, ์นด๋ฉ”๋ผ, ์นด๋“œ ๊ฒฐ์ œ ํ•˜๋“œ์›จ์–ด, ์ž๋™ ํŒ๋งค๊ธฐ ์Šคํƒ€์ผ ํ˜„๊ธˆ ๊ฒฐ์ œ)์™€ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ ๋“ฑ) ๋ฐ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋Œ€๋‹ค์ˆ˜๋Š” ์—ญ์‚ฌ์ ์œผ๋กœ UWP SDK๊ฐ€ ์•„๋‹Œ Win32 SDK์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋‘ ๊ฐ€์ง€ ์ด์œ ๋กœ ์ธํ•ด ๋Œ€๋ถ€๋ถ„์˜ ๊ณผ๊ฑฐ ์•ฑ์€ WinForms ์•ฑ์ด๊ณ  ์ตœ์‹  ์•ฑ์€ ๋Œ€๋ถ€๋ถ„ WPF ์•ฑ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ UWP ์•ฑ(์ฃผ๋กœ Windows์˜ ์ •๋ง ์ข‹์€ ํ• ๋‹น ์•ก์„ธ์Šค/ํ‚ค์˜ค์Šคํฌ ๋ชจ๋“œ ๊ธฐ๋Šฅ์˜ ์ด์ ์„ ์–ป๊ธฐ ์œ„ํ•ด)์„ ๋นŒ๋“œํ–ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ WPF์™€ ๋น„๊ตํ•˜์—ฌ ์ž‘์—…ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ํ˜ธํ™˜๋˜๋Š” ํ•˜๋“œ์›จ์–ด SDK๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. .

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ตœ์‹  UI๋กœ Win32 ํ˜ธํ™˜ ์•ฑ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก XAML ์•„์ผ๋žœ๋“œ์— ๋งค์šฐ ํฅ๋ฏธ๋ฅผ ๋Š๋‚๋‹ˆ๋‹ค. Fluent ๋“ฑ๊ณผ ๊ฐ™์€ ํšจ๊ณผ).

ํŠน์ • ์งˆ๋ฌธ์— ๋‹ตํ•˜๋ ค๋ฉด:

์–ด๋–ค ํ…œํ”Œ๋ฆฟ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šฐ์‹ ๊ฐ€์š”?

.NET Core๊ฐ€ ์žˆ๋Š” C#, WinUI 3.0์ด ์˜ค๋ฒ„๋ ˆ์ด๋œ Win32๊ฐ€ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ ์•ฑ ํ˜„๋Œ€ํ™”๋ฅผ ์œ„ํ•œ Xaml Islands๋ฅผ ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ?

๋„ค, ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ๊ทธ๋“ค๊ณผ ํ•จ๊ป˜ ํ”Œ๋ ˆ์ดํ–ˆ์„ ๋•Œ ์ƒ๋Œ€์ ์œผ๋กœ ๋งŒ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋ก ์šฐ๋ฆฌ๊ฐ€ _single_ ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์ง€๋งŒ ์ „์ฒด ์‚ฌ์šฉ์ž ์ •์˜ UI์— ๋Œ€ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ์ •๋„์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ๋˜ ์ฃผ๋œ ์ด์œ ๋Š” ์šฐ๋ฆฌ๊ฐ€ Win32 ์•ฑ์— ๋Œ€ํ•œ Lottie ์ง€์›์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

Windows 10์—์„œ ํ™•์žฅ๋œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด Xaml Islands๋ฅผ ๋” ์œ ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค๊นŒ์š”?

์„ค๋งˆ; ์šฐ๋ฆฌ๋Š” ๊ฑฐ์˜ ํ•ญ์ƒ ๋Œ€์ƒ PC๋ฅผ ์ œ์–ดํ•˜๊ณ  ํ•ญ์ƒ ์ตœ์‹  ํ˜ธํ™˜ ๋ฆด๋ฆฌ์Šค๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Visual Studio ๋˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

์˜ˆ.

๊ธฐ์กด UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ์™€ WinUI 3.0 ์•ฑ ๊ฐ„์˜ ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?

์•„์ฃผ ์ตœ์†Œํ•œ์˜. ์ฃผ์š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋Š” ํ•ต์‹ฌ ์š”์†Œ ์Šคํƒ€์ผ ์ง€์ •์„ ์œ„ํ•ด StaticResource ํ‚ค๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ฑ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์‰ฝ๊ฒŒ ๋‹ค์‹œ ์ปดํŒŒ์ผ ๋ฐ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๋Š” UWP Xaml ์ œ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” WinRT ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ๊ณผ๊ฑฐ์— Syncfusion UWP ์ œ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

WinUI 3์—์„œ UWP Xaml ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

์œ„์™€ ๋กœ๋“œ๋งต์— ์š”์•ฝ๋œ ์ „๋ฐ˜์ ์ธ 3.0 ๊ณ„ํš์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์‹ ๊ทœ ๋ฐ ๊ธฐ์กด Windows ์•ฑ์— WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŠนํžˆ WinUI๊ฐ€ ๊ณต๊ฐœ์ ์œผ๋กœ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋“œ์›จ์–ด ํ˜ธํ™˜์„ฑ ์ด์œ ๋กœ ์ธํ•ด ์—ญ์‚ฌ์ ์œผ๋กœ ์šฐ๋ฆฌ๋ฅผ ์ž ๊ทธ๋˜ UWP ์•ฑ ๋ฐ ๋ณด์•ˆ ๋ชจ๋ธ์—์„œ UWP ์ปจํŠธ๋กค์ด ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

Microsoft์—์„œ ์•ฑ UI๋ฅผ ๋นŒ๋“œํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ง€์นจ์„ ํ†ตํ•ด ์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฑ์—”๋“œ์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ์•ฑ์ด WinUI ํ”„๋ก ํŠธ์—”๋“œ๋กœ ๋๋‚  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ์— WinUI 3.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ? ์ƒˆ Win32 ์•ฑ์„ ๋งŒ๋“ค๊ณ  MSIX๋กœ ํŒจํ‚ค์ง•ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? WPF ์•ฑ์— ์ƒˆ ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Fluent UI๋กœ C++ MFC ์•ฑ ํ˜„๋Œ€ํ™”?

๋” ํ›Œ๋ฅญํ•˜๊ณ  ๋ช…ํ™•ํ•œ ๋ฌธ์„œ(๋˜๋Š” ํ‘œ์ค€ ์ปจํŠธ๋กค์˜ ๊ธฐ๋ณธ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „ ์•ฑ์—์„œ ๋ณด๋‹ค ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋Š” ์ปจํŠธ๋กค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ํ‘œ์ค€ ์ปจํŠธ๋กค์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ธฐ๋ฅผ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ž์‹ ์˜ ์‚ฌ์šฉ์ž ์ปจํŠธ๋กค์„ ๋กค๋งํ•ด์•ผ ํ•  ๋•Œ. ์˜ˆ๋ฅผ ๋“ค์–ด, WPF๋กœ ๋นŒ๋“œ๋œ ์ตœ๊ทผ ์•ฑ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‚ ์งœ ์„ ํƒ๊ธฐ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ปจํŠธ๋กค์ด ํ„ฐ์น˜์— ๋Œ€ํ•ด ์ž˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ณ  ํฌ๊ธฐ, ๊ธ€๊ผด, ํŒ์—… ์•„์ด์ฝ˜ ๋“ฑ์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์„ฑ๊ฐ€์‹  ์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์œ„์˜ ๋กœ๋“œ๋งต์„ ๊ฐ์•ˆํ•  ๋•Œ ์•ž์œผ๋กœ _default_๋กœ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์•ฑ์— WinUI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ตœ์†Œํ•œ ์ ๋‹นํžˆ ํ„ฐ์น˜ ์นœํ™”์  ์ธ ๊ธฐ๋ณธ ๋‚ ์งœ ์„ ํƒ๊ธฐ ์ปจํŠธ๋กค์ด ์žˆ๋‹ค๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ํ™•์‹  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํ•ด๋‹น ์ปจํŠธ๋กค์˜ ๊ธฐ๋ณธ/์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ…œํ”Œ๋ฆฟ ๋“ฑ์„ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ณ ๊ฐ์˜ ๋ฃฉ์•คํ•„์— ๋Œ€ํ•œ ๋””์ž์ธ ์ฆ๋ช…๊ณผ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์žฌ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋Œ€๋žต ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ, TextBox ์ปจํŠธ๋กค์˜ ํ—ค๋” ์œ ํ˜•(๊ธ€๊ผด ํฌ๊ธฐ, ๋‘๊ป˜, ํŒจ๋ฐ€๋ฆฌ)์„ ์ž…๋ ฅ ํ…์ŠคํŠธ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์Šคํƒ€์ผ ์ง€์ •ํ•˜๋Š” ๊ฐ€์žฅ ๊น”๋”ํ•œ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด ํ‘œ์ค€ HeaderTemplate์ด ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆ๋ฒ•์˜ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ํ…œํ”Œ๋ฆฟ ์ž์ฒด๋ฅผ ์žฌ์ •์˜ํ•ด์•ผ ํ•˜๋‚˜์š”? ํ…œํ”Œ๋ฆฟ์„ ์žฌ์ •์˜ํ•˜๋ฉด ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์˜ ๋งˆํฌ์—…์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰/์ง€์›ํ•ฉ๋‹ˆ๊นŒ?).

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‹ซํ˜”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€๋งŒ, ๋‚ด๊ฐ€ ์ œ๊ธฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž๋“ค์— ์˜ํ•ด ์ œ๊ธฐ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋กœ ์ž‘์—…ํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ์ž…๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ์ƒ์ž:
์‚ฌ์šฉ์ž๊ฐ€ TextBox๋ฅผ ํŽธ์ง‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋จผ์ € TextBox๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ง€์šฐ๊ธฐ ๋ฒ„ํŠผ์„ ํ‘œ์‹œํ•œ ๋‹ค์Œ ์ง€์šฐ๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ TextBox๋ฅผ ์ง€์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋กœ ์ž‘์—…ํ•  ๋•Œ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ TextBox๋ฅผ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ํƒญํ•  ๋•Œ ํ…์ŠคํŠธ๊ฐ€ ๊ฐ•์กฐ ํ‘œ์‹œ๋˜์–ด ๋ฎ์–ด์“ธ ์ค€๋น„๊ฐ€ ๋œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๋“œ๋ทฐ/๋ฆฌ์ŠคํŠธ๋ทฐ:
Gridview ๋ฐ ListView๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ปฌ๋ ‰์…˜์„ ํšจ๊ณผ์ ์œผ๋กœ ํƒญํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ListView๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Tab์ด ๊ฐ™์€ ํ–‰์˜ ์ปจํŠธ๋กค๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ ์ปจํŠธ๋กค ํ–‰์œผ๋กœ Tab์€ ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ListView๊ฐ€ ํฌ์ปค์Šค๋ฅผ ์žƒ๊ณ  Tab์ด ์‹œ๊ฐ์  ํŠธ๋ฆฌ์˜ ๋‹ค์Œ ์ปจํŠธ๋กค๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งค์šฐ ์„ฑ๊ฐ€์‹  ๊ฒƒ์œผ๋กœ ์ œ๊ธฐํ•œ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

image

@์—˜๋งˆ๋ฅด์ฝ”ํ† ๋กœ

์–ธ๊ธ‰ํ•œ ๊ฐ ๊ฐœ์„  ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ƒˆ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ WinUI ํŒ€์€ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— WinUI 3๋ฅผ ๋ฆด๋ฆฌ์Šคํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ฃผ๋กœ ๊ฒŒ์‹œ๋ฌผ ์ƒ๋‹จ์— ์žˆ๋Š” 2๊ฐœ์˜ "์ผ๋ฐ˜ ์งˆ๋ฌธ"์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

WinUI์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ Blazor ํ˜ธ์ŠคํŒ… ๋ชจ๋ธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Blazor ์ปจํŠธ๋กค์„ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์›น์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ WinUI์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Blazor ๋กœ๋“œ๋งต์—๋Š” WebView ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ด๋Ÿฌํ•œ ๋ฏธ๋ž˜ ๊ฐœ๋…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปจํŠธ๋กค์˜ UI๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์˜ .Net Standard ๋ถ€๋ถ„๊ณผ ํ•จ๊ป˜ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

WinUI์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ Blazor ํ˜ธ์ŠคํŒ… ๋ชจ๋ธ ์ง€์›

Blazor ์ธก์—์„œ FWIW์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/dotnet/aspnetcore/issues/11082

ํ™•์‹คํžˆ, ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

@jevansaks ๋ฃจํ”„์— ๋“ค์–ด๊ฐ€๋Š”

WinUI 3.0์—์„œ ํŠธ๋ ˆ์ด ๋ฉ”๋‰ด/์•„์ด์ฝ˜ ๋ฉ”๋‰ด์˜ ์ผ๊ด€์„ฑ์„ ๋†’์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์•ฑ์€ ๋‹ค๋ฅธ ๊ฐ„๊ฒฉ์„ ๊ฐ€์ง€๋ฉฐ Win32 ์•ฑ์€ ๊ธ€๊ผด ๋ Œ๋”๋ง/๊ฐ„๊ฒฉ/ํ…Œ๋งˆ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๋”ฐ๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์ด๋ฏธ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค!

๋ฐ”ํƒ• ํ™”๋ฉด์˜ WinUi๋Š” ์ฐฝ ํ‘œ์‹œ/์ˆจ๊ธฐ๊ธฐ, ์ฐฝ ์œ„์น˜, ์ฐฝ ํฌ๊ธฐ, ๋„ํ‚น/๋„ํ‚น ํ•ด์ œ ๋“ฑ ์ฐฝ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํžˆ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@alexandrevk ์•„์ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ž…๋‹ˆ๋‹ค. ์œˆ๋„์šฐ API ๋””์ž์ธ์„ ๋ณด์…จ๋‚˜์š”? https://github.com/microsoft/ProjectReunion/issues/157

์ฐฝ๊ตฌ ๊ณต์ง€ ๊ฒŒ์‹œ๋ฌผ์— ๋งํฌํ•ด

@alexandrevk - Windows์—์„œ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ/์Šค์™‘์ฒด์ธ ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Win32 ๋ฐ UWP์—์„œ WinUI ์ฝ˜ํ…์ธ ์™€ ํ•จ๊ป˜ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ฐฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Reunion์šฉ API๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ์ฐฝ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋Š” ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก WinUI ์ฐฝ ํด๋ž˜์Šค๋กœ ์ถ”์ƒํ™”๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋” ๋จผ ๊ธธ์ž…๋‹ˆ๋‹ค. ์ฐฝ ์˜์—ญ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์‚ฌ์–‘์€ ํŒŒ์ดํ”„์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์† ์ง€์ผœ๋ด ์ฃผ์‹ญ์‹œ์˜ค.

๊ฐœ์ธ ์‚ฌ์šฉ์ž(์˜ˆ: ๋น„๊ธฐ์—…/ํšŒ์‚ฌ) ๋ฐ C++๋กœ๋งŒ ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด, ์ œ๊ฐ€ ๊ณตํ—ˆ์— ์™ธ์น˜๋Š” ๊ณ ๋…ํ•œ ๋ชฉ์†Œ๋ฆฌ์ผ์ง€๋ผ๋„ ์ด๋Ÿฌํ•œ ์ƒˆ๋กœ์šด UI ์‹œ์Šคํ…œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ UWP์™€ ๊ทธ๋“ค์ด ๊ตฌ์ถ•ํ•œ ๊ทธ ๋”์ฐํ•œ ํŒจํ‚ค์ง• ์‹œ์Šคํ…œ์— ๋ฌถ์—ฌ ์žˆ๋‹ค๋ฉด, ๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๋“  ํ•ญ์ƒ ์–ด๋‘  ์†์— ๊ฐ‡ํžˆ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (WinRT ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ์•„์ง WinUI๋ฅผ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‚˜์—๊ฒŒ๋Š” ๊ฑฐ์˜ ๋น„์Šทํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.)
์‹ค์ œ๋กœ UWP ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ๋˜๋Š” ์•„๋ฌด๋„ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ? (์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ afaik์—์„œ ์‹ซ์–ดํ•จ) '๋„ค์ดํ‹ฐ๋ธŒ'๋ผ๊ณ  ํ•˜๋ฉด ์™œ ์ง„์ •ํ•œ '๋„ค์ดํ‹ฐ๋ธŒ'๊ฐ€ ์•„๋‹Œ์ง€์š”. ์˜ˆ: ๋ช‡ ๊ฐœ์˜ #include, .lib ๋˜๋Š” ๋‘ ๊ฐœ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  STANDARD C++๋กœ ์•ฑ์„ ๋นŒ๋“œํ•˜์„ธ์š”.
1000๋ฒˆ์งธ๋กœ win32๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๋•Œ Qt์™€ ๊ฐ™์€ ๊ฒƒ์— ์˜์กดํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๊ณต์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์†Œ ๋‚ก์•„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ๋งค์ผ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์— ๋Œ“๊ธ€์„ ๋‹ฌ ๊ณณ์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@nl-n WinUI์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” UWP ์•ฑ์œผ๋กœ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด๊ฒƒ์€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ 2๋ถ€ํ„ฐ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.
_ํ˜„์žฌ_ msix๋กœ ํŒจํ‚ค์ง•ํ•ด์•ผ ํ•˜์ง€๋งŒ msix๋Š” ์‹ค์ œ๋กœ ์•ฑ์„ ๋ฐฐํฌ(๋ฐ ์—…๋ฐ์ดํŠธ)ํ•˜๋Š” ๊ฝค ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

@dotMorten ๊ทธ๊ฒƒ์€ ํฐ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์Šคํ† ์–ด๋ฅผ ํ†ตํ•œ ์‚ฌ์ด๋“œ ๋กœ๋”ฉ/์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Windows๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์ „(๋˜๋Š” ์„ค์น˜ ์งํ›„)์— ์Šคํ† ์–ด๋ฅผ ๋น„ํ™œ์„ฑํ™”/์ œ๊ฑฐํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ์ด ํ•œ ๋ช…๋„ ์—†๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‹ค์†Œ ์ˆ˜์‚ฌํ•™์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์š”์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์••์ถ•ํ•˜์—ฌ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ).
๊ทธ๋Ÿฐ ๋‹ค์Œ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ W10 ์„ค์น˜์กฐ์ฐจ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ๋„ ์žˆ์Šต๋‹ˆ๋‹ค...
๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด 3.0์ด ํ–ฅํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ฃ๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ xaml์„ ์‹ซ์–ดํ•˜๋Š” ๋งŒํผ ํ™˜์˜ํ•  ๋งŒํ•œ ์ถ”๊ฐ€ ์‚ฌํ•ญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
VS์— ์ „์ฒด 50GB UWP ์›Œํฌ๋กœ๋“œ๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ ์–ป์„ ์ˆ˜ ์žˆ์„๊นŒ์š”? ๐Ÿ™ (๊ณผ์žฅํ•œ๊ฑด ์•Œ์ง€๋งŒ ๊ทธ๋ž˜๋„)

์ด ์Šค๋ ˆ๋“œ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ @MarkIngramUK ๋ฅผ ์ธ์šฉํ•˜๋ ค๋ฉด:

์ง€๊ธˆ์€ 2019๋…„, ๋น ๋ฅธ ๋„ค์ดํ‹ฐ๋ธŒ UI๋ฅผ ์›ํ•˜๊ณ  CreateWindowExW , GDI ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ๊ณ ๋ คํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(์žฌ๋ฏธ์žˆ๊ฒŒ๋„) ๋ง ๊ทธ๋Œ€๋กœ ์ง€๊ธˆ ๋‹น์žฅ ํ•ด์•ผ ํ•˜๋Š” ์ผ์ด๋ฉฐ, ์†Œ๋ฆฌ๋งŒํผ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. :)

@nl-n ๋ˆ„๊ฐ€ ๊ฐ€๊ฒŒ์— ๋Œ€ํ•ด ๋ญ๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ? MSIX๋Š” MSI์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์•ฑ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ ํด๋ฆญํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์ ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 100% ์™„์ „ ์ œ๊ฑฐ๋„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค(๊ฑฐ๋Œ€ํ•œ ์—‰๋ง์„ ๋งŒ๋“œ๋Š” MSI์™€ ๋ฐ˜๋Œ€).

๋‚˜๋Š” ์ƒ์ ์„ ๋น„ํ™œ์„ฑํ™”/์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์„ ํ•œ ๋ช…๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ํ”ํ•œ ์ผ์€ ์•„๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์„ ์–ด๋–ป๊ฒŒ ๋ฐฐํฌํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ

์šฐ์„  ์Šคํ† ์–ด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๋„๋ก ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์••์ถ•ํ•˜์—ฌ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

MSIX๋Š” ์Šคํ† ์–ด ์—†์ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  Windows ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฅผ ์œ„ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ํ™œ์„ฑํ™”ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํŒจํ‚ค์ง€๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ๋กœ ์ด์ „์— ์„œ๋ช…๋œ ๊ฒฝ์šฐ. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ PC์—์„œ ์Šคํ† ์–ด๋ฅผ ์ œ๊ฑฐํ•œ ๊ฒฝ์šฐ MSIX/APPX AppInstaller๋„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ทธ๋“ค์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ๊ฐ€๋ณ€์„ฑ์„ ์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ W10 ์„ค์น˜์กฐ์ฐจ ๊ฑฐ๋ถ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๊ฐ€ ๋งํ–ˆ๋‹ค.

VS์—์„œ๋„ ์ „์ฒด 50GB UWP ์›Œํฌ๋กœ๋“œ

๋‹จ์ผ SDK๋Š” ์•ฝ 3GB์ž…๋‹ˆ๋‹ค. 10240๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์šด๋กœ๋“œํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

@nl-n ๋ˆ„๊ฐ€ ๊ฐ€๊ฒŒ์— ๋Œ€ํ•ด ๋ญ๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ? MSIX๋Š” MSI์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์•ฑ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ ํด๋ฆญํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์ ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 100% ์™„์ „ ์ œ๊ฑฐ๋„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค(๊ฑฐ๋Œ€ํ•œ ์—‰๋ง์„ ๋งŒ๋“œ๋Š” MSI์™€ ๋ฐ˜๋Œ€).

๊ทธ๊ฒƒ์€ Visual Studio๊ฐ€ 'Microsoft ์Šคํ† ์–ด๋ฅผ ํ†ตํ•œ ์‚ฌ์ด๋“œ๋กœ๋“œ/์„ค์น˜'์— ๋Œ€ํ•ด ์ œ๊ณตํ•˜๋Š” ์„ค๋ช…์—์„œ ๋‚˜์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. msix์—์„œ ์ฐพ์€ ์œ ์ผํ•œ ๋‹ค๋ฅธ ์ •๋ณด๋Š” msdn์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ msix ํŒจํ‚ค์ง€๋Š” ์ƒŒ๋“œ๋ฐ•์Šค/๊ฐ€์ƒํ™”๋œ 'appx' ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. , winapi์™€ ์ง์ ‘ ์ž‘๋™ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ๊ฑฐ์˜ ํ‚ฌ๋Ÿฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅ ํ•˜๋ ค๋ฉด ์„œ๋ช…์ด

๋˜ํ•œ ๋„ˆ๋ฌด ๋งŽ์€ ์šฉ์–ด๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜๋Š” ๊ต์ฐจ ์ „์„  ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ UWP์— ๋Œ€ํ•ด ๋งŽ์ด ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ํ”ํ•œ ์ผ์€ ์•„๋‹ˆ๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ํ”ํ•˜๊ณ  ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜„

์–ด์จŒ๋“  ํƒˆ์„ ํ•˜๋ ค๋Š” ์˜๋„๋Š” ์•„๋‹ˆ์—ˆ์œผ๋ฏ€๋กœ ์ง€๊ธˆ์€ CreateWindowExW๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋Œ์•„๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿคฃ

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