Microsoft-ui-xaml: ์—…๋ฐ์ดํŠธ: WinUI 3 ๋กœ๋“œ๋งต ํ”ผ๋“œ๋ฐฑ

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

์—…๋ฐ์ดํŠธ: WinUI 3 ๋กœ๋“œ๋งต

์ง€๊ธˆ๊นŒ์ง€ WinUI 3 ๋กœ๋“œ๋งต(#717)์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ํ† ๋ก ๊ณผ ํ”ผ๋“œ๋ฐฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ํŒ€์€ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์˜๊ฒฌ๊ณผ ๋ฌธ์ œ์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์ฃผ์š” ๊ด€์‹ฌ ๋ถ„์•ผ์— ๋Œ€ํ•ด ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์šฉ์„ฑ ๋กœ๋“œ๋งต

2.2 ์•ˆ์ • ์ถœ์‹œ

WinUI์˜ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค๋Š” 7์›”์— 2.2 ์•ˆ์ • ๋ฒ„์ „์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 3.0์—์„œ ๋ณ‘๋ ฌ๋กœ ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ ์ถ”๊ฐ€ ๊ฐœ๋ฐœ์€ 2.x ๋ฒ„์ „์—์„œ ๊ณ„์†๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

3.0-ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

์šฐ๋ฆฌ๋Š” ์˜ฌํ•ด๊ฐ€ ๋๋‚˜๊ธฐ ์ „์— WinUI 3.0์˜ ์ดˆ๊ธฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ๋ฆด๋ฆฌ์Šคํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ๊ถค๋„์— ์˜ค๋ฅด๊ณ  ์žˆ์ง€๋งŒ ํƒ€์ด๋ฐ์ด ์ด‰๋ฐ•ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ๊ณผ ๊ทธ๋•Œ ์‚ฌ์ด์— ํ•ด์•ผ ํ•  ์ผ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ๋ณด๊ธฐ์—๋Š” ๊ธฐ๋Šฅ์ด ์—†์ง€๋งŒ ๊ธฐ๋ณธ ์•ฑ์„ ๋นŒ๋“œํ•˜์—ฌ WinUI 3์— ๋Œ€ํ•œ ๋Š๋‚Œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” WPF, WinForms, MFC๋ฅผ ๋น„๋กฏํ•œ ๊ธฐ์กด ์•ฑ์— WinUI UI๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ Creators Update ์ด์ƒ(15063+)์˜ Xaml Islands ์ง€์› ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒˆ UWP WinUI 3 ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ž„์‹œ Visual Studio ํ…œํ”Œ๋ฆฟ(.vsix ํ™•์žฅ๋ช…์„ ํ†ตํ•ด)๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” "๋ฐ์Šคํฌํ†ฑ์˜ WinUI"๊ฐ€ ์•„์ง ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฐธ์กฐ).

3.0 ์•ˆ์ • ์ถœ์‹œ

๋‚ด๋…„์„ ์œ„ํ•ด ๊ถค๋„์—.

์˜คํ”ˆ ์†Œ์Šค

์šฐ๋ฆฌ๋Š” ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ ์•„์ง ํ™•์ •๋œ ETA๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ถ„๊ธฐ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•˜๊ณ  ํ™œ๋ฐœํ•œ ๊ฐœ๋ฐœ์„ GitHub๋กœ ์˜ฎ๊ธธ ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ธฐ์กด WinUI 2 ์ฝ”๋“œ์— ๋น„ํ•ด ์ฝ”๋“œ๊ฐ€ ์•„์ง ์™„์ „ํžˆ ๊นจ๋—ํ•˜๊ณ  ํ˜„๋Œ€์ ์ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง„ ๋งŽ์€ Windows C++ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š

ํ”ผ๋“œ๋ฐฑ ์š”์•ฝ ๋ฐ ์—…๋ฐ์ดํŠธ

์šฐ๋ฆฌ๊ฐ€ ๋“ค์€ ํ”ผ๋“œ๋ฐฑ์˜ ์ผ๋ถ€ ํ•˜์ด๋ผ์ดํŠธ์™€ ํ˜„์žฌ ์œ„์น˜๋Š” ํŠน๋ณ„ํ•œ ์ˆœ์„œ ์—†์ด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํƒ‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ WinUI

๋ฐ์Šคํฌํ†ฑ ์•ฑ์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งŽ์€ Windows ์•ฑ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์‹œ๋‚˜๋ฆฌ์˜ค๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” Xaml Islands๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด (UWP ์•ฑ ๋Œ€์‹ ) win32/desktop ์•ฑ์˜ UI๋กœ Xaml ๋งˆํฌ์—… + WinRT API(.NET ๋˜๋Š” C++๋ฅผ ํ†ตํ•ด)๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@LucasHaines ์™€ @marb2000 ์€ ์ด์— ๋Œ€ํ•ด .NET ๋ฐ Visual Studio ํŒ€๊ณผ ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ˜‘๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ž‘์—…์ด

UWP๊ฐ€ ๋œ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— UWP ์ง€์›์€ win32 ์ด์ „์— ์ค€๋น„๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์ดˆ์ ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹Windows 10 ๋ฐ 8.1์ด์ง€๋งŒ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ์—ฌ์ „ํžˆ Win7์— ์‚ฌ์šฉ์ž ๋ฐ ๊ณ ๊ฐ์ด ์žˆ๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋“ฃ๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์‹œ์žฅ๊ณผ ์˜ต์…˜์„ ํ‰๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋„๊ตฌ ๋ฐ ํ…œํ”Œ๋ฆฟ

์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ (์ˆœ์„œ๋Œ€๋กœ) ๊ณ„ํšํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ํ˜„์žฌ Visual Studio ๊ธฐ๋ณธ UWP ์•ฑ ํ…œํ”Œ๋ฆฟ์„ ๋‹ค์Œ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
    (UWP ์•ฑ ๋ชจ๋ธ) + (WinUI 3.0 UI) + (.NET ๋˜๋Š” C++ ์–ธ์–ด)
  2. ๋‹ค์Œ์— ๋Œ€ํ•œ ์ƒˆ Visual Studio ๊ธฐ๋ณธ ๋ฐ์Šคํฌํ†ฑ ์•ฑ ํ…œํ”Œ๋ฆฟ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    (Win32 ์•ฑ ๋ชจ๋ธ) + (WinUI 3.0 UI) + (.NET ๋˜๋Š” C++ ์–ธ์–ด)

๋˜ํ•œ ๊ธฐ์กด UWP C# ์•ฑ์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋„๊ตฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์–ด๋–ค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„์šฐ๋ฏธ ๋„๊ตฌ๋ฅผ ๋นŒ๋“œํ• ์ง€ ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ํ”ผ๋“œ๋ฐฑ์ด ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

F# ์ง€์›

F#์— ๋Œ€ํ•œ ๋ชจ๋“  ํ”ผ๋“œ๋ฐฑ๊ณผ Xaml ์•ฑ์˜ ์ž ์žฌ์ ์ธ ์ด์ ์„ ๋“ฃ๋Š” ๊ฒƒ์€ ํ›Œ๋ฅญํ•˜๊ณ  ์œ ์ตํ–ˆ์Šต๋‹ˆ๋‹ค. @kathyang - WinUI ํŒ€์˜ ์ธํ„ด ์ค‘ ํ•œ ๋ช… - ์ด ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  F# ํŒ€๊ณผ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ถ”์  ๋ฌธ์ œ #740์—์„œ ๊ท€ํ•˜์˜ ์•„์ด๋””์–ด๋ฅผ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Œ€์น˜๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด: ์ƒˆ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์ด๋“  ํ–ˆ๋‹ค๋ฉด ์ดˆ๊ธฐ WinUI 3.0 ๋ฆด๋ฆฌ์Šค ์ดํ›„์— ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ง€์›๋˜๋Š” ์–ธ์–ด๋กœ ๋จผ์ € 3.0์„ ์ž‘๋™์‹œํ‚ค๋ ค๋ฉด ํ•ด์•ผ ํ•  ์ผ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. WinUI๋ฅผ ๊ณต๊ฐœํ•œ ํ›„ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ๋ฅผ ์ˆ˜๋ฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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

.NET ๋ฐ ํ”Œ๋žซํผ ๊ฐ„ UI์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ๋“ฃ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งŽ์€ ์ž ์žฌ์ ์ธ ๊ธฐํšŒ๊ฐ€ ์žˆ๋Š” ๋ณต์žกํ•œ ์ง€์—ญ์ž…๋‹ˆ๋‹ค.

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

์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” Uno์— ๋Œ€ํ•ด์„œ๋„ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” nventive(Uno์˜ ์ œ์ž‘์ž)๊ฐ€ ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ Build์—์„œ ํฐ ์—ญํ• ์„ ํ–ˆ์œผ๋ฉฐ ์šฐ๋ฆฌ ํŒ€์€ ๊ธฐ์ˆ  ๋ฐ ์‚ฐ์—…์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋“ค๊ณผ ๋งŽ์€ ์‹œ๊ฐ„์„ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.

WebAssembly๋Š” ๋˜ํ•œ ์ ์  ๋” ํฅ๋ฏธ๋กญ๊ณ  ์šฐ๋ฆฌ์˜ ๋ ˆ์ด๋”์— ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์ด Microsoft๊ฐ€ ๊ณ„์† ํˆฌ์žํ•˜๊ณ  ์žˆ๋Š” ์ˆ˜ํ‰์„ ์— ๋Œ€ํ•œ ๋งŽ์€ ๊ฐœ์„  ์‚ฌํ•ญ์ด ์žˆ๋Š” ํฅ๋ฏธ๋กœ์šด ๊ณต๊ฐ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ Mono, Uno, Blazor ๋ฐ ๊ธฐํƒ€ ์‚ฌ๋žŒ๋“ค์ด ํ•˜๊ณ  ์žˆ๋Š” ์ž‘์—…์„ ์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๋‹ค.

INotifyDataErrorInfo ๋“ฑ

@LucasHaines ๋Š” Build 2019์—์„œ ๋ณด์—ฌ์ค€ ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ž‘์—…์„ WinUI 3์— ์™„์ „ํžˆ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋‹ค์Œ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ํ”ผ๋“œ๋ฐฑ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ(์‹ ๊ทœ ๋ฐ ๊ธฐ์กด)

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ

Xaml์˜ ํ™œ์„ฑ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ UWP์—์„œ WinUI 3.0์œผ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— WinUI 3.0์ด ์ข€ ๋” ์•ˆ์ •์ ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์ œ์•ˆ์„ ๊ฒ€ํ† ํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋‹น ์ œ์•ˆ์— needs-winui-3 ๋ ˆ์ด๋ธ”์„ ์ง€์ •ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

WinUI 3 ์‚ฌ์šฉ์— ๋„์›€์ด ๋˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ œ์•ˆ ์„ ๊ณ„์†

๋ฐ์Šคํฌํƒ‘ ํŒจ๋ฆฌํ‹ฐ(์˜ˆ: WPF)

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

๋ฐฐ๊ฒฝ ์ •๋ณด์˜ ๊ฒฝ์šฐ UWP Xaml์˜ ์ผ๋ถ€ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • WPF ๋ฐ Silverlight์™€ ๊ฐ™์€ ์ด์ „ Xaml ํ”Œ๋žซํผ์˜ ์„ฑ๋Šฅ, ๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช… ๋ฐ ํ™•์žฅ์„ฑ ๊ฐœ์„ 
  • ๋ชจ๋“  UI๊ฐ€ ์—ฌ๋Ÿฌ DPI, ํ™”๋ฉด ํฌ๊ธฐ, ์ž…๋ ฅ ๋ชจ๋“œ ๋ฐ ์žฅ์น˜ ์œ ํ˜•์— ์ ์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅ

๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ ์ด์ „ Xaml ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ผ๋ถ€ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ์กด ์ปจํŠธ๋กค ์ตœ์ ํ™” ๋ฐ ํ™•์žฅ
  • NavigationView ์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์ปจํŠธ๋กค ๋ฐ UI ํŒจํ„ด ๋„์ž…
  • ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง์€ ์ž‰ํฌ์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐฉ์‹ ์ง€์›
  • {Binding} ๋Œ€์‹  {x:Bind} ์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด Xaml ๊ฐœ๋… ๋„์ž…
  • D3DImage ๋Œ€์‹  ์™„์ „ํžˆ ๊ธฐ๋ณธ DirectX11 ๋ฐ DX12๋ฅผ ์ง€์›ํ•˜๋Š” SwapChainPanel ๊ณผ ๊ฐ™์€ ์ €์ˆ˜์ค€ ์‹œ์Šคํ…œ๊ณผ์˜ ๊ธด๋ฐ€ํ•œ ํ†ตํ•ฉ
  • ๋” ๋‚˜์€ ์•ฑ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ, ๋ฆฌ์†Œ์Šค ๋กœ๋“œ ๋ฐ ์„ค์น˜/์ œ๊ฑฐ ๊ฒฝํ—˜๊ณผ ๊ฐ™์€ ์ด์ ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” UWP ์•ฑ ๋ชจ๋ธ๊ณผ์˜ ํ†ตํ•ฉ
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฉ์‚ฌํ˜• ๊ทธ๋ž˜๋””์–ธํŠธ์™€ ๊ฐ™์ด ์ตœ์ ํ™”๋˜๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋‹ค์‹œ ๋„์ž…๋  ๋•Œ๊นŒ์ง€ ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ์€ ์‚ฌ์šฉ๋Ÿ‰์œผ๋กœ ํŠนํžˆ ๋Š๋ฆฐ ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค(๊ณง ์™„์ „ํžˆ ์ตœ์ ํ™”๋  ์˜ˆ์ •: #266).

๊ฐœ์„ ๋œ ์Šค๋ ˆ๋”ฉ, ํ•˜๋“œ์›จ์–ด ๊ฐ€์† ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ์ตœ์ ํ™”.

TLDR:

WinUI 3.0์—๋Š” WPF์— ์—†๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ WPF์—๋Š” WinUI 3.0์— ์—†๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” WinUI Xaml ๋ฐ Composition์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ง€์†์ ์œผ๋กœ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ WinUI 3์—์„œ ๋ณด๊ณ  ์‹ถ์€ ํŠน์ • WPF ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ ๋ฌธ์ œ ๋ฅผ @mdtauk๊ฐ€ ์‹œ์ž‘ํ•œ ๋ฌธ์ œ ๋ฐ ๊ธฐ์กด ๋ฌธ์ œ/์ฝ”๋ฉ˜ํŠธ์— ๋Œ€ํ•œ ํˆฌํ‘œ.

๊ท€ํ•˜์˜ ์ง€์†์ ์ธ ํ”ผ๋“œ๋ฐฑ์€ ๋ฌด์—‡์— ์ค‘์ ์„ ๋‘˜์ง€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค!

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

WinUI 3.0์€ ๋‹จ๊ฑฐ๋ฆฌ ๊ฒฝ์ฃผ๊ฐ€ ์•„๋‹ˆ๋ผ ๋งˆ๋ผํ†ค์ด๋ฏ€๋กœ ๋‚ด๋…„์— ๊ณ„์† ์—…๋ฐ์ดํŠธ๋ฅผ ์ฐพ์œผ์‹ญ์‹œ์˜ค.

@mdtauk , @MarkIngramUK , @galvesribeiro , @Mike-EEE, @TonyHenrique , @eklipse2k8 , @mrlacey ๋ฐ @weitzhandler , @jozefizso , @simonfergallahan , @reli-msft , @km ๊ฐ™์€ ์˜ฌ์Šคํƒ€ ๋Œ“๊ธ€ ์ž‘์„ฑ์ž์—๊ฒŒ ํŠน๋ณ„ํ•œ ๊ฐ์‚ฌ๋ฅผ ์ „ํ•ฉ๋‹ˆ๋‹ค. @ GeorgeS2019 @ ๋งˆ์ด์–ด - pletinsky, zezba9000 @ @mfeingol, @bchavez, @Shidell, @KyleNanakdewa, Happypig375 @ @wbokkers, @meteorsnows, @ekral, @contextfree, @Pinox, @GeertvanHorrik, @shaggygi, @riverar, @ r7dev, @natemonster @ mfe-, @khoshroomahdi, @jkoritzinsky, @edgarsanchez, @charlesroddie @ 4creators, @wjk, @vitorgrs, @thomasclaudiushuber, @paulio @ niels9001, @lhak, @huoyaoyuan, @anthcool @ Suriman , @RyoukoKonpaku , @GiorgioG , @Felix-Dev , @dotMorten ๋ฐ ์ง€๊ธˆ๊นŒ์ง€ ๋กœ๋“œ๋งต์— ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค!

๋‹ค๋ฅธ ์งˆ๋ฌธ์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

discussion

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

Windows 7์— ๋Œ€ํ•œ ๋…ผ์˜๋Š” ์ƒ๋‹นํ•œ ๋…ธ๋ ฅ(๋น„์šฉ์€ ๋งํ•  ๊ฒƒ๋„ ์—†๊ณ )์ด WinUI 3.0์— ์ƒ๋‹นํ•œ ์ง€์—ฐ์„ ์•ผ๊ธฐํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ์‚ฐ๋งŒํ•ฉ๋‹ˆ๋‹ค. Windows 7์€ 1์›”์— ๋‹จ์ข…๋˜๋ฉฐ ๋ชจ๋“  ๊ณ ๊ฐ์—๊ฒŒ Windows 10์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ œ ๊ณ ๊ฐ์€ ์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฅธ ๊ณ ๊ฐ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ Windows 8.1๋„ ์šฐ๋ฆฌ์—๊ฒŒ ๊ด€์‹ฌ ์žˆ๋Š” ํ”Œ๋žซํผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

์ปค๋ฎค๋‹ˆํ‹ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” WinUI 3.0(Win32 + WinUI + C++)์ด ์ •๋ง ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋‹ค๋ ค์˜จ ํ”„๋ ˆ์ž„์›Œํฌ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค! ๋ฆฝ GDI ๐Ÿ˜‰

(Win32 ์•ฑ ๋ชจ๋ธ) + (WinUI 3.0 UI) + (.NET ๋˜๋Š” C++ ์–ธ์–ด)

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

์—…๋ฐ์ดํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ WinUI 3.0์˜ ์ดˆ๊ธฐ ๊ธฐ๋Šฅ ์„ธํŠธ๊ฐ€ ์ž ๊ธฐ๊ณ  WinUI 3.0์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์ œ์–ด ๋˜๋Š” ์ œ์–ด ๊ธฐ๋Šฅ์ด ์ œ์•ˆ๋จ์— ๋”ฐ๋ผ ๋” ๋งŽ์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ œ๊ณต๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์•„ ๊ทธ๋ฆฌ๊ณ  ๋ฐ์Šคํฌํƒ‘์˜ WinUI๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  UWP, WPF ๋ฐ Win32์™€ ๋‹ค๋ฅธ์ง€ ์˜ˆ๋ฐฉ ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„๋งˆ๋„ Build!์—์„œ ์–ป์€ ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€ API์˜ ์กฐํ•ฉ์— ํฌํ•จ๋œ ํ›Œ๋ฅญํ•œ ๋งคํŠธ๋ฆญ์Šค์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •๋ง ๋Œ€๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์— ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
xplat ์„น์…˜์€ ํŠนํžˆ Uno๊ฐ€ ๋ ˆ์ด๋”์— ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์ดˆ์ ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹Windows 10 ๋ฐ 8.1์ด์ง€๋งŒ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ์—ฌ์ „ํžˆ Win7์— ์‚ฌ์šฉ์ž ๋ฐ ๊ณ ๊ฐ์ด ์žˆ๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋“ฃ๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์‹œ์žฅ๊ณผ ์˜ต์…˜์„ ํ‰๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด UI ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ด์‹์ด ์ด์‹์„ฑ์„ ์—ผ๋‘์— ๋‘๊ณ  ์„ค๊ณ„๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ์ตœ์†Œํ•œ UI ์ฝ”์–ด(๋ Œ๋”๋ง/์ž…๋ ฅ)๊ฐ€ .NET Core 3+๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  Windows OS์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. Windows 7์—๋Š” ์–ด๋–ค ์ œํ•œ์ด ์žˆ์„๊นŒ์š”? ์ด๋‹ค? ์‚ฌ๋žŒ๋“ค์ด ๋ฐ์Šคํฌํƒ‘์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์€ ๊ทธ๋ƒฅ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์€ ํŠน์ˆ˜/ํ”Œ๋žซํผ ํŠน์ • ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ ํ•ต์‹ฌ UI ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ  (Win10, Win8.1, Win7 Nugets ๋“ฑ).

๋˜ํ•œ HTML(์Šฌํ”„๊ฒŒ๋„ Xamarin์€ ์•„๋‹˜)๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋“  ์žฅ์น˜(Win32, Android, iOS ๋ฐ WASM)์—์„œ ๋™์ผํ•œ ๋ชจ์–‘๊ณผ ๋Š๋‚Œ์„ ๊ฐ€์ง„ ํ”Œ๋žซํผ ๊ฐ„ XAML์ด ์žˆ์—ˆ๋‹ค๋ฉด ์šฐ๋ฆฌ ํšŒ์‚ฌ๋Š” ๋ช‡ ๋…„ ์ „์— ๋›ฐ์–ด ๋“ค์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์—ฌ๋Ÿฌ๋ถ„์ด ์ด๊ฒƒ์„ "๋งˆ๋ผํ†ค(ํ›Œ๋ฅญํ•œ ๋ฒˆ์ง€ ๊ฒŒ์ž„๋„)"์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. XAML ๊ณต๊ฐ„์—์„œ ๋‹จํŽธํ™”๊ฐ€ ์ ์„์ˆ˜๋ก ๋ชจ๋‘์—๊ฒŒ ๋” ์ข‹๊ณ  ๋งŽ์€ ์ง€๋ฆ„๊ธธ์„ ์„ ํƒํ•˜๋ฉด ์‹œ์ž‘ํ•œ ๊ณณ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ;)

๋ฐ์Šคํฌํ†ฑ์˜ WinUI๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ UWP, WPF ๋ฐ Win32์™€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด ๋ฐœ์ „ํ•˜๋Š” ๋Œ€๋กœ ๋” ๋งŽ์€ ๊ฒƒ์„ ๊ณต์œ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!


์ด UI ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ด์‹์ด ์ด์‹์„ฑ์„ ์—ผ๋‘์— ๋‘๊ณ  ์„ค๊ณ„๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ์ตœ์†Œํ•œ UI ์ฝ”์–ด(๋ Œ๋”๋ง/์ž…๋ ฅ)๊ฐ€ .NET Core 3+๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  Windows OS์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. Windows 7์—๋Š” ์–ด๋–ค ์ œํ•œ์ด ์žˆ์„๊นŒ์š”? ์ด๋‹ค?

@zezba9000 WinUI๋Š” .NET์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ WinUI์™€ ํ•จ๊ป˜ .NET Core๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. OS API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ Win8/Win10์— ์—†๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. Win7 - ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํŠน์ • ์ปจํŠธ๋กค๊ณผ ๊ฐ™์€ ์ƒ์œ„ ์ˆ˜์ค€์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ์˜ WinUI๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ UWP, WPF ๋ฐ Win32์™€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด ๋ฐœ์ „ํ•˜๋Š” ๋Œ€๋กœ ๋” ๋งŽ์€ ๊ฒƒ์„ ๊ณต์œ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์ด UI ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ด์‹์ด ์ด์‹์„ฑ์„ ์—ผ๋‘์— ๋‘๊ณ  ์„ค๊ณ„๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ์ตœ์†Œํ•œ UI ์ฝ”์–ด(๋ Œ๋”๋ง/์ž…๋ ฅ)๊ฐ€ .NET Core 3+๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  Windows OS์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. Windows 7์—๋Š” ์–ด๋–ค ์ œํ•œ์ด ์žˆ์„๊นŒ์š”? ์ด๋‹ค?

@zezba9000 WinUI๋Š” .NET์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ WinUI์™€ ํ•จ๊ป˜ .NET Core๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. OS API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ Win8/Win10์— ์—†๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. Win7 - ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํŠน์ • ์ปจํŠธ๋กค๊ณผ ๊ฐ™์€ ์ƒ์œ„ ์ˆ˜์ค€์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Windows 7 ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด - ํ•„์š”ํ•œ ๋ชจ๋“  OS ์ˆ˜์ค€ API์— ๋Œ€ํ•œ ์ผ์ข…์˜ ๋Œ€์ฒด Shim๋ฟ๋งŒ ์•„๋‹ˆ๋ผ XAML์— ๋Œ€ํ•œ ์ž์ฒด ํ˜ธํ™˜ ๋ Œ๋”๋Ÿฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ์ผ๋ถ€ ํƒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. WinUI ๋น„ํŠธ๊ฐ€ OS์—์„œ ์ œ๊ฑฐ๋˜๋ฉด ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์ผ์ข…์˜ ํ˜ธํ™˜์„ฑ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ์‚ฝ์ž…๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ๊ฐ€ ์žˆ๋Š” Xamarin, Uno ๋˜๋Š” .Net Core๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”.

OS API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ Win7์—๋Š” ์—†๋Š” Win8/Win10์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ฒฝ์šฐ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ

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

ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜ ์ง€์› ๋“ฑ์€ "WinUI Windows ๊ธฐ๋ณธ ๊ธฐ๋Šฅ(Win7-Win10)" ํŒจํ‚ค์ง€์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘ธ์‹œ ์•Œ๋ฆผ๊ณผ ๊ฐ™์€ ๊ฒƒ์€ "WinUI Windows ํ™•์žฅ ๊ธฐ๋Šฅ(Win8-Win10)" ํŒจํ‚ค์ง€์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@mdtauk , @zezba9000 ๊ทธ๊ฒƒ์€ ๋ชจ๋‘ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํŒ€์— ๋งŽ์€ ํ”Œ๋žซํผ ์ถ”์ƒํ™” ์ „๋ฌธ ์ง€์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๊ทธ๋ ‡๋“ฏ์ด ๋น„์šฉ, ์ผ์ • ๋ฐ ์˜ˆ์ƒ๋˜๋Š” ์ด์ ์œผ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค ๐Ÿ˜Š

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

2020+์—์„œ Win7์— ์ƒˆ๋กœ์šด ๊ณ ๊ฐ์ด ์ƒ๊ธธ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜์‹ญ๋‹ˆ๊นŒ? ํ”ผ๋“œ๋ฐฑ๊ณผ ๋ช…ํ™•ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

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

2020+์—์„œ Win7์— ์ƒˆ๋กœ์šด ๊ณ ๊ฐ์ด ์ƒ๊ธธ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜์‹ญ๋‹ˆ๊นŒ? ํ”ผ๋“œ๋ฐฑ๊ณผ ๋ช…ํ™•ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

@jesbis WinUI 3.0(Linux, Android, iOS, iPadOS ๋ฐ MacOS)์šฉ Win7์— ํ˜ธํ™˜์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ๋งŽ์€ ์ด์ ์ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ๊ธฐ๋ณธ UI ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ๋Š” ์ด์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mdtauk
@jesbis WinUI 3.0(Linux, Android, iOS, iPadOS ๋ฐ MacOS)์šฉ Win7์— ํ˜ธํ™˜์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ๋งŽ์€ ์ด์ ์ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ๋Š” ์ด์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์›น ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Linux๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

2020+์—์„œ Win7์— ์ƒˆ๋กœ์šด ๊ณ ๊ฐ์ด ์ƒ๊ธธ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜์‹ญ๋‹ˆ๊นŒ? ํ”ผ๋“œ๋ฐฑ๊ณผ ๋ช…ํ™•ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ ํšŒ์‚ฌ๊ฐ€ ๋ณด๊ณ  ์‹ถ์–ดํ•˜๋Š” ๊ฒƒ์€ Android ๋ฐ WASM ์ง€์›์ด UNO(3๋…„ ์ „)๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๊ณต์‹์ ์ด๋ผ๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Win32 API๊ฐ€ ํฌ๊ฒŒ ํ•„์š”ํ•œ ์‹œ์Šคํ…œ ์„ค์ • ๋ฐ ๋กœ์ปฌ ์ปดํ“จํ„ฐ ๋ชจ์Œ์˜ ์ƒํƒœ๋ฅผ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ด€๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค(UWP๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ๊ฒฐ์ฝ” ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ HTML ๋นŒ๋“œ ์‹œ์Šคํ…œ๊ณผ ๋‹ฌ๋ฆฌ ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์˜ค๋ฅ˜ ๋•Œ๋ฌธ์— UI๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค). ํด๋ผ์ด์–ธํŠธ + ์šฐ๋ฆฌ๋Š” ๊ท ์ผํ•œ ๊ฒฝํ—˜๊ณผ ๋Š๋‚Œ์„ ๊ฐ€์ง„ Win32 + Android + ๋ธŒ๋ผ์šฐ์ € UI ๊ฒฝํ—˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. HTML์€ ๊ธฐ๋ณธ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด C#์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ถˆํ•„์š”ํ•œ ์ถ”์ƒํ™”์™€ ๋ณต์žก์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ๋” ๋‚˜์€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋˜ํ•œ WASM์€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์— ๋น„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฐ€์žฅ ํฐ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€!!
๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ์•ˆ๋“œ๋กœ์ด๋“œ / iOS / ๋ชจ๋ฐ”์ผ ๋ฌธ์ œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์›น ํฌํ„ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

ํ”ผ๋“œ๋ฐฑ์„ ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

Desktop + WASM์€ ๊ธˆ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์™€์šฐ, ์™ธ์ณ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @jesbis! ์ „ํ˜€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ด๋ฉฐ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ณ  ์กด๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘

Windows 7์— ๋Œ€ํ•œ ๋…ผ์˜๋Š” ์ƒ๋‹นํ•œ ๋…ธ๋ ฅ(๋น„์šฉ์€ ๋งํ•  ๊ฒƒ๋„ ์—†๊ณ )์ด WinUI 3.0์— ์ƒ๋‹นํ•œ ์ง€์—ฐ์„ ์•ผ๊ธฐํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ์‚ฐ๋งŒํ•ฉ๋‹ˆ๋‹ค. Windows 7์€ 1์›”์— ๋‹จ์ข…๋˜๋ฉฐ ๋ชจ๋“  ๊ณ ๊ฐ์—๊ฒŒ Windows 10์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ œ ๊ณ ๊ฐ์€ ์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฅธ ๊ณ ๊ฐ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ Windows 8.1๋„ ์šฐ๋ฆฌ์—๊ฒŒ ๊ด€์‹ฌ ์žˆ๋Š” ํ”Œ๋žซํผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ์— ์ƒ๋‹นํžˆ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค. WinUI์˜ ๋‹ค๊ฐ€์˜ค๋Š” ๋ชฉํ‘œ๋Š” ๋งค์šฐ ๋ฐ๊ณ  ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค! Xplat ๋ถ€๋ถ„๋„ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋ถ€๋ถ„์ธ๋ฐ ๊ต‰์žฅํžˆ ๋ฐ˜๊ฐ€์›Œ์š”. ๊ฐœ์„  ์‚ฌํ•ญ๊ณผ WinUI์— ๋Œ€ํ•œ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

ํˆฌ๋ช…์„ฑ์„ ์œ„ํ•ด ํŒ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์—…๋ฌด์šฉ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ค‘์š”์„ฑ์„ ์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Lightswitch ๋„๊ตฌ๋กœ ํ•œ๋™์•ˆ ์ผํ–ˆ๊ณ  ๊ฑด์„ค ์‹œ๊ฐ„์—์„œ ์ƒ๋‹นํ•œ ์ด๋“์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ ์†ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์€ LOB ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งค์šฐ ์œ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฏธ๊ตญ์—์„œ ํŠนํ—ˆ ์ „์Ÿ์ด ๋งค์šฐ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์—ฌ์ง€๋ฉด์„œ ์ œํ’ˆ์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฐฐ๋‹ฌ์„ ์œ„ํ•ด INotifyDataErrorInfo๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ WinUI์— 3.x ์ด์ƒ๊ณผ ๊ฐ™์€ ํ–ฅํ›„ ์ œ๊ณต์„ ์œ„ํ•œ RAD ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ํŒ€, ์›น ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ ์—ฐํ•„์„ ์“ฐ๋Š” ๋‚ ์„ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์˜ ํ•˜๋ฃจ, 1๋…„, 10๋…„์„ ๋งŒ๋“ค์–ด ์ค„ ๊ฒƒ์ด๋ฉฐ MS๋ฅผ ๊ธฐ์ˆ  ์Šคํƒ์˜ ๋งจ ์œ„์— ์˜ฌ๋ ค๋†“์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. WinUI + Xamarin + WASM + .NET => ์ˆœ์ˆ˜ํ•จ!!

@jebis ์ด ์—…๋ฐ์ดํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ข‹์€ ์ž‘์—… ํŒ€ :+1:. ์•„์ง ์ดˆ๊ธฐ ๋‹จ๊ณ„๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ์ œ WinUI 3.0 ์ด์ •ํ‘œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ด์— ๋Œ€ํ•ด ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์–ธ์ œ WinUI 3.0 ์ด์ •ํ‘œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ด์— ๋Œ€ํ•ด ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

@shaggygi ์ข‹์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค! ๋ฐฉ๊ธˆ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

WinUI 3.0 ์ด์ •ํ‘œ

๋ฉ‹์ง€๋‹ค ์–˜๋“ค์•„!

๋น ๋ฅธ ์งˆ๋ฌธ: Windows.UI.Composition์„ Microsoft.UI.Composition์œผ๋กœ ์ด๋™ํ•˜๋ฉด 2.2 ๋˜๋Š” 3.0์— ๋” ๊ฐ€๊น์Šต๋‹ˆ๊นŒ?
๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ฐ„์— 3.0์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด 2-3๊ฐœ์›” ๋˜๋Š” ๊ทธ ์ด์ƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์•ž์œผ๋กœ ์—ฐ๋„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ("์—ฐ๋ง๊นŒ์ง€"์—์„œ์™€ ๊ฐ™์ด) ๋‹ฌ๋ ฅ ์—ฐ๋„์™€ [Microsoft] ํšŒ๊ณ„ ์—ฐ๋„์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋ง์”€ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.
์ด๊ฒƒ์ด ๋ช…์‹œ์ ์œผ๋กœ ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ˜ผ๋™์„ ์ผ์œผํ‚ค๊ธฐ ์‰ฝ๊ณ  ์ €๋Š” ์ด๊ฒƒ์ด ์‚ฌ๋žŒ๋“ค์ด ์˜๋„ํ•œ ๊ฒƒ๋ณด๋‹ค 6๊ฐœ์›” ๋” ๋นจ๋ฆฌ ์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ๊ฒŒ ํ•œ ๊ฒฝ์šฐ๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Windows.UI.Composition์„ Microsoft.UI.Composition์œผ๋กœ ์ด๋™ํ•˜๋ฉด 2.2 ๋˜๋Š” 3.0์— ๋” ๊ฐ€๊น์Šต๋‹ˆ๊นŒ?

@jtorjo ์ด๊ฒƒ์€ 3.0(์ตœ์†Œ)์ž…๋‹ˆ๋‹ค. 3.0์˜ ์ฒซ ๋ฒˆ์งธ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์— ์ดˆ๊ธฐ ๋นŒ๋“œ๋ฅผ ํฌํ•จํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•˜์ง€๋งŒ ์•„์ง 100% ๋ณด์žฅ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.


์•ž์œผ๋กœ ์—ฐ๋„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ("์—ฐ๋ง๊นŒ์ง€"์—์„œ์™€ ๊ฐ™์ด) ๋‹ฌ๋ ฅ ์—ฐ๋„์™€ [Microsoft] ํšŒ๊ณ„ ์—ฐ๋„์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋ง์”€ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

@mrlacey ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ๋ช…์‹ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋‚ ์งœ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ฌ๋ ฅ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

@jesbis ์ข€ ์•ˆํƒ€๊น ๋„ค์š”. ๊ทธ๋ž˜์„œ 3.0์— Microsoft.UI.Composition์ด ์—†์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๋ง์”€์ด์‹ ๊ฐ€์š”?

@jtorjo

3.0 ์˜

์ข…์ข… ๋งŽ์€ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด .NET Core 3์€ Preview 6์— ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ณ„ํš์€ 3.0์— ๊ตฌ์„ฑ API๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Xaml ํ”„๋ ˆ์ž„์›Œํฌ ๋ถ€๋ถ„์€ ๊ตฌ์„ฑ ๋ถ€๋ถ„๋ณด๋‹ค ๋จผ์ € ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jebis ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ์ข‹์€ ์†Œ๋ฆฌ์ž…๋‹ˆ๋‹ค!

ํ™˜์ƒ์ ์ธ ๋กœ๋“œ๋งต, ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค!

์—ฌ๊ธฐ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ €๋Š” ํˆฌ๋ช…๋„๋ฅผ ์ข‹์•„ํ•˜๊ณ  WinUI 3.0์„ ์ •๋ง ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ WinUI 3.0์€ WPF๊ฐ€ 2006๋…„์— ๋„์ž…๋œ ์ดํ›„ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์—ฌ์ „ํžˆ Windows 7์„ ์‹คํ–‰ํ•˜๋Š” ๊ณ ๊ฐ์ด ์žˆ์ง€๋งŒ Windows 10 ์ง€์›์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ Win7 ์ง€์›์„ ์œ„ํ•ด ์‹œ๊ฐ„๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๊ทผ๋ฌดํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํšŒ์‚ฌ๋Š” 10์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  2020๋…„ ๋ง์—๋Š” ์—ฌ์ „ํžˆ Windows 7์„ ์‚ฌ์šฉํ•˜๋Š” ์œ ์ผํ•œ ํšŒ์‚ฌ๊ฐ€ ์ œ ์น˜๊ณผ ์˜์‚ฌ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฐ€ ๋‚˜์—๊ฒŒ Windows ์•ฑ์„ ์ž‘์„ฑํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•œ๋‹ค๋ฉด ๋‚˜๋Š” ๊ทธ์˜ PC๋ฅผ Windows 10์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :-)

ํ–ฅํ›„ WASM ์ง€์›์€ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

์–ด์ œ ํšŒ์˜์—์„œ:

@jesbis ์™€ ์šฐ๋ฆฌ ํŒ€์ด ์—ฌ๊ธฐ์— ๊ธ€์„ ์“ฐ๊ณ  ์ฐธ์—ฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ž‘์€ ์ด์•ผ๊ธฐ๋Š” ํฅ๋ถ„๋œ ๋น™์‚ฐ์˜ ์ผ๊ฐ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. :-)

์–ด์ œ ๋…์ผ์—์„œ ์—ด๋ฆฐ ๊ฐœ๋ฐœ์ž ํšŒ์˜์—์„œ ์ผ๋ถ€ .NET ๊ฐœ๋ฐœ์ž์™€ ์ฑ„ํŒ…์„ ํ•˜๊ณ  WinUI 3.0์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์ง€๋งŒ ๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์—๊ฒŒ ๋กœ๋“œ๋งต์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ๊ณ  ๊ทธ๋“ค์€ ๋งํ–ˆ๋‹ค.

"์™€, ๋†€๋ž๋„ค์š”."

๊ทธ๋ฃน์˜ ํ•œ ์†Œ๋…€๊ฐ€ ๋‚˜์—๊ฒŒ ๋ฌผ์—ˆ๋‹ค.

"๊ทธ๋Ÿฐ๋ฐ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์šฐ๋ฆฌ์—๊ฒŒ ๋งํ•ด๋„ ๋ฉ๋‹ˆ๊นŒ?"

๋‚˜๋Š” ๊ทธ๋…€์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ๋ณด์•˜๊ณ , ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ๋‹ค์‹œ ๋ง์„ ํ•  ๊ธฐํšŒ๋ฅผ ์žก์•˜์Šต๋‹ˆ๋‹ค.

await Task.Delay(3000);

๋‚ด๊ฐ€ ๋งํ•˜๊ธฐ ์ „์—

"๋„ค! GitHub์—์„œ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

@jebis ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. Windows ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ์— ์ข‹์€ ์‹œ๊ฐ„ โค๏ธ

Word์™€ ๊ฐ™์€ ์ž์‚ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด WinUI์˜ ๊ณ„์ธต์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ํฌ๋งํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ "์ด๋ด, WinUI๋Š” ์žฅ๋‚œ๊ฐ์ด ์•„๋‹ˆ๋ผ ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ ์ œํ’ˆ์ž…๋‹ˆ๋‹ค"๋ผ๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๊ธฐ๋ปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋“ค์ด ์ด๋ฏธ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ํฐ ์†Œ๋ฆฌ๋กœ ๋งํ•˜์‹ญ์‹œ์˜ค.

WPF, Win32 ๋ฐ WinUI ๋ฐ์Šคํฌํƒ‘์šฉ ์•„ํฌ๋ฆด.

์•„ ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ํ™œ์„ฑ Windows ์ •์ฑ… ์—์„œ๋งŒ ์•„ํฌ๋ฆด์„ ์žฌ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ, ๋ชจ๋‹ˆํ„ฐ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ์ฐฝ์—์„œ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ์—ฌ๋Ÿฌ ๋ชจ๋‹ˆํ„ฐ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค....

UWP ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ UI ์ปจํŠธ๋กค ์ง‘ํ•ฉ์ด ์žˆ๋Š” ๊ฐœ๋ฐœ ๊ฒฝํ—˜์˜ ์˜๋ฏธ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. WinUI ์ปจํŠธ๋กค๊ณผ ๋ ˆ๊ฑฐ์‹œ UI ์ปจํŠธ๋กค์— ๋ชจ๋‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์„ ๋•Œ C# ์ฝ”๋“œ ์ˆจ๊น€์—์„œ IntelliSense๋Š” ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์š”๊ตฌํ•˜๋ฏ€๋กœ Alt + Enter ๋Œ€์‹  using ํ•˜๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•˜๋Š” ๋Œ€์‹  ์ปจํŠธ๋กค์„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋“  ์ด๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

WinUI3๊ฐ€ ๊ฐœ๋ฐœ์ž์šฉ์œผ๋กœ ๋‚˜์˜ค๋ฉด Windows 10 SDK๋Š” ์ง€์›๋˜๋Š” SDK๊ฐ€ ์„ค์น˜๋œ ์ƒํƒœ์—์„œ ์—ด๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ€๊ฒฝ ์ œ์•ˆ ์„ ๊ณ ๋ คํ•ด์•ผ

WPF, Win32 ๋ฐ WinUI ๋ฐ์Šคํฌํƒ‘์šฉ ์•„ํฌ๋ฆด.

๋‚ด๊ฐ€ ๋จผ์ € ๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์€ Xaml Islands๋ฅผ ์ถฉ๋ถ„ํžˆ ์„ฑ์ˆ™์‹œํ‚ค๋Š” MS๋กœ, ์˜ˆ๋ฅผ ๋“ค์–ด ์ œ๋ชฉ ํ‘œ์‹œ์ค„์˜ ์•„ํฌ๋ฆด์„ WinUI ๊ธฐ๋ฐ˜์˜ UWP๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( ์ด ๊ฒŒ์‹œ๋ฌผ์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๋ฝ ์ฐธ์กฐ). @marb2000 ์€ ์•„๋งˆ๋„ ์ด๊ฒƒ์— ๋Œ€ํ•ด ์งˆ๋ฌธํ•  ์‚ฌ๋žŒ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@MartinZikmund ์šฐ๋ฆฌ๋Š” ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. WinUI 3์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํŒจํ‚ค์ง€์˜ ์ปจํŠธ๋กค์—๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹ ์˜ ๊ฐ€์žฅ ํฐ ๋ณ€ํ™”๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

@MartinZikmund
@LucasHaines

ํ•œ ๊ฐ€์ง€ ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋นŒ๋“œ์—์„œ Windows.UI.Xaml.* WinMD ์ฐธ์กฐ๋ฅผ ์ œ์™ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋นŒ๋“œ ๋Œ€์ƒ์€ ํ†ตํ•ฉ WinMD(์ผ๋ช…)๋งŒ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. Windows.winmd , ๊ฐœ๋ณ„ WinMD๋„ ์ฐธ์กฐํ•˜๋„๋ก ๋Œ€์ƒ์— ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋นŒ๋“œ ์ค‘์ธ ์•ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฐธ์กฐ๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ด ๋ฐฉ๋ฒ•์ด .NET Framework์šฉ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ UAP์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. msix/appx ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— FrameworkDependency๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์šฐ๋ฆฌ๋Š” ํ•จ๊ป˜ ์ƒˆ๋กœ์šด WinUI์„ ๊ณต๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” Windows.* ๋ณด๋‹ค๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค Microsoft.* ๊ฒƒ๋“ค.

๊ฐœ๋ฐœ์ž ์ธก์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์ฐธ์กฐ ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ ์•ฑ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ๋œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ „ํ˜€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค!

ํ˜œํƒ:

  1. ์ฝ”๋“œ๋ฅผ ์•ž๋’ค๋กœ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  2. ๋กœ์ปฌ WinUI ์ฝ”๋“œ๊ฐ€ ์•ˆ์ •ํ™”๋˜๋ฉด Windows ํ”Œ๋žซํผ์œผ๋กœ ๋‹ค์‹œ ๋ณ‘ํ•ฉํ•˜์—ฌ ๋ชจ๋“  ์ƒˆ Windows ๋ฆด๋ฆฌ์Šค์—์„œ ์‹œ์Šคํ…œ ์•ฑ๊ณผ LOB ์•ฑ์ด ์ƒˆ๋กœ์šด ๊ฐœ์„  ์‚ฌํ•ญ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ํ•œํŽธ์œผ๋กœ๋Š” .NET Framework์™€ ๊ฐ™์ด ํ˜ธํ™˜์„ฑ์ด ๋†’์€ ๋งค์šฐ ์•ˆ์ •์ ์ธ ์‹œ์Šคํ…œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์ชฝ์€ .NET Core์™€ ๊ฐ™์œผ๋ฉฐ ๋” ๋น ๋ฅธ ์†๋„๋กœ ๋ณ€๊ฒฝ๋˜๋ฉฐ ๋‘ ๊ฐ€์ง€์˜ ๋ชจ๋“  ์ด์ ์ด ์žˆ๊ณ  ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ต์ฐจ ํ”Œ๋žซํผ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์œผ๋กœ ๋ž˜ํ•‘๋œ Blazor + (๋น„ HTML) UI์— ๋Œ€ํ•œ Steve Sanderson์˜ ๋ฉ‹์ง„ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์„ ๋ฐฉ๊ธˆ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์•ฝ 52๋ถ„ ๋ถ„๋Ÿ‰์˜ ์˜์ƒ์ž…๋‹ˆ๋‹ค. UWP, WinUI ๋ฐ C# ํŒฌ์˜ ํ•„์ˆ˜ ๋ณด๊ธฐ์ž…๋‹ˆ๋‹ค. ๋ธ”๋ ˆ์ด์ € ์ง„์‹ฌ ๊ฐ๋™!!!

https://youtu.be/uW-Kk7Qpv5U

์ด ํ† ๋ก ์—์„œ ๋‚ด๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ์žŠ์–ด๋ฒ„๋ฆฐ ๋ง์€...
WinUI 3.0 ์ž์ฒด์— ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? XAML ๋ Œ๋”๋ง ์—”์ง„์ด ๋ฐฉ๊ธˆ ๋ถ„๋ฆฌ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ? XAML ์ปจํŠธ๋กค์€ ์ฃผ๋กœ ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ DirectUI์™€ ๊ฐ™์€ ์˜คํ”„์Šค๋ ˆ๋“œ ๋ฐ dwm ๊ตฌ๋™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

์ผ๋ถ€ ์ปจํŠธ๋กค ์„ฑ๋Šฅ ๋ฐ RAM ์‚ฌ์šฉ๋Ÿ‰์€ ListView/GridView = ItemsControl๊ณผ ๊ฐ™์ด ํ›จ์”ฌ ๋” ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Windows ์ž์ฒด์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Windows 8 ์‹œ์ž‘ ๋ฉ”๋‰ด(DirectUI)๋Š” Windows 10 XAML ์‹œ์ž‘ ๋ฉ”๋‰ด๋ณด๋‹ค ํ›จ์”ฌ ์œ ์—ฐํ•ฉ๋‹ˆ๋‹ค.
Groove Albums ํŽ˜์ด์ง€์™€ ๊ฐ™์ด ์ถฉ๋ถ„ํ•œ ์ •๋ณด๊ฐ€ ์žˆ๋Š” GridView๋ฅผ ๋กœ๋“œํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ผ์ด ์ œ๋Œ€๋กœ ์ง„ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ iOS์™€ Android๊ฐ€ ํ›จ์”ฌ ๋” ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ winforms, QT๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
(WPF๋Š” ๋‚ด ์ƒ๊ฐ์— UWP XAML๋ณด๋‹ค ํ›จ์”ฌ ๋‚˜์ฉ๋‹ˆ๋‹ค).

WinUI 3.0 ์ž์ฒด์— ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? XAML ๋ Œ๋”๋ง ์—”์ง„์ด ๋ฐฉ๊ธˆ ๋ถ„๋ฆฌ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ? XAML ์ปจํŠธ๋กค์€ ์ฃผ๋กœ ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ DirectUI์™€ ๊ฐ™์€ ์˜คํ”„์Šค๋ ˆ๋“œ ๋ฐ dwm ๊ตฌ๋™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

์„ฑ๋Šฅ์€ ํ™•์‹คํžˆ ์šฐ๋ฆฌ๊ฐ€ ๊ณ„์† ํˆฌ์žํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์ด์ง€๋งŒ 3.0์— ๋Œ€ํ•œ ๊ฐœ์„ ์€ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ 3.0 ๋…ธ๋ ฅ์€ ๋Œ€๋ถ€๋ถ„ Xaml์„ ๋ถ„๋ฆฌํ•˜์—ฌ NuGet ํŒจํ‚ค์ง€ ๋ฐ ์˜คํ”ˆ ์†Œ์‹ฑ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

ํ˜„์žฌ UWP Xaml๊ณผ ๊ฐ™์€ WinUI 3.0์€ ์ปดํฌ์ง€์…˜ ๊ณ„์ธต์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ DWM์„ ํ†ตํ•ด ๋งŽ์€ ๋ Œ๋”๋ง ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ iOS์™€ Android๊ฐ€ ํ›จ์”ฌ ๋” ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ winforms, QT๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
(WPF๋Š” ๋‚ด ์ƒ๊ฐ์— UWP XAML๋ณด๋‹ค ํ›จ์”ฌ ๋‚˜์ฉ๋‹ˆ๋‹ค).

์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ์ข…์ข… ์„ฑ๋Šฅ ๋Œ€ ์œ ์—ฐ์„ฑ/ํ’๋ถ€ํ•จ์˜ ์ ˆ์ถฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Xaml ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ(UWP ๋ฐ WPF ํฌํ•จ)์€ ๋ชจ๋“  ์ปจํŠธ๋กค์— ๋Œ€ํ•ด ๋” ํฌ๊ณ  ํ’๋ถ€ํ•œ UI ๊ฐœ์ฒด ํŠธ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ์ปจํŠธ๋กค์˜ ์Šคํƒ€์ผ๊ณผ UX๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด ์ผ๋ถ€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์€ ํ›จ์”ฌ ๋” ํ‰ํ‰ํ•œ ๊ฐœ์ฒด ํŠธ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์—ฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋•Œ๋กœ๋Š” ๋” ๋นจ๋ฆฌ ๋กœ๋“œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Microsoft์—์„œ WinUI 3.0์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ƒˆ๋กœ์šด comctl32.dll ๋ฐ comdlg32.dll์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ Win32 ์•ฑ์—๋Š” ์ตœ์‹  UI ํ™˜๊ฒฝ์ด ์žˆ๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ตœ์‹  UI์— ์•ฑ์„ ์ ์šฉํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋งŽ์€ Win32 ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ๋Ÿฌ Windows ๋ฒ„์ „์„ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋“ค์€ ์˜ค๋Š˜๋‚  WinUI๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Microsoft๊ฐ€ ์•ฑ UI ํ˜„๋Œ€ํ™” ์ž‘์—… ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Microsoft์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” C++ Win32 ์•ฑ์šฉ XAML ๋””์ž์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ชจ๋ฆฌ ์ผ„์ง€

@MouriNaruto ์˜ค๋Š˜(Win32๋ถ€ํ„ฐ) FileOpenPicker ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@MouriNaruto ์˜ค๋Š˜(Win32๋ถ€ํ„ฐ) FileOpenPicker๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋ชจ๋“  ์ตœ์‹  ์ผ๋ฐ˜ ์ปจํŠธ๋กค๊ณผ ๋Œ€ํ™” ์ƒ์ž๊ฐ€ Win32์— ์ œ๊ณต๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@MouriNaruto

๊ธฐ์ˆ ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Windows ๊ฐœ๋ฐœ์ž๋Š” COMCTL ๋ฐ COMDLG ๊ตฌํ˜„์˜ ์ •ํ™•ํ•œ ๋™์ž‘๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ์™€ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๋ฒ„๊ทธ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธํ™˜์„ฑ์€ ์šฐ๋ฆฌ์˜ ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค !

๊ทธ๋ ‡๊ฒŒ ํ•œ๋‹ค ํ•ด๋„ ์™„๋ฃŒํ•  ๋•Œ์ฏค์ด๋ฉด ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด๋Š” WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์„ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์•„์ด๋Ÿฌ๋‹ˆ!! ๐Ÿคจ๐Ÿคฃ

@MarkIngramUK

์ฐธ๊ณ  : FileOpenPicker ๋Š” ๊ธฐ๋ณธ WinRT ๋Œ€ํ™” ์ƒ์ž/์ปจํŠธ๋กค์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ณธ์งˆ์ ์œผ๋กœ DirectUI (ATG ํŒ€์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  DirectX ) ๋ฐ COM ์ž‘์„ฑ๋œ ExplorerFrame ์˜ ๋ž˜ํผ์ž…๋‹ˆ๋‹ค!

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

๋งŽ์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ˜„์‹ค ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ ์—†์ด๋Š” WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ "ํ˜ธํ™˜์„ฑ์€ ์šฐ๋ฆฌ์˜ ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค!"๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„ค, ์ œ ์ œ์•ˆ์˜ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์•„์ด๋Ÿฌ๋‹ˆ!! ๐Ÿคจ๐Ÿคฃ

WPF ๋ฐ WinForms๊ฐ€ ์ƒˆ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์˜ตํŠธ์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ XAML WinUI ๋ฒ„์ „์˜ ์ผ๋ฐ˜ ๋Œ€ํ™” ์ƒ์ž์— ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

WinUI 3 ๋Œ€์ƒ์€ ๋งค์šฐ ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฌ๋ฉฐ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. WinUI 3์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์‹ Win32 ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋งฅ๋ฝ์—์„œ ๋ฐฐํฌ/๋ฐฐํฌ์— ๊ด€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ชจ๋“  ์•ฑ์€ WinUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด Windows ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์•ฑ ๊ฐ„์— ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?
  2. WinUI๋ฅผ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  3. ์žฌ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. WinUI๋Š” ๋Œ€๋žต MB ๋‹จ์œ„๋กœ ์–ผ๋งˆ๋‚˜ ํด๊นŒ์š”?

๋ชจ๋“  ์•ฑ์€ WinUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด Windows ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์•ฑ ๊ฐ„์— ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์ž๋™์œผ๋กœ ์บ์‹œํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ๋Š” NuGet์„ ํ†ตํ•ด WinUI 3์„ ๋ฐฐํฌํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://docs.microsoft.com/nuget/what-is-nuget#what -else-does-nuget-do

https://docs.microsoft.com/nuget/consume-packages/managing-the-global-packages-and-cache-folders


WinUI๋ฅผ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ๊ณ„ํšํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด์ ์ด ๋  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?


์žฌ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. WinUI๋Š” ๋Œ€๋žต MB ๋‹จ์œ„๋กœ ์–ผ๋งˆ๋‚˜ ํด๊นŒ์š”?

์ตœ์ข… ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€ ์•„์ง ์ž‘์—… ์ค‘์ด์ง€๋งŒ UI ๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ด€๋ จ ๊ธฐ์กด system32 dll ํฌ๊ธฐ(10MB)์™€ ์œ ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€๋ฅผ ์ž๋™์œผ๋กœ ์บ์‹œํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ๋Š” NuGet์„ ํ†ตํ•ด ์ฃผ๋กœ WinUI 3์„ ๋ฐฐํฌํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

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

UI ํ”„๋ ˆ์ž„์›Œํฌ ํŒจํ‚ค์ง€๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ ๋„๊ตฌ๋‚˜ SDK๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. .NET Core์šฉ WPF ๋ฐ WinForms๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๊ณต์œ  ๋ฒˆ๋“ค์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํˆฌ์ž ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ๋“ค ์€ ์ตœ์ข… ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์— SDK๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. WindowsDesktop ๋ฒˆ๋“ค์— ํฌํ•จ๋จ)

ํŠนํžˆ VS์—๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๋นŒ๋“œ ์˜ต์…˜์ด ์ด๋ฏธ ์žˆ์œผ๋ฉฐ WinUI๋Š” ํŒจํ‚ค์ง€ ๊ณต์œ ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ณต์œ  ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋จผ์ € ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Microsoft Store์—์„œ ์ œ๊ณตํ•˜๋Š” ์•ฑ์˜ ๊ฒฝ์šฐ ๋ฐฐํฌ ์‹œ ๋ฆด๋ฆฌ์Šค ํŒจํ‚ค์ง€ ์ฝ˜ํ…์ธ ๋„ ์ž๋™์œผ๋กœ ๊ณต์œ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ˆ˜๋‹จ์„ ํ†ตํ•ด ๋ฐฐํฌ๋œ win32 ์•ฑ์˜ ๊ฒฝ์šฐ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์˜ต์…˜์„ ์กฐ์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ํ•  ์ผ ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š

WinUI๋ฅผ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ๊ณ„ํšํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด์ ์ด ๋  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ EXE(VC ๋Ÿฐํƒ€์ž„์„ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š”)์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด C++/WinRT ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๋‹จ์ง€ ํ™•์‹คํžˆ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค ...

์žฌ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. WinUI๋Š” ๋Œ€๋žต MB ๋‹จ์œ„๋กœ ์–ผ๋งˆ๋‚˜ ํด๊นŒ์š”?

์ตœ์ข… ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€ ์•„์ง ์ž‘์—… ์ค‘์ด์ง€๋งŒ UI ๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ด€๋ จ ๊ธฐ์กด system32 dll ํฌ๊ธฐ(10MB)์™€ ์œ ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •๋ณด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๊ฑฐ๋Œ€ํ•œ ์‚ฌ์—…์— ๋Œ€ํ•œ ๊ต‰์žฅํ•œ ํˆฌ๋ช…์„ฑ btw, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์•„์ฃผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ EXE(VC ๋Ÿฐํƒ€์ž„์„ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š”)์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด C++/WinRT ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๋‹จ์ง€ ํ™•์‹คํžˆ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ (์ด๋ก ์ ์œผ๋กœ) ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜์ง€๋งŒ @jesbis๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ํŒจํ‚ค์ง•๋˜์ง€ ์•Š์€ ์•ฑ์ด ๊ณต์œ  ํ”„๋ ˆ์ž„์›Œํฌ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๊ณ„์† ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. .NET Core๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๊ฐ™์ด redist ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์–ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows 7์— ๋Œ€ํ•œ ๋…ผ์˜๋Š” ์ƒ๋‹นํ•œ ๋…ธ๋ ฅ(๋น„์šฉ์€ ๋งํ•  ๊ฒƒ๋„ ์—†๊ณ )์ด WinUI 3.0์— ์ƒ๋‹นํ•œ ์ง€์—ฐ์„ ์•ผ๊ธฐํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ์‚ฐ๋งŒํ•ฉ๋‹ˆ๋‹ค. Windows 7์€ 1์›”์— ๋‹จ์ข…๋˜๋ฉฐ ๋ชจ๋“  ๊ณ ๊ฐ์—๊ฒŒ Windows 10์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ œ ๊ณ ๊ฐ์€ ์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฅธ ๊ณ ๊ฐ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ Windows 8.1๋„ ์šฐ๋ฆฌ์—๊ฒŒ ๊ด€์‹ฌ ์žˆ๋Š” ํ”Œ๋žซํผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๋‚ด ๊ณ ๊ฐ์„ ์ œ์–ด ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ค‘๊ตญ์—๋Š” 60 % ์ด์ƒ์˜ ์‹œ์Šคํ…œ์ด win7์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด ์‹œ์žฅ์„ ํฌ๊ธฐํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ win7์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ์ˆ ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋Š” ๋ฐ”์ด๋‘์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. https://tongji.baidu.com/data/os๋ฅผ ์ฐธ์กฐ

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๋‚ด ๊ณ ๊ฐ์„ ์ œ์–ด ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ 60 % ์ด์ƒ์˜ ์‹œ์Šคํ…œ์ด ์ค‘๊ตญ์—์„œ win7์ž…๋‹ˆ๋‹ค.

TBH Win7์—์„œ ๋ฉˆ์ถ˜ ๊ฒฝ์šฐ .NET Framework 4.8 + WPF๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๋‚ด ๊ณ ๊ฐ์„ ์ œ์–ด ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ 60 % ์ด์ƒ์˜ ์‹œ์Šคํ…œ์ด ์ค‘๊ตญ์—์„œ win7์ž…๋‹ˆ๋‹ค.

TBH Win7์—์„œ ๋ฉˆ์ถ˜ ๊ฒฝ์šฐ .NET Framework 4.8 + WPF๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Win7 Sp1์€ .NET Framework 4.8์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ sp1์ด ์—†๋Š” win7์€ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

.NET Framework ์‹œ์Šคํ…œ ์š”๊ตฌ ์‚ฌํ•ญ |

SP1์ด ์—†๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ ์ˆ˜๋ช…์ด ๋‹คํ•œ ์ง€ 6๋…„์ด ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„œ๋น„์Šค ํŒฉ์ด ์—†๋Š” Windows 7 RTM์— ๋Œ€ํ•œ ์ง€์›์€ 2013๋…„ 4์›” 9์ผ์— ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

https://support.microsoft.com/en-gb/help/13853/windows-lifecycle-fact-sheet

Windows 7 ์ง€์›์„ ์›ํ•˜๋ฉด ์ด๋ฏธ Windows 7์„ ์ง€์›ํ•˜๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ Microsoft๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ค„ ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

@MarkIngramUK Microsoft์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ sp1 ์—†์ด win7์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ๊ฐ์„ ์ง€์›ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ณ ๊ฐ์ด ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ œ์–ดํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ sp1 ์—†์ด win7์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ๊ฐ์€ ์šฐ๋ฆฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํฌ๊ธฐํ•  ๊ฒƒ์ด๋ฉฐ ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด ์‹œ์žฅ์„ ์žƒ์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์Ÿ์ž๋“ค์€ sp1 ์—†์ด win7์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๊ณ  ๋‚˜์˜ ๊ฒฝ์Ÿ์ž๋“ค์€ ์ด ์‹œ์žฅ์—์„œ ์Šน๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ ๋‚ด ์‚ฐ์—…์˜ ํ˜„์ƒ์ด๋ฉฐ ์œ„์˜ ๊ฒฐ๋ก ์€ ๋‹ค๋ฅธ ์‚ฐ์—…์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@linindexi ๋‚ด ์ƒ๊ฐ์— ๊ณ ๊ฐ์ด ์ง€์›๋˜๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋ž˜๋œ ๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค๋ฉด ํ˜„๋Œ€์ ์ธ UI๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ด๋ผ๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์ˆœ์ „ํžˆ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ž…๋‹ˆ๋‹ค ...

@MarkIngramUK ์Šฌํ”„๋‹ค. ์˜ค๋Š˜๋‚ ์˜ ์‹ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด ์ด ์‹ ๊ธฐ์ˆ ์€ ์˜ค๋ž˜๋œ ๊ธฐ์ˆ ์ด ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@linindexi ๋ง ๊ทธ๋Œ€๋กœ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ๊ณ ๋Œ€ OS๋กœ ์ด์‹๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ์‹ ๊ธฐ์ˆ ์„ "๊ตฌ ๊ธฐ์ˆ "์ด๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. Win7(SP1 ์—†์Œ) ์ง€์›์„ ์›ํ•˜๋ฉด WinForms ๋˜๋Š” MFC ๋“ฑ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

@MartinZikmund ๋งž์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์ปดํ“จํ„ฐ ๊ธฐ์ˆ ์„ ์ดํ•ดํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฉฐ win7 ๋ฐ win10๋„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@jesbis C++๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด WinUI๋กœ ์†์„ ๋”๋Ÿฝํžˆ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ์— UWP ๋ฐ C++/Cx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์„ ์„ ๋‹คํ–ˆ์ง€๋งŒ PhotoEditor ์•ฑ๊ณผ ์ผ๋ถ€ ์ƒ˜ํ”Œ ์™ธ์—๋„ ํ•ญ์ƒ ๋จธ๋ฆฌ๋ฅผ ๊ธ์ ์ด๋ฉฐ XAML์„ Platform::Collections์™€ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ข‹์€ ๋ฌธ์„œ๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๊ฒƒ. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ Windows์—์„œ UWP์šฉ C# ๋ฐ C++ ๊ฐœ๋ฐœ์šฉ Qt๋กœ ๋‹ค์‹œ ์ „ํ™˜ํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. C++์— ๋” ๋งŽ์€ ์‚ฌ๋ž‘์„ ์ฃผ์„ธ์š”.

๊ณ ๊ฐ์˜ ๊ฒฝ์šฐ Windows 10 Media์™€ ํ•จ๊ป˜ USB ์Šคํ‹ฑ(PenDrive)์„ ์‚ฌ์šฉํ•˜๊ณ  Windows 7์—์„œ ์ตœ์‹  Windows 10์œผ๋กœ ๋ฌด๋ฃŒ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ˆํ‹ฐ๋ฐ”์ด๋Ÿฌ์Šค, Windows ์—…๋ฐ์ดํŠธ, Edge WebBrowser๊ฐ€ ํฌํ•จ๋œ ์ตœ์‹  OS์˜ ์ด์ ์„ ์–ป์—ˆ์œผ๋ฉฐ WinForms, WPF์™€ ๊ฐ™์€ ๊ตฌํ˜•๋ถ€ํ„ฐ UWP ์ด์ƒ(WinUI)์„ ํฌํ•จํ•œ ์ตœ์‹  ๊ธฐ์ˆ ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ GUI ๊ธฐ์ˆ ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Shutdown ๋Œ€์‹  Windows๋ฅผ ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ๋กœ ์„ค์ •ํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „์› ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ PC ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ณ  PC ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ์ „์› ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ผ๊ณ  ๊ฐ€๋ฅด์ณค์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์‹œ์Šคํ…œ์„ ์‰ฝ๊ฒŒ ์„ค์น˜/์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ์— ISO๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ปดํ“จํ„ฐ์— Candy Crush๊ฐ€ ์‚ฌ์ „ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ์ด์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

์˜๊ฒฌ

WPF์˜ ์ปจํŠธ๋กค ๊ตฌํ˜„์€ ์ด์ „ ๋ฒ„์ „์˜ Windows ์ง€์›์„ ์œ„ํ•ด WinUI์—์„œ ๋ณ‘ํ•ฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด, Windows 7.) ๊ทธ๋Ÿฌ๋‚˜ Microsoft๊ฐ€ ์‚ฌ๋ฌด์‹ค ์ •์ฑ… ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์„ ์‹คํ˜„ํ•˜๊ธฐ๋Š” ๋„ˆ๋ฌด ์–ด๋ ต์Šต๋‹ˆ๋‹ค. lol.

๋‹ต๊ธ€

@linindexi
์˜ค๋Š˜๋‚  ์ค‘๊ตญ์—๋Š” ์˜ค๋ž˜๋œ Windows ๋ฒ„์ „ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์˜ค๋Š˜๋‚  Windows NT 5.x ์‚ฌ์šฉ์ž๋ฅผ ํฌ๊ธฐํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๊ทธ๊ฒƒ์ด ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@MartinZikmund

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

๋‹น์‹ ์˜ ์ž‘์—…์ด ์†Œ์ˆ˜๋ฅผ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ค‘๊ตญ์—์„œ ํ˜„๋Œ€์ ์ธ UI์™€ ์˜ค๋ž˜๋œ ํ”Œ๋žซํผ ์ง€์›์ด ๋ชจ๋‘ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ œ ์นœ๊ตฌ์ธ ์ค‘๊ตญ ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์ด Blink์™€ V8์„ ์—…๋ฐ์ดํŠธ๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  Windows XP๋กœ ์ด์‹ํ–ˆ๋Š”๋ฐ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ตœ์‹  ์•ฑ ๊ฒฝํ—˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Blink๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ค‘๊ตญ์—์„œ ์ตœ์†Œ ์šด์˜ ์ฒด์ œ ๋ฒ„์ „ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์€ ๋ฒ„์ „๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ค‘๊ตญ ์•ฑ์˜ ์šด์˜ ์ฒด์ œ ๋ฒ„์ „ ์š”๊ตฌ ์‚ฌํ•ญ์ด Windows 7์ธ ๊ฒฝ์šฐ "Windows 7 RTM" ๋˜๋Š” "6.1.7600.16385(win7_rtm.090713-1255)"์—์„œ ์•ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์•Œ๋ ค์ค๋‹ˆ๋‹ค. Android ์„ธ๊ณ„์—์„œ๋„ ๋งŽ์€ ์•ฑ์ด ์˜ค๋Š˜๋‚ ์—๋„ ์—ฌ์ „ํžˆ Android 4.4๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ค‘๊ตญ์ด ์•„๋‹Œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ๋Œ€๋ถ€๋ถ„์˜ ์•ฑ์ด ์ค‘๊ตญ์—์„œ ๋‹ค์ˆ˜์˜ ์„ ํƒ์ด ๋  ์ˆ˜ ์—†๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ถ”์‹  ์ตœ์‹  Visual Studio 2019๋ฅผ ์‚ฌ์šฉ ์—…๋ฐ์ดํŠธ๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ ์ตœ์‹  Windows 10 SDK ๋ฐ ์ตœ์‹  C++17 ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ง€๊ธˆ C++20์„ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” Windows XP RTM์šฉ ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VC-LTL(https://github.com/Chuyu-Team/VC-LTL) ๋ฐ YY-Thunks(https://github.com/Chuyu-Team/YY-Thunks) ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚˜ ์ž์‹ ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ

๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์— ์•ˆ์ •์ ์ธ ์ตœ์‹  Windows ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (๋‚˜๋Š”. ๋‚˜๋Š” 19H1 ๋ฐ 19H2์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 10.0.18362 ์˜ค๋Š˜ ์‚ฌ์šฉ)ํ•˜์ง€๋งŒ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๊ณ  Windows 10, ๋ฒ„์ „ 1703 ์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ์„ค์น˜ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๊ณ  ์œˆ๋„์šฐ ๋น„์Šคํƒ€ RTM์„ ์œ„ํ•ด ์„ค๊ณ„ ๋‚ด์—์„œ Win32 ํ”„๋กœ์ ํŠธ, ๋‚ด UWP ํ”„๋กœ์ ํŠธ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๋‚˜์ค‘์— ์กฐ๊ฑด ๋•Œ๋ฌธ์— XAML ์ง€์›์€ RS2์— ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (์ €๋Š” ์กฐ๊ฑด๋ถ€ XAML์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. Windows 10 Build 14393์—๋Š” ์™œ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?)

๋ชจ๋ฆฌ ์ผ„์ง€

์ œ๋ฐœ, ๋ชจ๋“  WinUI 3.0 ์ปจํŠธ๋กค ํด๋ž˜์Šค์˜ ๋ด‰์ธ์„ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค!

๋‚ด ์ดํ•ด์— ๋”ฐ๋ผ Microsoft๋Š” ๋ชจ๋“  UWP ์ œ์–ด ํด๋ž˜์Šค๋ฅผ ๋ด‰์ธํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด JavaScript(์ƒ์†์„ ์•Œ์ง€ ๋ชปํ•จ)๊ฐ€ ์ƒ์†๋œ ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด์ œ JS/HTML์ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒˆ UI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์—ฌ์ „ํžˆ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ๋ด‰์ธํ•  ํ•„์š”๊ฐ€ ๋” ์ด์ƒ ์—†์Šต๋‹ˆ๋‹ค. ์ž ๊ธˆ ํ•ด์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด WPF์—์„œ ํ•ญ์ƒ ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ UWP ์ปจํŠธ๋กค์„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€์ƒํ™” ๋ชฉ๋ก ์ปจํŠธ๋กค ๋˜๋Š” ํŒจ๋„์„ ์ž‘์„ฑํ•  ๋•Œ ์ƒ์†ํ•  ๋ด‰์ธ๋˜์ง€ ์•Š์€ ๊ฐ€์ƒํ™” ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. C#, C++/CX ๋˜๋Š” C++/WinRT ๋ชจ๋‘ ์ƒ์† ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ ์ด๊ฒƒ์„ ๊ฐ•์š”ํ•œ ๊ฒƒ์€ JS/HTML์ด๋ผ๋Š” ์‹คํŒจ๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ WinUI 3.0์„ ์ƒ์„ฑํ•  ๋•Œ ์ด ๋ถˆํ•„์š”ํ•œ ์ œํ•œ์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

@gisfromscratch ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” ํ™•์‹คํžˆ C++ ๊ฐœ๋ฐœ(ํŠนํžˆ C++/WinRT ์‚ฌ์šฉ)์„ ์ง€์›ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

C++๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? CX ๋Œ€์‹  C++/WinRT๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

๋” ๋งŽ์€ ์ƒ˜ํ”Œ ์•ฑ์ด ๋„์›€์ด ๋ ๊นŒ์š”?

๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค๊ณ  ๋ง์”€ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ๋ฌธ์„œ๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ํŠน์ • ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ œ๋ฐœ, ๋ชจ๋“  WinUI 3.0 ์ปจํŠธ๋กค ํด๋ž˜์Šค์˜ ๋ด‰์ธ์„ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค!

@lukasf ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ•  ๊ฒƒ ๊ฐ™์€ ์ผ์ž…๋‹ˆ๋‹ค ๐Ÿ™‚ #780์—์„œ ๊ด€๋ จ ํ† ๋ก ์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

@jesbis C++/WinRT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ›จ์”ฌ ๋” ์†์„ ๋”๋Ÿฝํ˜€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ Photo Editor C++/WinRT ์ƒ˜ํ”Œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ฌ์ธต ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๊ณผ ๊ฐ™์€ ์ œ๊ณต๋œ ๋งํฌ๋ฅผ ์ฝ์œผ๋ฉด ๋งŽ์€ C# ์Šค๋‹ˆํŽซ๊ณผ "C++/WinRT์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ ํŒŒ์ƒ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ ์–ธํ•˜๋Š” ๋ชจ๋“  ๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค๋Š” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค๋กœ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค ์ฃผ๋ณ€์—๋Š” ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค...". ์ด ํŽ˜์ด์ง€๋Š” 95% C#๊ณผ 5% C++๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

@gisfromscratch ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! WinUI 3์šฉ ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์ด๋ฅผ ์—ผ๋‘์— ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

๋„์›€์ด ๋œ๋‹ค๋ฉด ์–ธ๊ธ‰ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ํŽ˜์ด์ง€๋Š” ํŠนํžˆ C++/WinRT๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ํŽ˜์ด์ง€๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ:

XAML ์ปจํŠธ๋กค;

XAML ํ•ญ๋ชฉ ์ปจํŠธ๋กค;

ํ•ด๋‹น ์„น์…˜์—๋Š” ๊ธฐํƒ€ ์—ฌ๋Ÿฌ C++/WinRT ๊ด€๋ จ ํ•ญ๋ชฉ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ํ›Œ๋ฅญํ•œ ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! Xaml Island ๊ฐ€ WinUi 3.0์—์„œ ์ œ๊ฑฐ๋œ ๊ฒƒ์„ ๋ณด๋‹ˆ ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค.
Btw: WinUi 3.0์—์„œ ์–ธ์–ด ํ”„๋กœ์ ์…˜ ์˜ ์ €์ˆ˜์ค€ ๊ตฌํ˜„์ด WinRT ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋‹ค๋ฅธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. WinRT ๊ตฌ์„ฑ ์š”์†Œ ์˜ ์–ธ์–ด ํ”„๋กœ์ ์…˜ ๊ตฌํ˜„์€ ์ปดํŒŒ์ผ ์‹œ๊ฐ„๊ณผ ๋Ÿฐํƒ€์ž„ ๋ชจ๋‘์—์„œ .NET UWP ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„

@zenjia XAML ์•„์ผ๋žœ๋“œ๋Š” WinUI 3์—์„œ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. WinUI 3์—๋Š” WPF/WinForms/MFC ์•ฑ์ด WinUI 3 ์ปจํŠธ๋กค์„ ํ˜ธ์ŠคํŠธํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” API๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” WinUI์˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋”ฐ๋ผ๊ฐ€๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ์— C#์œผ๋กœ UWP ์•ฑ์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ํž˜๋“  ์‹ธ์›€์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ winui 3.0 ์ดํ›„์— ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

winui ๋กœ๋“œ๋งต์— ๋Œ€ํ•ด ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ 4๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋‹ค๋ฃจ์—ˆ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋งŽ์€ ๊ฒ€์ƒ‰์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋‹ต์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค ... ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์งˆ๋ฌธ์„ ํ•  ์ˆ˜์žˆ๋Š” ๋” ๋‚˜์€ ํฌ๋Ÿผ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

  • ๋„ค์ดํ‹ฐ๋ธŒ ์ปจํŠธ๋กค์˜ .net ๋ž˜ํผ๋„ ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ์ฐพ์€ ์œ ์ผํ•œ C# ์ฝ”๋“œ๊ฐ€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž„์„ ๊ณ ๋ คํ•  ๋•Œ ์ด๊ฒƒ์ด winui์˜ .Net ์ธก์„ ๋‹ด๋‹นํ•˜๋Š” github ์žฌํ˜„์ธ์ง€๋Š” ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Microsoft.UI.Xaml.UIElement์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ฐพ๊ณ  ์žˆ์ง€๋งŒ ์–ด๋””์—์„œ๋‚˜ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • winui 3.0์ด ์ถœ์‹œ๋˜๋ฉด UWP appmodel๊ณผ win32 appmodel์ด ๋™์ผํ•œ .Net Core ๋Ÿฐํƒ€์ž„์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๊นŒ? UWP ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์–ด๋–ค ๋ฒ„์ „์˜ .Net ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ „ํ˜€ ์•Œ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. Windows ์ž์ฒด์— ๋‚ด์žฅ๋˜์–ด ์žˆ๊ณ  Windows 10 SDK๋ฅผ ํ†ตํ•ด VS 2019๊ฐ€ UWP์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” .Net ์ฝ”์–ด์˜ ์˜ฌ๋ฐ”๋ฅธ ๋ฒ„์ „์„ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • Xaml ์„ฌ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. WPF์™€ UWP๊ฐ€ ๋™์ผํ•œ ์˜๊ณต์„ ๊ณต์œ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” winforms์™€ WPF ์‚ฌ์ด์—์„œ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์˜๊ณต ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WPF์™€ UWP๊ฐ€ ๋ชจ๋‘ direct-X๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์„œ๋กœ ํ”ฝ์…€์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌ๋ณธ(WPF)์— UWP xaml ์„ฌ์„ ์˜ค๋ฒ„๋ ˆ์ดํ•ด์•ผ ํ•˜๋Š” ๋ฐฑ์Šคํ…Œ์ด์ง€ ๋ฉ”๋‰ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์›ํ™œํ•˜๊ฒŒ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ทธ๋Ÿฐ ๊ฒƒ์„ ์œ„ํ•ด ์ˆ˜๋งŽ์€ ๊ณจ๋Œ€๋ฅผ ๋›ฐ์–ด ๋„˜์–ด์•ผ ํ•  ํ•„์š”๋Š” ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ... WPF ์ดˆ๊ธฐ์— "WebBrowser" winforms ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํด๋ผ์ด์–ธํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜๊ณต ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ "WebBrowser.CompositionMode"๋ผ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋Šฅ์„ ์‹œํ—˜์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ WebBrowser๊ฐ€ WPF์™€ ์ž˜ ์ž‘๋™ํ•˜๋„๋ก ํ—ˆ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ... ํ•˜์ง€๋งŒ ๊ทธ ์ „๋žต์€ ๊ฒฐ๊ตญ ํฌ๊ธฐํ•œ ๊ฒƒ ๊ฐ™์•„์š”. ์•„๋งˆ๋„ UWP์™€ WPF ๊ฐ„์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์€ ๋งค์šฐ ์›ํ™œํ•˜์—ฌ ์„œ๋กœ ํ”ฝ์…€์„ ๊ณต์œ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(winform ๋ฐ WPF์™€ ๋‹ฌ๋ฆฌ). ์ด๊ฒƒ์˜ ์ž ์žฌ์ ์ธ ์ด์  ์ค‘ ํ•˜๋‚˜๋Š” WPF์—์„œ UWP ์ปจํŠธ๋กค์˜ ๊ธฐ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด WPF๋Š” ํ‘œ์‹œ๊ธฐ ๋ ˆ์ด์–ด์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ xaml ์„ฌ์— ์ถ”๊ฐ€ ์‹œ๊ฐ์  ๊ฐœ์ฒด๋ฅผ ์˜ค๋ฒ„๋ ˆ์ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • xaml ์•„์ผ๋žœ๋“œ(์˜ˆ: 50% WPF ๋ฐ 50% WINUI)๊ฐ€ ์žˆ๋Š” WPF ์•ฑ์ด ์–ธ์  ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ARM64๋กœ ์ปดํŒŒ์ผ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ARM์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์€ 100% UWP์ธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐ€๋Šฅํ•˜๋ฉฐ WPF ์ข…์†์„ฑ์ด ๊ธฐ๋ณธ ARM64 ๋Œ€์ƒ ์ง€์ •์„ ํฌ๊ธฐํ•˜๋„๋ก ๊ฐ•์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋Œ€์•ˆ์€ x86 ์—๋ฎฌ๋ ˆ์ด์…˜์—์„œ ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋” ๋Š๋ฆฌ๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.)

์ด ์งˆ๋ฌธ๋“ค์ด ๋ชจ๋‘ winui์˜ ๋กœ๋“œ๋งต๊ณผ ๊ด€๋ จ์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ชจ๋“  ์กฐ์–ธ์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ์ปจํŠธ๋กค์˜ .net ๋ž˜ํผ๋„ ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ์ฐพ์€ ์œ ์ผํ•œ C# ์ฝ”๋“œ๊ฐ€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž„์„ ๊ณ ๋ คํ•  ๋•Œ ์ด๊ฒƒ์ด winui์˜ .Net ์ธก์„ ๋‹ด๋‹นํ•˜๋Š” github ์žฌํ˜„์ธ์ง€๋Š” ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Microsoft.UI.Xaml.UIElement์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ฐพ๊ณ  ์žˆ์ง€๋งŒ ์–ด๋””์—์„œ๋‚˜ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

UIElement๋Š” WinUI 2์— ์—†์œผ๋ฏ€๋กœ ํ˜„์žฌ ์ €์žฅ์†Œ์— ์—†์Šต๋‹ˆ๋‹ค. ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณต๋˜์ง€ ์•Š์€ WinUI 3์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค!

WinRT ํ”„๋กœ์ ์…˜์„ ํ†ตํ•ด .NET์— ๋…ธ์ถœ๋œ ๋‹ค๋ฅธ ๊ธฐ๋ณธ ์ปจํŠธ๋กค์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์˜ˆ์ œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์—ฌ๊ธฐ์— ๋ฌธ์„œํ™”๋œ WinUI 2.2 ์ปจํŠธ๋กค). ๊ทธ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์–ธ์–ด๋ณ„ ๋ž˜ํผ ํŒŒ์ผ์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ .cs ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@marb2000 ์€ ์„ฌ/๋ฐ์Šคํฌํ†ฑ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ๊ฐ€์žฅ ์ž˜ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q: _WinUI 3 UWP์™€ ๋ฐ์Šคํฌํ†ฑ์€ ๋™์ผํ•œ .NET ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?_
A: ๋„ค, ์ด๊ฒƒ์ด ๊ณ„ํš์ž…๋‹ˆ๋‹ค. UWP ๋ฐ ๋ฐ์Šคํฌํ†ฑ์€ .NET Core 3์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ๋˜๋Š” WinRT ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” .NET ๋„ค์ดํ‹ฐ๋ธŒ ๋Œ€์‹  .NET Core 3์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Q: _WPF์™€ UWP๋Š” ๋™์ผํ•œ ์˜๊ณต์„ ๊ณต์œ ํ•ฉ๋‹ˆ๊นŒ?_
A: WPF์™€ WinUI(๋ฐ XAML UWP)๋Š” ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WPF๋Š” DirectX9๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  WinUI/XAML UWP๋Š” XAML์˜ ๊ตฌ์„ฑ, ๋ Œ๋”๋ง ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•ด Windows.UI.Composition์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(DirectX11์˜ ์ตœ์‹  ๋ฒ„์ „ ์ œ์™ธ). ์Šฌํ”„๊ฒŒ๋„ ์ด๋กœ ์ธํ•ด interop์ด ๋งค์šฐ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. WPF ํ‘œ์‹œ๊ธฐ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ œ์•ˆ์€ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ์ฑ„ํƒ์ž๋Š” WPF ์ฝ˜ํ…์ธ  ์œ„์— WinUI/XAML ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ํŒ์—…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์žฌ๋ ˆ์ด์•„์›ƒ์ด ํ•„์š”ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด HWnd๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ WPF ์‹œ๊ฐ์  ํŠธ๋ฆฌ์— ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@dbeavon ์ด๊ฒƒ์€ ์ข‹์€ ์ œ์•ˆ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Q: _Xaml Islands๊ฐ€ ํฌํ•จ๋œ WPF ์•ฑ์ด ARM64๋กœ ์ปดํŒŒ์ผ๋˜๋‚˜์š”?_
A: Windows์šฉ .NET Core 3์ด ARM64๋ฅผ ํ™•์‹คํžˆ ์ง€์›ํ•œ๋‹ค๋ฉด. ํ˜„์žฌ Windows์—์„œ ARM32๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Linux์—์„œ๋Š” ARM64๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Windows์—์„œ๋„ ARM64๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ .NET Core ๋กœ๋“œ๋งต์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. AFAIN์ด์ง€๋งŒ ์•„์ง ๋‚ ์งœ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. @richlander , ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@marb2000

Q: WPF์™€ UWP๋Š” ๋™์ผํ•œ ์˜๊ณต์„ ๊ณต์œ ํ•ฉ๋‹ˆ๊นŒ?

UWP์—์„œ Windows.UI.Composition์„ ์‚ฌ์šฉํ•˜์—ฌ DirectX ๋น„ํŠธ๋งต์—์„œ ๋ Œ๋”๋ง์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ณ„์ธต์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‚˜์š”? ๊ทธ๋Ÿฐ ๋‹ค์Œ WPF๋Š” win2d์™€ ๊ฐ™์ด ์ด ๋ ˆ์ด์–ด์— ์ฐฝ์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์˜๊ณต์„ ๊ณต์œ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ WPF๊ฐ€ ๋ ˆ์ด์–ด์— ๋ Œ๋”๋ง๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

@linindexi ์ฒœ๊ตญ์ด

UWP์—์„œ Windows.UI.Composition์„ ์‚ฌ์šฉํ•˜์—ฌ DirectX ๋น„ํŠธ๋งต์—์„œ ๋ Œ๋”๋ง์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ณ„์ธต์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‚˜์š”?

UWP Xaml์—๋Š” SurfaceImageSource , VirtualSurfaceImageSource ๋ฐ SwapChainPanel ํฌํ•จํ•˜์—ฌ ๋™์ผํ•œ ์˜๊ณต์„ ๊ณต์œ ํ•˜๋„๋ก Xaml์—์„œ DirectX ๋น„ํŠธ๋งต์„ ๋ Œ๋”๋งํ•˜๊ฑฐ๋‚˜ ์ฒด์ธ์„ ๊ตํ™˜ํ•˜๊ณ  ์ด๋ฅผ Windows.UI.Composition์œผ๋กœ ํ•ฉ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://docs.microsoft.com/windows/uwp/gaming/directx-and-xaml-interop

Windows.UI.Composition ์‹œ๊ฐ์  ๊ฐœ์ฒด๋ฅผ UWP Xaml UI ํŠธ๋ฆฌ์— ์‚ฝ์ž…ํ•˜๊ณ  ์—ฌ๊ธฐ์— DirectX ์ฝ˜ํ…์ธ ๋ฅผ ๊ทธ๋ฆด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ICompositorInterop , ICompositionDrawingSurfaceInterop ๋ฐ ICompositionGraphicsDeviceInterop ์‚ฌ์šฉ).

https://docs.microsoft.com/windows/uwp/composition/composition-native-interop

์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ WinUI์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

UWP ๋ฐ์Šคํฌํ†ฑ ์•ฑ์€ WPF/WinForm DLL์„ ์ฐธ์กฐํ•˜๊ณ  WPF/WinFrom ์ฐฝ์„ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ ์ง„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@marb2000 -- Windows ARM64์šฉ .NET Core๊ฐ€ ๋กœ๋“œ๋งต์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๊ณ„ํš์„ ์„ธ์šฐ๊ณ  ์žˆ๋‹ค.

WinUI 3.0์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ์œ„์— win2d๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
(๋”ฐ๋ผ์„œ UWP์—์„œ ๋ถ„๋ฆฌ)
๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋ฏธ์นœ ๋“ฏ์ด ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ DirectX ํ†ตํ•ฉ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์—ฐ๊ตฌํ•˜๊ณ  ์žˆ์ง€๋งŒ UWP Xaml ๊ธฐ๋ณธ ํด๋ž˜์Šค ๋Œ€์‹  WinUI ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก Win2D๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์†๊ฐ€๋ฝ์ด ๊ต์ฐจ๋˜์—ˆ์Šต๋‹ˆ๋‹ค :D

์ฃผ์ œ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. UWP์— ๋Œ€ํ•œ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ - https://github.com/microsoft/microsoft-ui-xaml/ ๋˜๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๊นŒ?

์ฃผ์ œ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. UWP์— ๋Œ€ํ•œ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ - https://github.com/microsoft/microsoft-ui-xaml/ ๋˜๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๊นŒ?

@jtorjo ์ข‹์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค! ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ข‹์€ ๊ณณ์ž…๋‹ˆ๋‹ค.

  • UWP UI ํ”„๋ ˆ์ž„์›Œํฌ API(์˜ˆ: Windows.UI.Xaml)
  • ์œ ์ฐฝํ•œ ๋””์ž์ธ
  • WinUI

์ผ๋ฐ˜์ ์œผ๋กœ docs.microsoft.com ์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์„œ ํŽ˜์ด์ง€ ํ•˜๋‹จ์— "์ด ์ œํ’ˆ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ ๋ณด๋‚ด๊ธฐ" ๋งํฌ๊ฐ€ ์žˆ์–ด์•ผ ํŠน์ • ๊ธฐ๋Šฅ์ด๋‚˜ API์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์œ„์˜ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•˜๊ณ  UWP์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ธก๋ฉด์—์„œ ์ด๋Š” ์—ฌ๋Ÿฌ ๊ด€๋ จ ํ•˜์œ„ ๋ฒ”์ฃผ๊ฐ€ ์žˆ๋Š” ํ”ผ๋“œ๋ฐฑ ํ—ˆ๋ธŒ ์˜ ๊ฐœ๋ฐœ์ž ํ”Œ๋žซํผ ๋ฒ”์ฃผ์— ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

WinUI 3์— UWP SemanticZoom ์ปจํŠธ๋กค์ด ํฌํ•จ๋ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ทธ๋“ค ๋ชจ๋‘์˜ ๊ฐ€์žฅ ๋ฉ‹์ง„ ์ปจํŠธ๋กค์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@jebis ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋ฐฉ๊ธˆ System.IO์— ๋Œ€ํ•œ ํ† ๋ก ์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

Microsoft๋„ Office์— ๋Œ€ํ•œ Windows 7 ์ง€์›์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๋Š”๋ฐ WinUI 3๊ฐ€ ์ง€์›ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด ๋ง์€, ๊ฑฐ์˜ ๋ชจ๋“  ์‹ฌ๊ฐํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋Š” Windows 7์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค(Photoshop, Office, Visual Studio 2019, VSCode ๋“ฑ). WinUI๊ฐ€ Windows 7์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด...

Microsoft๋„ Office์— ๋Œ€ํ•œ Windows 7 ์ง€์›์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๋Š”๋ฐ WinUI 3๊ฐ€ ์ง€์›ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด ๋ง์€, ๊ฑฐ์˜ ๋ชจ๋“  ์‹ฌ๊ฐํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋Š” Windows 7์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค(Photoshop, Office, Visual Studio 2019, VSCode ๋“ฑ). WinUI๊ฐ€ Windows 7์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด...

Microsoft์˜ Windows 7 ์ง€์›์ด ๊ณง ์ข…๋ฃŒ๋˜๋ฏ€๋กœ Office๋Š” ๊ณง ์ง€์›์„ ์ค‘๋‹จํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฏธ Windows 7์„ ์ง€์›ํ•˜๋Š” ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

WinUI๋Š” Windows 10์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฏ€๋กœ Windows 7๋กœ ๋‹ค์‹œ ์ด์‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. OS๊ฐ€ ์ˆ˜๋ช… ์ข…๋ฃŒ์— ์ ‘์–ด๋“ค๋ฉด์„œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์€ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์€ Windows 10์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Q: WinUI 3 UWP์™€ ๋ฐ์Šคํฌํ†ฑ์€ ๋™์ผํ•œ .NET ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?
A: ๋„ค, ์ด๊ฒƒ์ด ๊ณ„ํš์ž…๋‹ˆ๋‹ค. UWP ๋ฐ ๋ฐ์Šคํฌํ†ฑ์€ .NET Core 3์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ๋˜๋Š” WinRT ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” .NET ๋„ค์ดํ‹ฐ๋ธŒ ๋Œ€์‹  .NET Core 3์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
Q: WPF์™€ UWP๋Š” ๋™์ผํ•œ ์˜๊ณต์„ ๊ณต์œ ํ•ฉ๋‹ˆ๊นŒ?
A: WPF์™€ WinUI(๋ฐ XAML UWP)๋Š” ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WPF๋Š” DirectX9๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  WinUI/XAML UWP๋Š” XAML์˜ ๊ตฌ์„ฑ, ๋ Œ๋”๋ง ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•ด Windows.UI.Composition์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(DirectX11์˜ ์ตœ์‹  ๋ฒ„์ „ ์ œ์™ธ). ์Šฌํ”„๊ฒŒ๋„ ์ด๋กœ ์ธํ•ด interop์ด ๋งค์šฐ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. WPF ํ‘œ์‹œ๊ธฐ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ œ์•ˆ์€ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ์ฑ„ํƒ์ž๋Š” WPF ์ฝ˜ํ…์ธ  ์œ„์— WinUI/XAML ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ํŒ์—…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์žฌ๋ ˆ์ด์•„์›ƒ์ด ํ•„์š”ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด HWnd๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ WPF ์‹œ๊ฐ์  ํŠธ๋ฆฌ์— ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@dbeavon ์ด๊ฒƒ์€ ์ข‹์€ ์ œ์•ˆ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
Q: Xaml Islands๊ฐ€ ํฌํ•จ๋œ WPF ์•ฑ์€ ARM64๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๊นŒ?
A: Windows์šฉ .NET Core 3์ด ARM64๋ฅผ ํ™•์‹คํžˆ ์ง€์›ํ•œ๋‹ค๋ฉด. ํ˜„์žฌ Windows์—์„œ ARM32๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Linux์—์„œ๋Š” ARM64๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Windows์—์„œ๋„ ARM64๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ .NET Core ๋กœ๋“œ๋งต์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. AFAIN์ด์ง€๋งŒ ์•„์ง ๋‚ ์งœ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. @richlander , ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿผ UWP ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ œ๊ฑฐํ• ๊นŒ์š”? ํ˜„์žฌ ํ˜•ํƒœ์˜ UWP๋„ ์‚ฌ๋ผ์ง€๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” App Store์˜ ๋ณดํ˜ธ๋œ ์ƒŒ๋“œ๋ฐ•์Šค์™€ ํ•จ๊ป˜ ๋‹ค์Œ ์ค‘ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๊ทธ๋Ÿผ UWP ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ œ๊ฑฐํ• ๊นŒ์š”? ํ˜„์žฌ ํ˜•ํƒœ์˜ UWP๋„ ์‚ฌ๋ผ์ง€๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” App Store์˜ ๋ณดํ˜ธ๋œ ์ƒŒ๋“œ๋ฐ•์Šค์™€ ํ•จ๊ป˜ ๋‹ค์Œ ์ค‘ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

UWP ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ๋Œ€๋‹จํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ UWP๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์œ ๋‹ˆ๋ฒ„์„ค Windows ํ”Œ๋žซํผ์€ Windows ์žฅ์น˜(PC, Xbox, HoloLens ๋“ฑ)์˜ ์ „์ฒด ์ŠคํŽ™ํŠธ๋Ÿผ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด๋ฉฐ Windows๊ฐ€ ๊ธฐ๋ณธ ํ”Œ๋žซํผ ํˆฌ์ž์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. RE: ํŠนํžˆ ์ƒŒ๋“œ๋ฐ•์‹ฑ: ์•ฑ ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ๋Š” ์•ฑ๊ณผ UWP ๋ฐ ๋ฐ์Šคํฌํ†ฑ ์•ฑ ์‚ฌ์šฉ์ž ๋ชจ๋‘์—๊ฒŒ ๊ณ„์†ํ•ด์„œ ๋งŽ์€ ์ค‘์š”ํ•œ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์Šคํฌํ†ฑ(win32) ์•ฑ ๋ชจ๋ธ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก UX ํ”Œ๋žซํผ(์˜ˆ: WinUI)์˜ ๋ฒ”์œ„๋ฅผ ํ™•๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” WinUI๋ฅผ Windows์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ๋” ์ž์ฃผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , ๋” ์‰ฝ๊ฒŒ ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์ƒˆ ์•ฑ์˜ ๊ฒฝ์šฐ ์•ฑ์— ์ ํ•ฉํ•œ ํ•ญ๋ชฉ์— ๋”ฐ๋ผ UWP์™€ ๋ฐ์Šคํฌํ†ฑ ์•ฑ ๋ชจ๋ธ ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ์กด ๋ฐ์Šคํฌํ†ฑ ์•ฑ(์˜ˆ: WPF, WinForms, MFC)์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ตœ์‹  ์•ฑ์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Xaml Islands๋ฅผ ์‚ฌ์šฉํ•˜๋Š” WinUI ๊ธฐ๋Šฅ.

๊ทธ๋Ÿผ UWP ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์ œ๊ฑฐํ• ๊นŒ์š”? ํ˜„์žฌ ํ˜•ํƒœ์˜ UWP๋„ ์‚ฌ๋ผ์ง€๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” App Store์˜ ๋ณดํ˜ธ๋œ ์ƒŒ๋“œ๋ฐ•์Šค์™€ ํ•จ๊ป˜ ๋‹ค์Œ ์ค‘ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

UWP๋Š” WinUI 3.0 ์•ฑ์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. UWP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Xbox, Hololens ๋“ฑ์—์„œ ์•ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ WinUI 3.0์„ ์‚ฌ์šฉํ•˜์—ฌ Win32 ์•ฑ์„ ๋นŒ๋“œํ•˜๊ณ  UWP API์— ์•ก์„ธ์Šคํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์•ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋Š” ๋” ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

@mdtauk @jesbis ์ €๋Š” ์ „์ ์œผ๋กœ UWP๋ฅผ ์ง€์ง€ํ•˜์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š”:

  1. ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฝ๋‹ˆ๋‹ค! (WPF๋ณด๋‹ค 6๋ฐฐ ๋Š๋ฆผ - ํƒ€๊ฒŸ ๋ฒ„์ „ ๋นŒ๋“œ 1809 - ๋นŒ๋“œ 17783์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)
  2. StorageFolder ํŒŒ์ผ ์—ด๊ฑฐ API๊ฐ€ UWP์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฝ๋‹ˆ๋‹ค. UWP ์ƒŒ๋“œ๋ฐ•์Šค(์ ์–ด๋„ Windows ๋ฐ์Šคํฌํ†ฑ์—์„œ๋Š”)๋Š” ๋„์›€์ด ๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
  3. ๋ฌผ๋ก  ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์žฌ๋ฏธ์žˆ์ง€๋งŒ UWP์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ๋“  UWP ์ฝ”๋“œ์— ๋จนํ˜€๋“ค๊ณ  ๋‚˜์ค‘์— ๋””๋ฒ„๊ฑฐ์—์„œ ์ค‘๋‹จ๋˜๊ณ  ๋ชจ๋“  ์Šคํƒ ์ปจํ…์ŠคํŠธ๊ฐ€ ์†์‹ค๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋”์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ž์ฒด ๋‚ด๋ถ€์— ์Šคํƒ ์ปจํ…์ŠคํŠธ๊ฐ€ ์žˆ์ง€๋งŒ ํ•ญ์ƒ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  4. UWP ์ฝ”๋“œ๋ฅผ ํ”„๋กœํŒŒ์ผ๋งํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ dotTrace๋Š” ์‹œ๋„ํ•  ๋•Œ ์ฆ‰์‹œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

(WPF์—์„œ UWP๋กœ ์ฝ”๋“œ๋ฅผ ์ด์‹ํ•˜๋Š” ๋ฐ ํ•œ ๋‹ฌ ์ด์ƒ์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. win2d๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— UWP๋ฅผ ํ”ผํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)

@mdtauk @jesbis ์ €๋Š” ์ „์ ์œผ๋กœ UWP๋ฅผ ์ง€์ง€ํ•˜์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š”:

  1. ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฝ๋‹ˆ๋‹ค! (WPF๋ณด๋‹ค 6๋ฐฐ ๋Š๋ฆผ - ํƒ€๊ฒŸ ๋ฒ„์ „ ๋นŒ๋“œ 1809 - ๋นŒ๋“œ 17783์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)
  2. StorageFolder ํŒŒ์ผ ์—ด๊ฑฐ API๊ฐ€ UWP์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฝ๋‹ˆ๋‹ค. UWP ์ƒŒ๋“œ๋ฐ•์Šค(์ ์–ด๋„ Windows ๋ฐ์Šคํฌํ†ฑ์—์„œ๋Š”)๋Š” ๋„์›€์ด ๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
  3. ๋ฌผ๋ก  ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์žฌ๋ฏธ์žˆ์ง€๋งŒ UWP์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ๋“  UWP ์ฝ”๋“œ์— ๋จนํ˜€๋“ค๊ณ  ๋‚˜์ค‘์— ๋””๋ฒ„๊ฑฐ์—์„œ ์ค‘๋‹จ๋˜๊ณ  ๋ชจ๋“  ์Šคํƒ ์ปจํ…์ŠคํŠธ๊ฐ€ ์†์‹ค๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋”์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ž์ฒด ๋‚ด๋ถ€์— ์Šคํƒ ์ปจํ…์ŠคํŠธ๊ฐ€ ์žˆ์ง€๋งŒ ํ•ญ์ƒ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  4. UWP ์ฝ”๋“œ๋ฅผ ํ”„๋กœํŒŒ์ผ๋งํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ dotTrace๋Š” ์‹œ๋„ํ•  ๋•Œ ์ฆ‰์‹œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

(WPF์—์„œ UWP๋กœ ์ฝ”๋“œ๋ฅผ ์ด์‹ํ•˜๋Š” ๋ฐ ํ•œ ๋‹ฌ ์ด์ƒ์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. win2d๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— UWP๋ฅผ ํ”ผํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)

์ด ์Šค๋ ˆ๋“œ #1517์— ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ๊ฒƒ์ด๋ฉฐ SDK ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€์˜ ์ด๋ฆ„์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@jtorjo

์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฝ๋‹ˆ๋‹ค! (WPF๋ณด๋‹ค 6๋ฐฐ ๋” ๋Š๋ฆผ

C++/WinRT๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@mdtauk ๋ฐฉ๊ธˆ ๊ฑฐ๊ธฐ์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค

@MarkIngramUK C# ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ - ๋กœ๋“œ๋งต ๋ฐ ์•ŒํŒŒ ํ”ผ๋“œ๋ฐฑ์„ #1531๋กœ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค.

ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. WinUI ๋น„ํŠธ๊ฐ€ OS์—์„œ ์ œ๊ฑฐ๋˜๋ฉด ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์ผ์ข…์˜ ํ˜ธํ™˜์„ฑ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ์‚ฝ์ž…๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋Ÿฌ๊ฐ€ ์žˆ๋Š” Xamarin, Uno ๋˜๋Š” .Net Core๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”.

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋กœ๋“œ๋งต์— ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๊ฐ€์ •์— ๋ถˆ๊ณผํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@mdtauk , @zezba9000 ๊ทธ๊ฒƒ์€ ๋ชจ๋‘ ์ด๋ก ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํŒ€์— ๋งŽ์€ ํ”Œ๋žซํผ ์ถ”์ƒํ™” ์ „๋ฌธ ์ง€์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๊ทธ๋ ‡๋“ฏ์ด ๋น„์šฉ, ์ผ์ • ๋ฐ ์˜ˆ์ƒ๋˜๋Š” ์ด์ ์œผ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค ๐Ÿ˜Š

์ œ3์ž๊ฐ€ Android ๋˜๋Š” iOS์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚œ ์ผ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ™•์‹คํžˆ ๊ทธ๊ฒƒ์— ๊ธฐ์—ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@andreinitescu ํ˜ธ์–ธ์žฅ๋‹ด๊ณผ ๋ถˆ๋งŒ์— ๋Œ€ํ•ด ์œ ๊ฐ์ด์ง€๋งŒ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด WinUI 3์„ ์‚ฌ์šฉํ•˜์—ฌ Windows/Win32 ์ „์šฉ WPF๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋™์•ˆ... Windows์˜ WinUI๋Š” Windows ์ „์šฉ ๋ Œ๋”๋ง API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ถˆ๊ฐ€์ง€๋ก ์ž๊ฐ€ ์•„๋‹Œ ํ•˜๋‚˜, WinUI๋Š” ํƒ€์‚ฌ์— ์˜์กดํ•˜์—ฌ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ WinUI๋ฅผ ์žฌ๊ตฌํ˜„/์กฐ๊ฐํ™”(ugg)ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(UNO proj์™€ ๊ฐ™์ด ๋ฉ‹์ง€์ง€๋งŒ .NET์— ๋Œ€ํ•œ Mono์™€ ๊ฐ™์€ ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•˜๊ณ  ๋‹จํŽธํ™”์— ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋„๋ก ์„ค๊ณ„๋จ). Skia์™€ ๊ฐ™์€ ํœด๋Œ€์šฉ ์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ MS ์ œํ’ˆ์„ ๋งŒ๋“œ๋Š” ๋Œ€์‹ . ๋˜ํ•œ C#์„ WinUI์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ 1%์˜ ์‚ฌ๋žŒ๋“ค์„ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ํ•„์š”์„ฑ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. C#์„ ์–ด๋–ค ์˜๋ฏธ์—์„œ๋Š” ๋‘ ๋ฒˆ์งธ ํด๋ž˜์Šค ๋Œ€์ƒ์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋” ์ค‘์š”ํ•˜๊ฒŒ๋Š” ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ํ›จ์”ฌ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Android๊ฐ€ ๋งŽ์€ ํ•ต์‹ฌ ์•ฑ์— ๋Œ€ํ•ด Java + post-AOT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ Windows๋Š” C# + pre-AOT๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. C++๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„๊ทธ์˜ 70%๋Š” ๊ฒฐ๊ตญ ํ• ๋‹น ํ•ด์ œ๋œ ptr์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํšŒ์‚ฌ ๋‚ด ๊ทธ๋ฃน ๊ฐ„์˜ ์˜์‚ฌ ์†Œํ†ต ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ๋ชจ๋ฐ”์ผ ํ”Œ๋žซํผ(์‚ฌ์šฉํ•  ์˜ˆ์ •)์šฉ Android OS ๋ฒ„์ „์„ ์ถœ์‹œํ•˜๊ณ  ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์ ์  ๋” ์ปค์ง€๋Š” ์žฅ๊ธฐ์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€ MS ๋„๊ตฌ๋กœ ... ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์ƒํ™ฉ๊ณผ ๊ฐ™์€ ๋˜ ๋‹ค๋ฅธ WinPhone7์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฉ์–ด๋กœ์„œ์˜ Windows๋Š” ๋” ์ด์ƒ WinNT ์ปค๋„์— ์–ฝ๋งค์—ฌ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์—์ฝ” ์‹œ์Šคํ…œ์€ ๋‹จ์ผ ํ”Œ๋žซํผ ๋˜๋Š” ํ•˜๋‚˜์˜ ํšŒ์‚ฌ๊ฐ€ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ด์ƒ์ž…๋‹ˆ๋‹ค.

MS๋Š” ๊ฑฐ์˜ 20๋…„ ์ „ OS9์—์„œ OSX๋กœ ์ด๋™ํ•˜๋ฉด์„œ Apple์ด ํ•œ ์ผ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. UNIX/LINUX ์ปค๋„๋กœ ์ด๋™ํ•˜์—ฌ ๋ฐ˜์ฐฝ๊ณ ๋ฅผ ์—†์•ค๋‹ค๋Š” ์ ์—์„œ ํ–ฅํ›„ 5-10๋…„ ๋™์•ˆ ๋ ˆ๊ฑฐ์‹œ ์†Œํ”„ํŠธ์›จ์–ด์šฉ OS์— ์—๋ฎฌ๋ ˆ์ดํ„ฐ/์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ˜๋ฉด ์‚ฌ๋žŒ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์†Œํ”„ํŠธ์›จ์–ด์™€ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. (๋‹น์‹ ์ด ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ์›ํ• ์ง€ ์ƒ๊ฐํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ฟˆ์„ ๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

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