Microsoft-ui-xaml: WinUI 3.0 ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๋ฐ ๋„๊ตฌ - ์ž…๋ ฅ ํ•„์š”

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

WinUI 3.0 ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๋ฐ ๋„๊ตฌ - ์ž…๋ ฅ ํ•„์š”

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

ํ•ญ๋ชฉ์€ ๋‹ค๋ฃน๋‹ˆ๋‹ค

  • ๋ฐ์Šคํฌํƒ‘ ์•ฑ์˜ WinUI
  • WinUI 3.0 ๊ฐœ๋ฐœ ํ…œํ”Œ๋ฆฟ ๋ฐ ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ
  • ์–ธ์–ด ์ง€์›
  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ํ†ตํ•ฉ
  • ํฌ์žฅ

๋ฐ์Šคํฌํƒ‘ ์•ฑ์˜ WinUI

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

ํ…œํ”Œ๋ฆฟ

WinUI 3.0์„ ์‚ฌ์šฉํ•˜์—ฌ Visual Studio 2019์šฉ ์ƒˆ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ…œํ”Œ๋ฆฟ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” WinUI 3.0์— ํ•„์š”ํ•œ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ์— ํ†ตํ•ฉ๋œ WinUI Nuget ํŒจํ‚ค์ง€, ์—…๋ฐ์ดํŠธ๋œ ์ฝ”๋“œ ์ˆจ๊น€ ๋ฐ ๋„๊ตฌ ์ฐฝ์— ๋‚˜์—ด๋œ ํ•œ ์„ธํŠธ์˜ ์ปจํŠธ๋กค. ์˜ค๋Š˜๋‚  WinUI Nuget์„ ์ถ”๊ฐ€ํ•˜๋ฉด Intellisense์™€ ๋„๊ตฌ ์ฐฝ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ์ปจํŠธ๋กค ์„ธํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์•ˆ๋‚ด์—์„œ๋Š” WinUI 3.0 UWP C# ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

CSharp_WT1

CSharp_WT2

CSharp_WT3

CSharp_WT4

CSharp_WT5

์—ด๋ฆฐ ์งˆ๋ฌธ

  • ์ด์ „ ๋ฒ„์ „์˜ UWP XAML ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ๊ด€์‹ฌ/ํ•„์š”๊ฐ€ VS ์ƒˆ ํ”„๋กœ์ ํŠธ ํ๋ฆ„์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๊นŒ?
  • Visual Studio์˜ ํ…œํ”Œ๋ฆฟ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • ์ด ์—ฐ์Šต์ด ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉฐ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๊ตฌ์ฒดํ™”๋˜๋ฉด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

์–ธ์–ด ์ง€์›

์šฐ๋ฆฌ๋Š” ๊ท€ํ•˜์˜ ํ”ผ๋“œ๋ฐฑ(ํ† ๋ก  ์Šค๋ ˆ๋“œ ๋งํฌ)์„ ๋“ค์—ˆ๊ณ  ์—ฌ๊ธฐ์— WinUI 3.0๊ณผ ํ•จ๊ป˜ ์ง€์›ํ•  ๊ณ„ํš์ธ ์–ธ์–ด ๋ชฉ๋ก์ด ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์”จ#
  • C++/WinRT
  • ๋น„์ฃผ์–ผ ๋ฒ ์ด์ง

ํ† ๋ก ์—์„œ ์–ป์€ ์ง์ ‘์ ์ธ ํ”ผ๋“œ๋ฐฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ F# ์ง€์›์„ ๋ชจ์ƒ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

์ด์ฃผ

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(WinUI 3.0 ์ฑ„ํƒ) ๋ฐ ํ˜„๋Œ€ํ™”๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋ฉด ๊ท€ํ•˜์˜ ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

WinUI 3.0 ๊ฐœ๋ฐœ์ž ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉดโ€ฆ

  1. ์†”๋ฃจ์…˜์— WinUI ์ฐธ์กฐ ์ถ”๊ฐ€
  2. ์ตœ์‹  Microsoft๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ฝ”๋“œ ์ˆจ๊น€์˜ ๋ชจ๋“  ์ด๋ฆ„ ๊ณต๊ฐ„์„ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.*
  3. SDK ์ปจํŠธ๋กค์ด ์•„๋‹Œ WinUI ์ปจํŠธ๋กค์ด ๋กœ๋“œ๋˜๋„๋ก ์ปจํŠธ๋กค ์ฐธ์กฐ ์—…๋ฐ์ดํŠธ
  4. ํ…Œ์ŠคํŠธ ๋ฐ ํ™•์ธ

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

์—ด๋ฆฐ ์งˆ๋ฌธ

  • 1-3๋‹จ๊ณ„๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?
  • ๊ธฐ๋ณธ Windows 10 ์ปจํŠธ๋กค ์„ธํŠธ ์™ธ๋ถ€์—์„œ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
  • ํ˜„์žฌ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํฌ์žฅ

MSIX๋Š” ๋ชจ๋“  ์•ฑ์— ๋Œ€ํ•œ ์ตœ์‹  ํŒจํ‚ค์ง• ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Win32์˜ WinUI์˜ ๊ฒฝ์šฐ ClickOnce๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์–ด๋–ค ๋‹ค๋ฅธ ํŒจํ‚ค์ง• ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์›์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํŠนํžˆ Win32์˜ WinUI์˜ ๊ฒฝ์šฐ

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

  • ํ˜„์ง€ํ™”
  • ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค
  • ๋””์ž์ด๋„ˆ ๊ฒฝํ—˜
  • ์œˆ๋„์šฐ ๊ธฐ๋Šฅ
discussion team-Markup

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

WinUI๊ฐ€ ์ƒˆ ํ”„๋กœ์ ํŠธ SDK( Microsoft.NET.Sdk ๋˜๋Š” MSBuild.Sdk.Extras)๋ฅผ ์ง€์›ํ•œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด์ „ ์Šคํƒ€์ผ์˜ csproj ํŒŒ์ผ์€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ TargetFrameworks๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์•„๋งˆ๋„ ๋จผ ์ด์•ผ๊ธฐ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ Blend๋Š” ์ •๋ฐ€ ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋””์ž์ธ ์ค‘์‹ฌ์˜ ์›Œํฌํ”Œ๋กœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

XAML ๋””์ž์ด๋„ˆ๋Š” ๊ฐ•๋ ฅํ•˜๊ณ  ๊ฐ•๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€/์ฐฝ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•, ํŠนํžˆ ์ƒ์Šน๋œ ์ปจํŠธ๋กค์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ณ„ ์ปจํŠธ๋กค/ํ…œํ”Œ๋ฆฟ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€ ์™ธ๋ถ€์˜ UI ์š”์†Œ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

CoreOS, "Surface Phone", Surface Hub, Xbox, HoloLens์šฉ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋””์Šคํ”Œ๋ ˆ์ด ์ปจํŠธ๋กค ์‚ฌ์šฉ์ž ์ง€์ •์€ ๋ชจ๋‘ ๋””์ž์ด๋„ˆ ๋‚ด์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

WinForms, WPF, MFC ๋ฐ WinUI Desktop์ด ์ž‘๋™ํ•  ๊ธฐํƒ€ ๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ˜ผํ•ฉ๋œ XAML์šฉ ๊ฒฐํ•ฉ ๋””์ž์ด๋„ˆ.

XAML์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚ด๋ณด๋‚ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋””์ž์ด๋„ˆ๋Š” ๊ธฐ๋ณธ ์•ฑ๊ณผ ๊ฒฉ๋ฆฌ๋œ Blend์—์„œ ์ž‘์—…ํ•œ ๋‹ค์Œ ์ด๋ฅผ ๊ฐœ๋ฐœ ํŒ€์— ์ „๋‹ฌํ•˜์—ฌ ์•ฑ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

WinForms, MFC ๋“ฑ๊ณผ ๊ด€๋ จ๋œ ์•ฑ์œผ๋กœ ๋‹ค์–‘ํ•œ DPI ํ™•์žฅ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•

์ƒˆ๋กœ์šด ์ปจํŠธ๋กค์šฉ ํ…œํ”Œ๋ฆฟ, ๋งž์ถคํ˜• ํ…Œ๋งˆ ๋ฆฌ์†Œ์Šค ์‚ฌ์ „, Fluent ํ…Œ๋งˆ ํŽธ์ง‘๊ธฐ ํ†ตํ•ฉ, ์ง€์›๋˜๋Š” ์•ฑ ์กฐํ•ฉ์šฉ ํ…œํ”Œ๋ฆฟ(Xaml UI๊ฐ€ ์žˆ๋Š” Win32 MFC ๋“ฑ) .

ํŒŒ์ผ ์„ ํƒ๊ธฐ, ์ž‘์—… ํŠธ๋ ˆ์ด ํ”Œ๋ผ์ด์•„์›ƒ๊ณผ ๊ฐ™์€ ์…ธ ํ†ตํ•ฉ ์ง€์ ์šฉ ํ…œํ”Œ๋ฆฟ.

๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค...

์ œ ์ƒ๊ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. MSIX๋Š” ๋ชจ๋‘ ํ›Œ๋ฅญํ•˜์ง€๋งŒ MSIX๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๋” ๋ณต์žกํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐ ์—ฌ์ „ํžˆ ์ข‹์€ MSI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•„์š”ํ•œ Authenticode ์ธ์ฆ์„œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋น„์‹ธ๊ธฐ ๋•Œ๋ฌธ์— MSIX๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๊บผ๋ ค์ง‘๋‹ˆ๋‹ค. (๋‚˜๋Š” ํšŒ์‚ฌ์—์„œ ๊ตฌ์ž…ํ•œ ์ธ์ฆ์„œ๋งŒํผ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ž์ฒด ์„œ๋ช…๋œ ์ธ์ฆ์„œ๋กœ ๋‚ด ์ฝ”๋“œ์— ์‰ฝ๊ฒŒ ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Windows๋Š” ์ด๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Windows๋Š” ์ž์ฒด ์„œ๋ช…๋œ MSI ํŒŒ์ผ์„ ๊ธฐ๊บผ์ด ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. .) MSI ๊ธฐ๋ฐ˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ WinUI 3์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.
  2. ๋” ๋‚˜์€ XAML ๋””์ž์ด๋„ˆ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ WinUI XAML๊ณผ WinForms/WPF ๋””์ž์ด๋„ˆ๋ฅผ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๋Š” ๋ณต์žก์„ฑ์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” VS์˜ ๋‹ค๋ฅธ ํƒญ ์‚ฌ์ด์—์„œ ํ”Œ๋ฆฝ ํ”Œ๋กญ์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  3. ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด C# ๋ฐ Visual Basic ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ์—์„œ XBF ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (XBF ์ปดํŒŒ์ผ๋Ÿฌ ์†Œ์Šค๋‚˜ ๊ทธ๊ฒƒ์„ ์žฌํ˜„ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๋ฌธ์„œ๊ฐ€ ๊ณต๊ฐœ๋œ๋‹ค๋ฉด ๋”์šฑ ์ข‹๊ฒ ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์–ผ๋งˆ๋‚˜ ๋ ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.)
  4. C++ ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ์—์„œ C++/WinRT ๋ฐ MIDL 3์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ C++/WinRT ์‚ฌ์šฉ์— ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ ์ง€์›์€ ๋ถˆ์•ˆ์ •ํ•˜๊ณ  ํˆฌ๋ฐ•ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด, ํ…œํ”Œ๋ฆฟ์ด ์ž๋™์œผ๋กœ ๋ฐ‘์ค„๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ํ•„์š”ํ•œ IDL ํŒŒ์ผ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. , ๋‚ด ๊ฒฝํ—˜์ƒ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด *.h ๋ฐ *.cpp ํŒŒ์ผ์„ ๋”ฐ๋กœ ์ด๋™ํ•˜๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•œ ๋‹ค์Œ vcxproj ํŒŒ์ผ์„ ์–ธ๋กœ๋“œ ๋ฐ ํŽธ์ง‘ํ•˜์—ฌ ์ค‘์ฒฉ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.) vcxproj๋ณด๋‹ค ๋” ํ˜„๋Œ€์ ์ด๊ณ  ์œ ์—ฐํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ XBF ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ•ํ•œ ์˜์กด์„ฑ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ผ์ด ์ƒ๊ธฐ๋ฉด ์ด๊ณณ์— ๊ธ€์„ ์˜ฌ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

  1. ์—ฌ๊ธฐ์„œ ๊ถ๊ธˆํ•œ ๊ฒƒ์€... ๊ธ€์Ž„, < winui:Listview ๋˜๋Š” < controls:listview ๋˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฐ์ •ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ฐ€๋Šฅํ•˜๋ฉด ์ง€๊ธˆ๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์„ ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ปจํŠธ๋กค์— ๋Œ€ํ•ด ๊ดœ์ฐฎ๊ณ  ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด XAML์ด ์•…๋ชฝ์„ ์ฝ๊ณ  ๋งค์šฐ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.
    Windows.UI.Xaml.Controls๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  WinUI๊ฐ€ ๊ธฐ๋ณธ ์„ ํƒ์ด๋ฏ€๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  2. ์ง€๊ธˆ์€ XAML ๋””์ž์ด๋„ˆ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์„ค์ •์—์„œ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. XAML Designer๋Š” ๋Š๋ฆฌ๊ณ  ๋” ๋‚˜์€ ์ง€์›์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. WPF์—๋Š” ์ข‹์•˜์ง€๋งŒ UWP์—๋Š” ์ข‹์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ, ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ ํ‘œ์‹œ ๋“ฑ์„ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.
    ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋จผ ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‚ดํŽด๋ณด๊ธฐ์— ์ข‹์€ ํ”ผ๋“œ๋ฐฑ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. WPF ๋””์ž์ด๋„ˆ๊ฐ€ ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.
    ์ด๊ฒƒ์€ ์ƒŒ๋“œ๋ฐ•์Šค ๋•Œ๋ฌธ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๋ฌด์—‡ ๋•Œ๋ฌธ์ž…๋‹ˆ๊นŒ?

  3. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํฅ๋ฏธ๋กœ์šด ๋„๊ตฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ScrollViewer์™€ ๊ฐ™์€ ์—…๋ฐ์ดํŠธ๋œ WinUI 3.0 ์ปจํŠธ๋กค๊ณผ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„๊ตฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์—…๋ฐ์ดํŠธ/์žฌ์ž‘์„ฑ๋œ ์ปจํŠธ๋กค์— ๋Œ€ํ•ด ์ตœ์†Œํ•œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

TL;DR ์•ฑ ๋ชจ๋ธ ์ง€์› ์ž„์˜ ์ธ์Šคํ„ด์Šค ๊ณต์กด์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฒ„์ „์ด๋ผ๋„ Visual Studio ํ•˜์ด๋ธŒ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ/์˜ต์…˜ ์„ธํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์œ ์ผํ•œ ์†”๋ฃจ์…˜์€ xcopy์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„๋ฌด๋„ ์ด๊ฒƒ์„ ์ ‘๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ฒซ์งธ, ๋งค์ผ ๊ฐœ๋ฐœํ•˜๋Š” ์•ฑ๋„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ >>debug ์‚ฌ์šฉ). ๊ทธ๋ž˜์„œ ์•ˆ์ •์ ์ธ ๋นŒ๋“œ์™€ ๊ณต์กดํ•˜๋Š” ๊ฐœ๋ฐœ ๋นŒ๋“œ๊ฐ€ ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ๋Š˜๋ฆฌ๊ณ , ๋””๋ฒ„๊ทธ msix๋ฅผ ํŒจํ‚ค์ง€ํ•˜๊ณ , ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ๋””๋ฒ„๊ทธํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋””๋ฒ„๊ทธ ๋‹จ๊ณ„์—์„œ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ๋””๋ฒ„๊ทธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ž„์˜์˜ ๊ฐ€์งœ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ๊ฒฉ๋ฆฌ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ก ์ ์œผ๋กœ ํด๋” ์„ ํƒ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜์—ฌ ํ•ด๊ฒฐ๋˜์ง€๋งŒ UWP์˜ SQLite๊ฐ€ ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ๋‚ด๊ฐ€ ์•„๋Š” ๋‹ค๋ฅธ ์ž„๋ฒ ๋””๋“œ ACID ์—”์ง„์ด ์—†๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ์œ ๊ฐ์ž…๋‹ˆ๋‹ค.

์•„, ๊ทธ๋ฆฌ๊ณ  ๋˜ ํ•œ ๊ฐ€์ง€. vcxproj๊ฐ€ NuGet ํŒจํ‚ค์ง€ ์ฐธ์กฐ์— packages.config๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง _์ •๋ง_ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. WinUI๋Š” C++/WinRT ๋ฐ ๊ธฐํƒ€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ NuGet ํŒจํ‚ค์ง€๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” packages.config๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ •๋ง๋กœ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PackageReference๊ฐ€ ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค(vcxproj๋ฅผ ๋‹ค๋ฅธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ด๋„ ๋นŒ๋“œ๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š์Œ). ๋ณต์› ๋Œ€์ƒ์ด ์ ์ ˆํ•œ ์‹œ๊ฐ„์— ์‹คํ–‰๋˜๋Š” ํ•œ vcxproj์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ์‹ค์ œ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. (vcxproj ๋Œ€์ƒ์ด ๋น„ SDK C# ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ PackageReference ๋ณต์› ๊ธฐ๊ณ„๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.) ์ €๋Š” PackageReference ํ•ญ๋ชฉ ์ง‘ํ•ฉ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ณต์› ๋Œ€์ƒ์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์ƒ ์ง‘ํ•ฉ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. VS๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ž์ฒด(์•„์ง). ๋ถˆํ–‰ํžˆ๋„ NuGet ์‹œ์Šคํ…œ์€ ์ด์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ์•Œ์ง€ ๋ชปํ•˜๋ฏ€๋กœ C++/WinRT ํŒŒ์ผ ํ…œํ”Œ๋ฆฟ์„ ์ถ”๊ฐ€ํ•  ๋•Œ packages.config ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ˜ผ๋ž€์ด ๋ฐœ์ƒํ•˜์—ฌ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ์†์ƒ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ ์–ด๋„ WinUI 3๊ฐ€ ์ถœ์‹œ๋˜๊ธฐ ์ „์— ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

WinUI๊ฐ€ ์ƒˆ ํ”„๋กœ์ ํŠธ SDK( Microsoft.NET.Sdk ๋˜๋Š” MSBuild.Sdk.Extras)๋ฅผ ์ง€์›ํ•œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด์ „ ์Šคํƒ€์ผ์˜ csproj ํŒŒ์ผ์€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ TargetFrameworks๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

F#์ด ์ง€์›๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์—์„œ Azure DevOps ๋ฐ Visual Studio App Center ๊ธฐ๋Šฅ์„ ๋…ผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@vitorgrs ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ ‘๋‘์‚ฌ๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ปจํŠธ๋กค์„ ์„ ํ˜ธํ•˜๋ฉฐ ์ฝ”๋“œ์— "๋…ธ์ด์ฆˆ"๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฒƒ์ด ๊ธฐ๋ณธ ์ปจํŠธ๋กค์ด๊ณ  ์–ด๋–ค ๊ฒƒ์ด ํƒ€์‚ฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๊ฐ€ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํฐ ํƒ€์‚ฌ ๊ณต๊ธ‰์ž(Telerik, DevExpress,...)์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ ํฐ ์ผ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ

์ด์ „ ๋ฒ„์ „์˜ UWP XAML ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ๊ด€์‹ฌ/ํ•„์š”๊ฐ€ VS ์ƒˆ ํ”„๋กœ์ ํŠธ ํ๋ฆ„์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ์ชฝ์—์„œ๋Š” ํ…œํ”Œ๋ฆฟ์„ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ UWP์— WinUI์— ์—†๋Š” ์ปจํŠธ๋กค์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ธฐ์กด UWP ์•ฑ์„ ๋นŒ๋“œํ•˜๊ณ  ํ•„์š”ํ•œ ์ปจํŠธ๋กค์ด ์žˆ์„ ๋•Œ WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•˜๋Š” ์œ ํšจํ•œ ์ด์œ ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ…œํ”Œ๋ฆฟ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ์„ ๋นŒ๋“œํ•˜๊ณ  ์ตœ์‹  Visual Studio ๋ฒ„์ „์œผ๋กœ ๋” ์ด์ƒ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ํ…œํ”Œ๋ฆฟ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค.

Visual Studio์˜ ํ…œํ”Œ๋ฆฟ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ UWP์— ์ ํ•ฉํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์ด์ œ Win32์—์„œ๋„ ๋™์ผํ•œ ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. :)

์ด ์—ฐ์Šต์ด ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉฐ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๊ตฌ์ฒดํ™”๋˜๋ฉด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ํ™•์‹คํžˆ. ์ด ์—ฐ์Šต์€ ๋ฏธ๋ž˜์˜ ๋ชจ์Šต๊ณผ ๋ชจ์Šต์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋งค์šฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋” ๋ณด๊ณ  ์‹ถ๋‹ค.

์ด์ฃผ

1-3๋‹จ๊ณ„๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

๋ถ„๋ช…ํžˆ. ์ด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์—๋Š” ์•ฝ๊ฐ„์˜ Visual Studio ํ™•์žฅ์ด ํ›Œ๋ฅญํ•œ ์˜ต์…˜์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•˜๋Š” "WinUI Compatibility Analyzer"์™€ ๊ฐ™์€ ๊ฒƒ๋„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .NET ์ด์‹์„ฑ ๋ถ„์„๊ธฐ์™€ ์œ ์‚ฌํ•œ ๊ฒƒ.

๊ธฐ๋ณธ Windows 10 ์ปจํŠธ๋กค ์„ธํŠธ ์™ธ๋ถ€์—์„œ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์ผ๋ฐ˜์ ์œผ๋กœ Telerik DataGrid ๋ฐ Community Toolkit

ํ˜„์žฌ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์„ค์น˜ํ•œ Win SDK๋ณด๋‹ค ๋‚ฎ์€ ๋ฒ„์ „์˜ UWP ์•ฑ์„ Visual Studio์—์„œ ์—ด๋ฉด Visual Studio์—์„œ ์ž๋™์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. WinUI ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ๋Œ€ํ•ด์„œ๋„ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ƒ๊ฐํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋ช…์‹ฌํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ Visual Studio์— ๋” ์ด์ƒ ์ผ๋ฐ˜ UWP ํ…œํ”Œ๋ฆฟ์ด ์—†์œผ๋ฉด ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€

๋‹ค๋ฅธ ๋Œ“๊ธ€์—์„œ ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด SDK ์Šคํƒ€์ผ์˜ .csproj ํŒŒ์ผ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•  ๋•Œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Windows ํ…œํ”Œ๋ฆฟ ์ŠคํŠœ๋””์˜ค์— winui 3.0 ํ…œํ”Œ๋ฆฟ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํƒ‘ ์•ฑ์˜ WinUI

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

.net ๊ฐœ๋ฐœ์ž๋กœ์„œ ๊ฐ€์žฅ ๊ด€์‹ฌ์ด ๊ฐ€๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ

  • ์ด์ „ ๋ฒ„์ „์˜ UWP XAML ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ๊ด€์‹ฌ/ํ•„์š”๊ฐ€ VS ์ƒˆ ํ”„๋กœ์ ํŠธ ํ๋ฆ„์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ…œํ”Œ๋ฆฟ ์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ˆซ์ž๊ฐ€ ๋‚ฎ์œผ๋ฉด(์˜ˆ: "๋นˆ ์•ฑ(์œ ๋‹ˆ๋ฒ„์„ค ์œˆ๋„์šฐ)"๋งŒ ์–ธ์–ด๋‹น, ๊ทธ๋ž˜์„œ C#์˜ ๊ฒฝ์šฐ 1๊ฐœ) ๋…ธ์ด์ฆˆ๊ฐ€ ์ ๊ณ  ์ง€์›์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ…œํ”Œ๋ฆฟ์ด ๋ช‡ ๊ฐœ ์ด์ƒ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ์„ ํƒ์  VS ์„ค์น˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • Visual Studio์˜ ํ…œํ”Œ๋ฆฟ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์Šค์บํด๋”ฉ์ด ์—†๋Š” ์‹ค์ œ ๋นˆ ํ…œํ”Œ๋ฆฟ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค(ํŠœํ† ๋ฆฌ์–ผ์— ๋” ์ ํ•ฉ). asp.net ์ฝ”์–ด๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ๊ฒฝํ—˜์—์„œ ๋งŽ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ๋ฐ˜ ํ…œํ”Œ๋ฆฟ "์•ฑ(UWP WinUI)"์„ ์„ ํƒํ•œ ๋‹ค์Œ ์•ฑ ๋ชจ๋ธ๊ณผ ๊ด€๋ จ๋œ ๋‘ ๋ฒˆ์งธ ํ™”๋ฉด์—์„œ ๋‹ค์–‘ํ•œ ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œ ๋ฐ ๋Œ€์ƒ ํ”Œ๋žซํผ ๋ฒ„์ „๋„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค(์ถ”๊ฐ€ ๋‹จ๊ณ„ ์—†์Œ). ์˜ˆ๋ฅผ ๋“ค์–ด ์•ฑ ํŒจํ‚ค์ง• ํ”„๋กœ์ ํŠธ๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  • ์ด ์—ฐ์Šต์ด ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉฐ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๊ตฌ์ฒดํ™”๋˜๋ฉด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

์˜ˆ

์–ธ์–ด ์ง€์›

  • 1-3๋‹จ๊ณ„๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

์ข‹์€ ๋ฌธ์„œ(๋ช…ํ™•ํ•œ ๋‹จ๊ณ„๊ฐ€ ์žˆ๋Š” ํ•œ ํŽ˜์ด์ง€)๋กœ ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. csproj๋ฅผ ์ง์ ‘ ํŽธ์ง‘ํ•˜์ง€ ์•Š๊ณ  VS ๋‚ด์—์„œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹จ๊ณ„๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ ํŽ˜์ด์ง€๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ƒˆ csproj ํ˜•์‹์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด(๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•ฉ๋‹ˆ๋‹ค) ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๋ฉด csproj ํŒŒ์ผ์„ ํŽธ์ง‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๊ฐ€ ํ™•์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํฌ์žฅ

MSIX๋Š” ๋ชจ๋“  ์•ฑ์— ๋Œ€ํ•œ ์ตœ์‹  ํŒจํ‚ค์ง• ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Win32์˜ WinUI์˜ ๊ฒฝ์šฐ ClickOnce๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์–ด๋–ค ๋‹ค๋ฅธ ํŒจํ‚ค์ง• ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์›์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํŠนํžˆ Win32์˜ WinUI์˜ ๊ฒฝ์šฐ

clickonce์™€ msix ๋ฐฐํฌ์˜ ์ฐจ์ด์ ์„ ๋น„๊ตํ•˜์‹ญ์‹œ์˜ค.

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

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

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

  • ๋””์ž์ด๋„ˆ ๊ฒฝํ—˜

๊ณต์—ฐ, ๊ณต์—ฐ, ๊ณต์—ฐ, ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŽ์€ ๋Œ€๊ทœ๋ชจ ์†”๋ฃจ์…˜ ์ง€์›.

Windows 10 SDK์˜ WinUI ๋ฒ„์ „๊ณผ WinUI Xaml ๋””์ž์ด๋„ˆ๊ฐ€ ์˜คํ”ˆ ์†Œ์Šค๋กœ ๋งŒ๋“ค์–ด์งˆ ์˜ˆ์ •์ž…๋‹ˆ๊นŒ?

๋””์ž์ธ ํƒ€์ž„ ์›Œํฌํ”Œ๋กœ ๋ฐ ๊ฒฝํ—˜์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

SDK๋Š” WinUI์˜ nuget ๋ฆด๋ฆฌ์Šค์™€ ์œ ์‚ฌํ•œ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ๋ฅผ ๋”ฐ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์ถ”๊ฐ€ ํ†ต์ฆ:
๊ด€๋ฆฌํ˜• ๋น„๊ด€๋ฆฌํ˜• ๋ฏน์‹ฑ ๋””๋ฒ„๊ทธ ํ™˜๊ฒฝ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ ๋น„๊ด€๋ฆฌ ์ฝ”๋“œ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ด€๋ฆฌ ๋””๋ฒ„๊ทธ ์‚ฌ์ดํŠธ์— COMException ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ ์Šคํƒ์ด ๊ด€๋ฆฌ/๋น„๊ด€๋ฆฌ ๊ฒฝ๊ณ„๋ฅผ 1ํšŒ ์ด์ƒ ๊ต์ฐจํ•˜๋ฉด ์ƒํ™ฉ์ด ๋” ๋‚˜๋น ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
WPF์™€ ๋น„๊ตํ•˜์—ฌ ๊ด€๋ฆฌ๋˜๋Š” ํ˜ธ์ถœ ์Šคํƒ์€ ํ•ญ์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ throw๋œ ์˜ˆ์™ธ๋Š” ๋””๋ฒ„๊ทธ์— ์œ ์šฉํ•œ ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ์„ธ๊ณ„์™€ COM ๋ชจ๋ธ์ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฒƒ๋งŒํผ ํŽธ๋ฆฌํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ ์–ด๋„ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์˜ˆ์™ธ(์ž˜๋ชป๋œ HResult)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜คํ”ˆ ์†Œ์Šค ์ €์žฅ์†Œ์—์„œ ์ฝ”๋“œ ํ–‰์„ ์ฐพ๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค . ๋ฐฉ๋ฒ•์€ ์ˆ˜๋™์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒฐ์ •์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ClickOnce์— ํฌ๊ฒŒ ์˜์กดํ•˜๋ฏ€๋กœ ๋‹จ๊ธฐ์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” MSIX๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์˜ํ–ฅ์ด ์žˆ์ง€๋งŒ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜๋ฉด.

ํ…œํ”Œ๋ฆฟ์˜ ๊ฒฝ์šฐ NavigationView ๋ฐ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ƒ์šฉ๊ตฌ UI์™€ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ

์šฐ๋ฆฌ๋Š” ClickOnce์— ํฌ๊ฒŒ ์˜์กดํ•˜๋ฏ€๋กœ ๋‹จ๊ธฐ์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” MSIX๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์˜ํ–ฅ์ด ์žˆ์ง€๋งŒ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜๋ฉด.

ํ…œํ”Œ๋ฆฟ์˜ ๊ฒฝ์šฐ NavigationView ๋ฐ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ƒ์šฉ๊ตฌ UI์™€ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณ ๋งˆ์›Œ

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์•ฑ "์‰˜" ๊ตฌ์กฐ ๋ฐ ํŒจํ„ด - ๊ฐœ๋ฐœ์ž๊ฐ€ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Microsoft์˜ ์ž์‚ฌ ์•ฑ์€ ์ด๋Ÿฌํ•œ ๋ ˆ์ด์•„์›ƒ์˜ ๋ชจ๋ฒ”์ด ๋˜์–ด์•ผ ํ•˜๋ฉฐ Fluent Design ๋ฐ WinUI์— ๋Œ€ํ•œ ๋™์ž‘, ์ผ๊ด€์„ฑ ๋ฐ UI ๋””์ž์ธ ๊ทœ๋ฒ” ์ค€์ˆ˜ ์ธก๋ฉด์—์„œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@shaggygi @mdtauk
"๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์•ฑ "์‰˜" ๊ตฌ์กฐ ๋ฐ ํŒจํ„ด" ๋ฐ "ํ…œํ”Œ๋ฆฟ์˜ ๊ฒฝ์šฐ NavigationView ๋ฐ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ƒ์šฉ๊ตฌ UI ๋ฐ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค." Microsoft์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” Windows ํ…œํ”Œ๋ฆฟ ์ŠคํŠœ๋””์˜ค ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ๊ฐœ๋ฅผ ์ธ์šฉํ•˜์ž๋ฉด:

WTS(Windows ํ…œํ”Œ๋ฆฟ ์ŠคํŠœ๋””์˜ค)๋Š” ๋งˆ๋ฒ•์‚ฌ ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด UWP(์œ ๋‹ˆ๋ฒ„์„ค Windows ํ”Œ๋žซํผ) ์•ฑ ์ƒ์„ฑ์„ ๊ฐ€์†ํ™”ํ•˜๋Š” Visual Studio 2017 ๋ฐ 2019 ํ™•์žฅ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ UWP ํ”„๋กœ์ ํŠธ๋Š” ์ตœ์‹  Windows 10 ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•˜๋Š” ๋™์‹œ์— ์ž…์ฆ๋œ ํŒจํ„ด๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ž˜ ๊ตฌ์„ฑ๋œ ์ฝ๊ธฐ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

@Felix-Dev๋Š” ๊ฒฐ๊ตญ UWP ์™ธ์—๋„ WPF ํ…œํ”Œ๋ฆฟ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@shaggygi ๋ฐ˜๊ฐ€์šด ์†Œ์‹์ด ์žˆ์„ ๊ฒƒ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” C++/WinRT๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ xaml ๋””์ž์ด๋„ˆ ๋˜๋Š” ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Ÿฐํƒ€์ž„์— ์ปจํŠธ๋กค์„ ๋งŒ๋“ค๊ณ  UWP xaml์„ ํ†ตํ•ด ์Šคํƒ€์ผ์„ ์ง€์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„ํ‚น/ํ”Œ๋กœํŒ… ์ฐฝ ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ xaml ์„ฌ์ด ์žˆ๋Š” ๋Œ€ํ™” ์ƒ์ž์™€ ๋ชจ๋œ๋ฆฌ์Šค ์ž์‹ Windows๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด C++ ์•ฑ์šฉ XAML์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์†Œ๋…„์€ ๊ณ ํ†ต์Šค๋Ÿฌ์šด ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํŒจํ‚ค์ง•ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ๋งŽ์€ ํ”„๋กœ์ ํŠธ ์†์„ฑ๊ณผ ๊ธฐํƒ€ ํ•ดํ‚น์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

  • XAML ํŽ˜์ด์ง€๋ฅผ ์ €์žฅํ•  ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ <_NoWinAPIFamilyApp>true</_NoWinAPIFamilyApp> ๋ฐ <_VC_Target_Library_Platform>Desktop</_VC_Target_Library_Platform> ๋‘ ๊ฐ€์ง€ ํ”„๋กœ์ ํŠธ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ์™„์ „ํžˆ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š๊ณ  ์ƒˆ ํ„ฐ๋ฏธ๋„์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•ด์•ผ๋งŒ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‚˜๋Š” ์•ฑ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•  ๋•Œ๊นŒ์ง€ "๋ฉ”์ธ ์ฐฝ์ด ์•„์ง ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ์ˆ˜์ˆ˜๊ป˜๋ผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ์ผ๋ฐ˜ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์†์„ฑ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” VS์—์„œ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. VS์—์„œ XAML ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ •์˜๋กœ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ MIDL, ์†Œ์Šค ์ฝ”๋“œ ๋ฐ XAML ํŒŒ์ผ์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Microsoft.Toolkit.Win32.UI.XamlApplication NuGet ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ  Microsoft.VCRTForwarders ๋„ ์ถ”๊ฐ€ํ•  ๋•Œ๊นŒ์ง€ ๋กœ๋“œํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ„ฐ๋ฏธ๋„ ์†Œ์Šค๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ ์ด๊ฒƒ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋‘ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ํ‘œ์‹œ๊ฐ€ ์–ด๋””์—๋„ ์—†์Šต๋‹ˆ๋‹ค.
  • PRI๋Š” .wapproj ํŒŒ์ผ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๊นŒ์ง€ ํ•˜๋‚˜๋กœ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‚ด XAML ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋‚ด๊ฐ€ <DisableEmbeddedXbf>false</DisableEmbeddedXbf> ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๊นŒ์ง€ XBF๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด
  • ๋‚ด ์•ฑ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ maxVersionTested ๋Š” ์นด๋ฉœ ์ผ€์ด์Šค ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ผ๋Š” ์ง€์นจ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ๊นŒ์ง€ ์™„์ „ํžˆ ๋ฌด์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/MicrosoftDocs/windows-uwp/issues/1781 # ์ด์Šˆ

๋˜ํ•œ C++/WinRT๋„ ๊ณจ์น˜ ์•„ํ”ˆ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

  • ์ฆ๋ถ„ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž ์ง€์ • ํด๋ž˜์Šค์— ๋Œ€ํ•ด [msg]redefinition [context]: MyClass ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ์ด๋Š” C++/WinRT ํ—ค๋”๋กœ ์ธํ•ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํด๋ฆฐ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๊นŒ์ง€ ๋นŒ๋“œ๋ฅผ ๋ฐฉํ•ดํ•˜๊ณ  ์‚ฌ๋ผ์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ๋“  ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ์ค‘๊ฐ„์— ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ํด๋ฆฐ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ—ค๋” ๋ˆ„๋ฝ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ๋ฒ„ํŠผ์„ ๋‘ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด ๋‹ค์‹œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • C++/WinRT์˜ ์ž˜๋ชป๋œ codegen ๋•Œ๋ฌธ์— ๋‚ด ์ž์‹ ์˜ AppT<> ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„ ์•ฑ๊ณผ XAML ์„ฌ ์ƒ˜ํ”Œ์€ ๋งˆ์น˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ทผ๋ณธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋Œ€์‹  ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • MIDL ํŒŒ์ผ์—์„œ ๋ฌด์—‡์ด๋“  ๋ณ€๊ฒฝํ•˜๋ฉด ํด๋ฆฐ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ๊นŒ์ง€ ๋นŒ๋“œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋‚ด ์•ฑ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— activatableClass ์ถ”๊ฐ€ํ•ด๋„ ํŒจํ‚ค์ง•๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(PRI๋ฅผ ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์™€ ๊ฐ™์ด XAML ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ์ œ). ์ด๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์•ฑ์ด ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ฃผ

1-3๋‹จ๊ณ„์˜ ์ž๋™ํ™”๋Š” ํŠนํžˆ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํŒŒ์ผ์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ํ™•์‹คํžˆ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์œ„์— compat ๋ถ„์„๊ธฐ๋Š” ํ˜„์žฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์–ผ๋งˆ๋‚˜ ํ˜ธํ™˜๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜๋Š” .net ํ”„๋ ˆ์ž„์›Œํฌ > .net ์ฝ”์–ด์™€ ๊ฐ™์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์••ํ˜•

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฏธ ๋งํ–ˆ๋“ฏ์ด ๊ธฐ๋Šฅ์ด ๋” ํ’๋ถ€ํ•œ ํŽธ์ง‘๊ธฐ๊ฐ€ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์ง์žฅ์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„ XAML์€ ์ˆ˜์ž‘์—…์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ ๋Œ€๋ถ€๋ถ„ ์•ฑ์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ๊ณจ๊ฒฉ์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋กœ ๋””์ž์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Intellisense ๋ฐ ์Šค๋งˆํŠธ ๋ฆฌํŒฉํ† ๋ง์€ ํŠนํžˆ ์‚ฌ์šฉ์ž ์ •์˜ UserControls ๊ฐ€ ๋งŽ์€ ๊ฒฝํ–ฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์€ ํ•ญ๋ชฉ(์˜ˆ: ์ข…์†์„ฑ ์†์„ฑ ๋˜๋Š” ํƒœ๊ทธ)์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๋ฐ CTRL + R + R ์™€ ๊ฐ™์€ QoL์ด ์ •๋ง ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. GoTo ๊ตฌํ˜„ ๋ฐ ์ฐธ์กฐ. Roslyn ๋ถ„์„๊ธฐ ์ง€์›๋„ ์ •๋ง ์ข‹์Šต๋‹ˆ๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐœ์„  ์‚ฌํ•ญ์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ƒˆ๋กœ์šด XmlnsDefinition ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ ‘๋‘์‚ฌ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž ์ •์˜ ์ปจํŠธ๋กค์„ ๋” ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๋งˆํฌ์—… imo๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ชจํ˜ธํ•œ ์ปจํŠธ๋กค์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ ‘๋‘์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ GoTo ๊ตฌํ˜„๊ณผ๋„ ์ž˜ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ปจํŠธ๋กค์˜ ์ด๋ฆ„๊ณผ ์ „์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ปจํŠธ๋กค ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ๊ฐ€์ ธ๊ฐ€๋ฉด ์ปจํŠธ๋กค์˜ ์ถœ์ฒ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด C# ์ฝ”๋“œ์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„ ๋„๊ตฌ์—์„œ ๋ฆฌํŒฉํ† ๋ง์„ ๋œ ์ทจ์•ฝํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ์ค„์ด๊ณ  ๋งˆํฌ์—…์„ ๋” ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก C# ํŽธ์ง‘๊ธฐ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ XAML ์–ธ์–ด ์ž์ฒด์— ๊ด€ํ•ด์„œ๋Š” ์žฅํ™ฉํ•จ์„ ์ค„์ด๋Š” ๊ฒƒ์ด #62 ๋ฐ #279์—์„œ ๋…ผ์˜๋œ ์Šคํƒ€์ผ๋ง์ด ๋˜๋Š” ์ข‹์€ ์˜ˆ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐœ์„  ์‚ฌํ•ญ์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ƒˆ๋กœ์šด XmlnsDefinition ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ ‘๋‘์‚ฌ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž ์ •์˜ ์ปจํŠธ๋กค์„ ๋” ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๋งˆํฌ์—… imo๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ชจํ˜ธํ•œ ์ปจํŠธ๋กค์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ ‘๋‘์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ GoTo ๊ตฌํ˜„๊ณผ๋„ ์ž˜ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ปจํŠธ๋กค์˜ ์ด๋ฆ„๊ณผ ์ „์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ปจํŠธ๋กค ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ๊ฐ€์ ธ๊ฐ€๋ฉด ์ปจํŠธ๋กค์˜ ์ถœ์ฒ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด C# ์ฝ”๋“œ์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€ ์ปจํŠธ๋กค์˜ WinUI 3.0 ๋ฒ„์ „์€ ์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค์— ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด SDK ์ˆ˜์ค€์˜ ๊ฒƒ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

WinUI๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•œ ๊ฐ€์ง€ ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋นŒ๋“œ์—์„œ 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์™€ ๊ฐ™์œผ๋ฉฐ ๋” ๋น ๋ฅธ ์†๋„๋กœ ๋ณ€๊ฒฝ๋˜๋ฉฐ ๋‘ ๊ฐ€์ง€์˜ ๋ชจ๋“  ์ด์ ์ด ์žˆ๊ณ  ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํฌํŒ… ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Find&Replace๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ธ์Šคํ„ด์Šค ์ˆ˜๋Š” ์ƒ๋‹นํžˆ ์ ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • App ํด๋ž˜์Šค์— ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ XAML์€ ์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๊นŒ์ง€ ์ด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ„ฐ๋ฏธ๋„ ์•ฑ์—์„œ ์ฐพ์•˜๊ณ  ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์ž˜ ์•Œ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
    xml <Target Name="PlaceAppXbfAtRootOfResourceTree" DependsOnTargets="GetPackagingOutputs"> <ItemGroup> <_RelocatedAppXamlData Include="@(PackagingOutputs)" Condition="'%(Filename)' == 'App' and ('%(Extension)' == '.xaml' or '%(Extension)' == '.xbf')" /> <PackagingOutputs Remove="@(_RelocatedAppXamlData)" /> <PackagingOutputs Include="@(_RelocatedAppXamlData)"> <TargetPath>%(Filename)%(Extension)</TargetPath> </PackagingOutputs> </ItemGroup> </Target>
  • ๋นŒ๋“œ๋Š” cannot find type Microsoft.Toolkit.Win32.UI.XamlHost.XamlApplication ์™€ ์œ ์‚ฌํ•œ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ๋ฌด์ž‘์œ„๋กœ ์™„์ „ํžˆ ์ค‘๋‹จ๋˜๋ฉฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ํด๋ฆฐ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ exe์— ๋Œ€ํ•œ vcxproj๋ฅผ ์‹œ์ž‘ ํ”„๋กœ์ ํŠธ๋กœ ์ง์ ‘ ์„ค์ •ํ•˜์—ฌ ์•ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ bin\x64\Debug\AppX ์—์„œ ํŒจํ‚ค์ง•๋˜์ง€ ์•Š์€ appx ์ถœ๋ ฅ์„ ์‹œ์ž‘ํ•œ ๋‹ค์Œ VS ๋‚ด์—์„œ ๋””๋ฒ„๊ฑฐ๋ฅผ ์ฃผ์ž…ํ•˜๊ฑฐ๋‚˜ ์•ฑ ํŒจํ‚ค์ง€๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ ํ”„๋กœ์„ธ์Šค๋กœ.

์˜ค๋žœ ์‹œ๊ฐ„ WinForms, UWP ๊ฒฝํ—˜์ด ์žˆ๋Š” WPF ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋‚ด 2์„ผํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ฃผ

  • ๊ธฐ์กด UWP ์•ฑ์„ WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋„๊ตฌ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๊ธฐ์กด ์•ฑ์—์„œ WinForms ๋˜๋Š” WPF ์ปจํŠธ๋กค์„ WinUI ์ปจํŠธ๋กค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋„๊ตฌ๋Š” ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปจํŠธ๋กค์„ ๋ณ€ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ปจํ…Œ์ด๋„ˆ์˜ ์ฐธ์กฐ๋ฅผ ๊ฐœ๋ณ„ ์ปจํŠธ๋กค๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋ฐ”์ผ ์•ฑ์„ Windows๋กœ ๋ฐฑํฌํŒ…ํ•  ์ˆ˜ ์žˆ๋„๋ก Xamarin Forms๋ฅผ WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์••ํ˜•

  • ํ˜„์žฌ XAML ํŽธ์ง‘๊ธฐ๋Š” ๋”์ฐํ•ฉ๋‹ˆ๋‹ค! ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ ์บ”๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋” ๋‚˜์€ ์ธํ…”๋ฆฌ์„ผ์Šค ๋ฐ ๋ฆฌํŒฉํ† ๋ง์„ ์œ„ํ•ด XAML ๊ฐœ์ฒด ๋ชจ๋ธ์— ์ ์šฉํ•  Roslyn ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Visual Studio๊ฐ€ 64๋น„ํŠธ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ XAML ํŽธ์ง‘๊ธฐ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋…๋ฆฝ ์‹คํ–‰ํ˜• 64๋น„ํŠธ ์•ฑ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ XAML๋กœ ์ž‘์—…ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์˜ค๋ฅ˜๋ฅผ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๊ณ„์†ํ•ด์„œ VS 2017 ๋ฐ VS 2019๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ

  • ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    • NavigationView WinUI
    • NavigationView WPF
    • ๋ฆฌ๋ณธ WinUI
    • ๋ฆฌ๋ณธ WPF
    • ๋ฆฌ๋ณธ WinForms
  • ์ด ํŽ˜์ด์ง€/์ฐฝ ํ…œํ”Œ๋ฆฟ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    • ๋ฏธ๋””์–ด ์ปจํŠธ๋กค๋Ÿฌ ํŽ˜์ด์ง€
    • ๋ธŒ๋ผ์šฐ์ € ํŽ˜์ด์ง€
    • ๋Œ€ํ™”์ฐฝ
    • ํ…Œ๋‘๋ฆฌ ์—†๋Š” ์ฐฝ
    • ํ”Œ๋กœํŒ… ์œˆ๋„์šฐ
  • ์ œ์–ด ํ…œํ”Œ๋ฆฟ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    • ์บก์Šํ™”๋œ ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๋“œ ๋ณด๊ธฐ
    • ์บก์Šํ™”๋œ ํ•˜์œ„ ๋ฐ์ดํ„ฐ ๋ณด๊ธฐ

์ด ๋งˆ์ง€๋ง‰ ๋‘ ๊ฐœ๋Š” ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ์‰ฌ์šด Master-Detail ์ฐฝ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ํ…œํ”Œ๋ฆฟ๊ณผ ํŽ˜์ด์ง€ ๋“ฑ์€ ์ด๋ฏธ Windows Template Studio ํ”„๋กœ์ ํŠธ์—์„œ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ๋™์ผํ•œ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ?

SDK ์Šคํƒ€์ผ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ
๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ œ๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜๋Š” UWP ๋ฐ "Desktop XAML" ์•ฑ ๋ชจ๋‘์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด SDK ์Šคํƒ€์ผ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ํ˜•์‹์— ๋Œ€ํ•œ ์ง€์›์ž…๋‹ˆ๋‹ค.

UWP์™€ Desktop XAML ์•ฑ ๋ชจ๋ธ ๊ฐ„์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
"Desktop XAML" ์•ฑ์„ ๋นŒ๋“œํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด UWP ์•ฑ์—์„œ ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์Šต๋‹ˆ๊นŒ? UWP ์ƒŒ๋“œ๋ฐ•์Šค์˜ ์ œ์•ฝ ์กฐ๊ฑด ๋‚ด์— ๋จธ๋ฌผ๋ €๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜๋ฉด ๋‚˜์ค‘์— ์ด๋ฅผ UWP ์•ฑ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ• ๊นŒ์š”? ๋˜๋Š” UWP ์•ฑ์„ ๋นŒ๋“œํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ๋” ๋งŽ์€ ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๋Š” ๊ฒฝ์šฐ "Desktop XAML" ์•ฑ์œผ๋กœ ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ €๋Š” Template Studio๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Template Studio๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Template Studio๋Š” XAML C++ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ?

Template Studio๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์€ WinUI SDK IMO์˜ ์ผ๋ถ€์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Template Studio๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์€ WinUI SDK IMO์˜ ์ผ๋ถ€์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Visual Studio IDE IMO์˜ ์ผ๋ถ€์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ˜Ž

์š”์ ์€ Windows ํ…œํ”Œ๋ฆฟ ์ŠคํŠœ๋””์˜ค๊ฐ€ UWP ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์„ ์œ„ํ•ด ์˜ฌ์ธ์› ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ xaml C++ ์ง€์›๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ์ด๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  Windows ํ…œํ”Œ๋ฆฟ ์ŠคํŠœ๋””์˜ค์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ๋น ๋ฅด๊ณ  ๋” ๋งŽ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. uwp ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ์ƒˆ๋กœ์šด ํ˜์‹ ์ด ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์— ๋‚จ์•„ ์žˆ์œผ๋ฉด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

XAML์ด๋‚˜ MVVM ์—†์ด ์ง์ ‘ WinUI 3 ์Šคํƒ์˜ ํ•˜์œ„ ๊ณ„์ธต์„ ์‚ฌ์šฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฏธ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ผ์ข…์˜ MV ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์žˆ๋Š” ๊ธฐ์กด์˜ ๋Œ€๊ทœ๋ชจ C++ ์†Œํ”„ํŠธ์›จ์–ด์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ HWND + GDI๋ณด๋‹ค ๋” ๋‚˜์€ ๊ฒƒ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‚ฌ๋žŒ๋“ค์ด WinUI 3๊ฐ€ ์žฅ๋‚œ๊ฐ์ด ์•„๋‹ˆ๋ผ ์ง„์ง€ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹ค์ œ๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ํ•˜์‹ญ์‹œ์˜ค.

@be5invis ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์œ ์ผํ•œ ์†”๋ฃจ์…˜์€ XamlDirect์ด์ง€๋งŒ ๋ฏธ๋“ค์›จ์–ด ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ Xaml Islands๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ˜ํ…์ธ ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DesktopWindowXamlSource๊ฐ€ ์ž‘๋™ํ•˜๊ณ  ์ฐฝ์— ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•œ ๋‹ค์Œ ์ฝ”๋“œ์—์„œ ์ปจํŠธ๋กค์„ ๋งŒ๋“ค๊ณ  ์ •๋ ฌ/๋ ˆ์ด์•„์›ƒํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

https://gist.github.com/sylveon/5bc68b2801333b24f7b3165c3f098cc9#file -picker-cpp-L46

@MarkIngramUK CreateWindow ๋ฅผ WinUI ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋” "์™„๋ฒฝํ•œ" ๊ฒƒ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋””์ž์ธ์„ ์œ„ํ•ด ๋ฏธ๋ž˜์˜ WinUI WPF ํ…œํ”Œ๋ฆฟ์ด ํ˜„์žฌ UWP ์•ฑ๊ณผ ๊ฐ™์€ ์ œ๋ชฉ ํ‘œ์‹œ์ค„๋กœ ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ ๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๊ธฐ์กด XAML ์•„์ผ๋žœ๋“œ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  ๋ณด๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ WPF/WinForms ์ฐฝ ๋‚ด๋ถ€์—์„œ ์ปจํŠธ๋กค์„ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@LucasHaines WinUI 3.0์—์„œ ์ง€์›ํ•  ๊ณ„ํš์ธ ์–ธ์–ด ๋ชฉ๋ก: C#, C++/WinRT, Visual Basic. ์šฐ๋ฆฌ๋Š” F#์˜ ์ง€์›์„ ๋ชจ์ƒ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ F#๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  .Net ์–ธ์–ด์— ๋Œ€ํ•ด ์ž˜๋ชปํ•˜๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ๊ณผ .xaml ํŒŒ์ผ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ตฌ์กฐ๋ฅผ ์™„์„ฑํ•˜์ง€ ์•Š๊ณ  ์ง‘์„ ์ง“๊ณ  ์นดํŽซ๊ณผ ์ปคํŠผ์„ ์ œ์ž๋ฆฌ์— ๋†“๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

WinUI๋ฅผ Nuget ํŒจํ‚ค์ง€๋กœ .Net Standard 2.0/.Net Core 3.0/.Net 5 ํ”„๋กœ์ ํŠธ์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚ด๋ถ€์— ์ •์˜๋œ ๋ชจ๋“  ํด๋ž˜์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ WinUI ํ”„๋กœ์ ํŠธ(C# ์ „์šฉ์ผ ์ˆ˜ ์žˆ์Œ)์—์„œ ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด WinUI ๋ณด๊ธฐ๋ฅผ ๋ชจ๋“  .Net ์–ธ์–ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Xamarin.Forms๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•˜์„ธ์š” .

ํด๋ž˜์Šค๋Š” ์ด๋ฏธ F#์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋ชจ๋“  .NET ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Windows ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์—).

๋ ˆ์ด์•„์›ƒ์„ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  WinUI ๊ด€๋ฆฌ์— ๋Œ€ํ•ด Py/WinRT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python์„ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@sylveon ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์ˆ˜์—…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ด€์‹ฌ์ด ์žˆ์„ํ…๋ฐ...

๊ทธ๋“ค ๋ชจ๋‘. WinUI์˜ ๊ณต๊ฐœ API๋Š” Windows ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

@LucasHaines WinUI 3.0์—์„œ ์ง€์›ํ•  ๊ณ„ํš์ธ ์–ธ์–ด ๋ชฉ๋ก: C#, C++/WinRT, Visual Basic. ์šฐ๋ฆฌ๋Š” F#์˜ ์ง€์›์„ ๋ชจ์ƒ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ F#๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  .Net ์–ธ์–ด์— ๋Œ€ํ•ด ์ž˜๋ชปํ•˜๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ๊ณผ .xaml ํŒŒ์ผ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ตฌ์กฐ๋ฅผ ์™„์„ฑํ•˜์ง€ ์•Š๊ณ  ์ง‘์„ ์ง“๊ณ  ์นดํŽซ๊ณผ ์ปคํŠผ์„ ์ œ์ž๋ฆฌ์— ๋†“๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

WinUI๋ฅผ Nuget ํŒจํ‚ค์ง€๋กœ .Net Standard 2.0/.Net Core 3.0/.Net 5 ํ”„๋กœ์ ํŠธ์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚ด๋ถ€์— ์ •์˜๋œ ๋ชจ๋“  ํด๋ž˜์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ WinUI ํ”„๋กœ์ ํŠธ(C# ์ „์šฉ์ผ ์ˆ˜ ์žˆ์Œ)์—์„œ ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด WinUI ๋ณด๊ธฐ๋ฅผ ๋ชจ๋“  .Net ์–ธ์–ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Xamarin.Forms๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•˜์„ธ์š” .

์ด ์ฃผ์ œ/์งˆ๋ฌธ์€ ๋„๊ตฌ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์–ธ์–ด์—์„œ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋„๊ตฌ์™€ ์–ธ์–ด ์ง€์› ๊ฐ„์— ์ •์˜๊ฐ€ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.
Xamarin.Forms๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Š” C# ๋ฐ F#์— ๋Œ€ํ•œ ๋„๊ตฌ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. VB.Net ๋ฐ Xamarin.Forms๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋„๊ตฌ๊ฐ€ ์—†๊ณ  ๋ฌธ์„œ๊ฐ€ ์ œํ•œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— _๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜์ง€_ ์•Š์Šต๋‹ˆ๋‹ค.

WinUI ์œˆ๋„์šฐ์˜ ํŠน์ •์™€ ๊ฐ™์ด ๋˜ํ•œ, ๋‹ค๋งŒ ์–ด๋–ค ๋‹ท๋„ท ํ‘œ์ค€ 2.0 / ๋‹ท๋„ท ์ฝ”์–ด 3.0 / ๋‹ท๋„ท 5 ํ”„๋กœ์ ํŠธ์—์„œ ์ฐธ์กฐ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ผ๋ถ€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ/์ปดํŒŒ์ผ๋Ÿฌ/ํŒจํ‚ค์ง• ์ˆ˜์ค€ ์ง€์›๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

v2.2 ๋ฆด๋ฆฌ์Šค ์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ์ž‘์—… ํŒ€. v3.0 ์ƒํƒœ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์–ธ๊ธ‰๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์ง€๋งŒ ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ๋“  ๋ช…ํ™•ํ•œ ๋ฐฉํ–ฅ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. WinUI 3.0์—๋Š” ๋ชจ๋“  ์ปจํŠธ๋กค์ด ์žˆ์œผ๋ฏ€๋กœ ์ด์ œ WinUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ปจํŠธ๋กค์„ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ XAML์„ ๋งŽ์ด ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ํฌ๊ฒŒ ๋ฐฉํ•ดํ•˜๋ฉฐ UNO ํ”Œ๋žซํผ ๋ฐ Avalonia์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค.

XAML์—์„œ xmlns:mux="using:Microsoft.UI.Xaml.Controls" ๋Œ€ํ•œ ํ•„์š”์„ฑ์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ์ฝ”๋“œ ๋น„ํ•˜์ธ๋“œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€ ์œ„์น˜์— ์ด์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

XAML์—์„œ xmlns:mux="using:Microsoft.UI.Xaml.Controls" ๋Œ€ํ•œ ํ•„์š”์„ฑ์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

XAML _markup_์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์ฝ”๋“œ ์ˆจ๊น€์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Windows ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ(OS์—์„œ ์ œ๊ฑฐ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ) - XAML์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Windows ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ(OS์—์„œ ์ œ๊ฑฐ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ) - XAML์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์•„๋‹Œ WinUI 3.0์„ ์‚ฌ์šฉํ•˜๋ฉด OS ์ปจํŠธ๋กค์„ WinUI 3.0 ์ปจํŠธ๋กค๊ณผ ํ˜ผํ•ฉ ๋ฐ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค์€ OS์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ WinUI 2.x์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋˜ํ•œ NavigationView ๋ฐ TreeView์™€ ๊ฐ™์€ ๋‘ ์œ„์น˜์—์„œ ์œ ํ˜•์„ ์ œ๊ณตํ•˜์—ฌ ๋ชจํ˜ธ์„ฑ์„ ์œ ๋ฐœํ•˜๋Š” ์–ด์ƒ‰ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค).

Windows ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ(OS์—์„œ ์ œ๊ฑฐ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ) - XAML์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์•„๋‹Œ WinUI 3.0์„ ์‚ฌ์šฉํ•˜๋ฉด OS ์ปจํŠธ๋กค์„ WinUI 3.0 ์ปจํŠธ๋กค๊ณผ ํ˜ผํ•ฉ ๋ฐ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค์€ OS์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ WinUI 2.x์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋˜ํ•œ NavigationView ๋ฐ TreeView์™€ ๊ฐ™์€ ๋‘ ์œ„์น˜์—์„œ ์œ ํ˜•์„ ์ œ๊ณตํ•˜์—ฌ ๋ชจํ˜ธ์„ฑ์„ ์œ ๋ฐœํ•˜๋Š” ์–ด์ƒ‰ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค).

์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค. OS์—์„œ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ค์ • ์•ฑ, ์…ธ ๋ฐ ๊ธฐํƒ€ OS ๋ถ€๋ถ„๋„ WinUI 3.0์œผ๋กœ ์ด๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” XAML๋กœ์˜ ๊ด€๋ฆฌ์ž ๋„๊ตฌ, ์›Œ๋“œํŒจ๋“œ ๋“ฑ์˜ ํฌํŠธ๋ฅผ ํฌ๋งํ•ฉ๋‹ˆ๋‹ค!

@jevansaks ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค . ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@mdtauk XAML ์—์„œ 'OS' ๋ ˆ๊ฑฐ์‹œ ์ปจํŠธ๋กค๊ณผ ์ƒˆ๋กœ์šด 'WinUI 3.0' ํ”Œ๋žซํผ ์ปจํŠธ๋กค์„ ๊ตฌ๋ถ„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด WinUI 3.0์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ OS ์ปจํŠธ๋กค์€ ๋” ์ด์ƒ ๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฌ์ „ํžˆ ๋ ˆ๊ฑฐ์‹œ ์ปจํŠธ๋กค์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ WinUI 3.0 ์ดํ›„์—๋Š” ์ด์ „ SDK ๋ฐ Visual Studio ๋ฒ„์ „์œผ๋กœ ๊ฐœ๋ฐœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. XAML์—์„œ ๋‘ ๊ฐœ์˜ Microsoft/Windows UI ์ปจํŠธ๋กค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์•ž์„œ ์–ธ๊ธ‰ํ•œ ์ด์œ ๋กœ ๋ฐฉํ•ด๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, WinUI ๊ฐœ๋ฐœ์˜ ๋ถ„๋ฆฌ๋กœ ๋งˆ์นจ๋‚ด ์ด์™€ ๊ฐ™์€ ๋ณ€๊ฒฝ์„ 'ํ—ˆ์šฉ'ํ•˜๋Š” ์ง€์† ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ํšŒ์‹ ํ•˜๊ธฐ ์ „์— ์ƒˆ๋กœ๊ณ ์นจํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋Œ€๋ถ€๋ถ„์ด ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค.

@robloo ์ด์ „ ๋ฒ„์ „์˜ UWP Xaml์„ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ OS๊ฐ€ Inbox Apps ๋ฐ Shell์šฉ์œผ๋กœ ์ด์ „๋  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋˜ํ•œ WinUI 3.0์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •๊ณผ Win32 ์•ฑ๊ณผ ๋™์ผํ•œ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋กœ WinUI 3.0์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ๊ฐœ๋ฐœ์ž ๋น„๋””์˜ค๊ฐ€ ๋งŽ์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์ˆ˜๋ถ„ ๊ณต๊ธ‰์ด ํ•„์š” ์—†์œผ๋ฉฐ ํŽ˜์ด์ง€ ์ƒํƒœ ๋ฐ ํƒ์ƒ‰ ๋“ฑ์„ ์ €์žฅํ•˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

WinUI 3.0์œผ๋กœ ์ด๋™ํ•  ๊ณ„ํš์ธ ์•ฑ์— ๋”ฐ๋ผ Wordpad๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ WinUI์— ๋‚ด์žฅ๋œ ์ƒˆ UI๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์˜ˆ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WinUI 3.0์œผ๋กœ

WinUI 3์˜ ๊ฒฝ์šฐ ๋””์ž์ธ ์–ธ์–ด์—์„œ ์•ฑ ๊ธฐ๋Šฅ์˜ ๋ฐฐ์น˜์™€ ๊ด€๋ จํ•˜์—ฌ ์–ด๋Š ์ •๋„ ์ผ๊ด€์„ฑ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์•ฑ ์„ค์ •.

์•ฑ ์„ค์ •์€ ์–ด๋””์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๊นŒ? ์™ผ์ชฝ ํ•˜๋‹จ ๋ชจ์„œ๋ฆฌ? ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ์žˆ๋Š” ํ”„๋กœํ•„ ์•„๋ฐ”ํƒ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ์„ค์ •์„ ๋ˆ„๋ฅด๋‚˜์š”? ์™ผ์ชฝ ์ƒ๋‹จ์„ ํด๋ฆญํ•ฉ๋‹ˆ๊นŒ? ์™ผ์ชฝ ์•„๋ž˜? ํŽธ์ง‘ > ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๊นŒ?

NavigationView๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค...


๋ณด๋‚ธ ์‚ฌ๋žŒ: shaheedmalik [email protected]
๋ณด๋‚ธ ๋‚ ์งœ: 2019๋…„ 9์›” 12์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 3:48:12
๋ฐ›๋Š” ์‚ฌ๋žŒ: microsoft/microsoft-ui-xaml [email protected]
์ฐธ์กฐ: ๋” ์ƒคํ”„ ๋‹Œ์ž [email protected] ; ๋Œ“๊ธ€ [email protected]
์ œ๋ชฉ: Re: [microsoft/microsoft-ui-xaml] WinUI 3.0 ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๋ฐ ๋„๊ตฌ - ์ž…๋ ฅ ํ•„์š”(#1045)

WinUI 3์˜ ๊ฒฝ์šฐ ๋””์ž์ธ ์–ธ์–ด์—์„œ ์•ฑ ๊ธฐ๋Šฅ์˜ ๋ฐฐ์น˜์™€ ๊ด€๋ จํ•˜์—ฌ ์–ด๋Š ์ •๋„ ์ผ๊ด€์„ฑ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์•ฑ ์„ค์ •.

์•ฑ ์„ค์ •์€ ์–ด๋””์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๊นŒ? ์™ผ์ชฝ ํ•˜๋‹จ ๋ชจ์„œ๋ฆฌ? ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ์žˆ๋Š” ํ”„๋กœํ•„ ์•„๋ฐ”ํƒ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ์„ค์ •์„ ๋ˆ„๋ฅด๋‚˜์š”? ์™ผ์ชฝ ์ƒ๋‹จ์„ ํด๋ฆญํ•ฉ๋‹ˆ๊นŒ? ์™ผ์ชฝ ์•„๋ž˜? ํŽธ์ง‘ > ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๊นŒ?

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ง์ ‘์ด ์ด๋ฉ”์ผ์— ํšŒ์‹ ๋Š” GitHub์˜์—์„œ ๋ณผ https://github.com/microsoft/microsoft-ui-xaml/issues/1045?email_source=notifications&email_token=AD3GCLB5VXXUOYIA2NIEZATQJKTIZA5CNFSM4ICOLUJ2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD6TGV4I#issuecomment-531000049 , ๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ https : //๋กœ github์— ์žˆ์Šต๋‹ˆ๋‹ค. com/notifications/unsubscribe-auth/AD3GCLCQQ6L7H3LEJAHUDMLQJKTIZANCNFSM4ICOLUJQ .

Visual Studio์˜ ํ…œํ”Œ๋ฆฟ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Visual Studio์—์„œ WinUI/XAML ์•„์ผ๋žœ๋“œ๊ฐ€ C++/WinRT์™€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์ƒ๋‹นํ•œ ๋…ธ๋ ฅ๊ณผ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ์†์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

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

๊ฐ ํ”Œ๋žซํผ์—์„œ "๋„ค์ดํ‹ฐ๋ธŒ ๋ฃฉ์•คํ•„"๋กœ ๋‹ค๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ œ๋ฐœ ํ•˜์ง€๋งˆ, ๋‚ด๊ฐ€ Fluent Design์ด ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๋งˆ์ง€๋ง‰ ์ผ์€ ๋” ๋งŽ์€ ๋ถˆ์ผ์น˜๋ฅผ ์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด์ง€ ๋œํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์›๋ž˜ ๋Œ“๊ธ€์ด ์ œ๊ฑฐ๋จ

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

์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋‚ด๊ฐ€ Duo๊ฐ€ Android๋ผ๋Š” ์‚ฌ์‹ค์— ๋‚™๋‹ดํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ์˜์—ญ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ํ…œํ”Œ๋ฆฟ์„ ์˜คํ”ˆ ์†Œ์Šค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WPF์™€ ํ•จ๊ป˜ WinUI๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋กœ ์ƒˆ ์ปจํŠธ๋กค์„ ๋งŒ๋“ค ๋•Œ:
c# public class MyControl : UserControl { ... }
WinUI.UserControl ๋˜๋Š” WPF.UserControl์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?
์šฐ๋ฆฌ๋Š” ์„ ํƒํ•ด์•ผ ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ XAML ๋„๊ตฌ๊ฐ€ ํ†ตํ•ฉ๋˜๋ฉด ์ผ์ข…์˜ ๊ณต์œ  xaml ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ:

<UserControl xmlns="???" xmlns:uwp="???" xmlns:wpf="???">
   <!-- Potentional xmlns:android="???" xmlns:avalonia="???" -->
   <Button uwp:Content="Hi, UWP!" wpf:Content="Hi, WPF!">
</UserControl>

ํŠน๋ณ„ํ•œ ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” ์ผ์ข…์˜ ๊ณต์œ  ๋ฐฉ์–ธ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? (์˜ˆ: Visual Studio์˜ ๊ณต์œ  ํ”„๋กœ์ ํŠธ). ์กฐ๊ฑด๋ถ€ xaml์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WinUI.UserControl ๋˜๋Š” WPF.UserControl์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?
์šฐ๋ฆฌ๋Š” ์„ ํƒํ•ด์•ผ ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ XAML์—์„œ ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<UserControl 
   x:Class="MyApp.MyControl" 
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

์ด๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ UWP์ž„์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

public class MyControl : UserControl { ... }

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

public partial class MyControl { }

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

ํ…œํ”Œ๋ฆฟ์— ๊ด€ํ•ด์„œ๋Š” Hello World ํ…œํ”Œ๋ฆฟ ์ด์ƒ์ด ์žˆ์œผ๋ฉด ๋” ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ง์€ Microsoft๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์•ฑ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ฃผ๋ณ€๊ธฐ๊ธฐ ์ธ์‹ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ฐฑ์—…ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@weitzhandler ๋‚˜๋„

C# ๋ฐ Cpp/WinRT ํ”„๋กœ์ ํŠธ์šฉ SDK ์Šคํƒ€์ผ ํ”„๋กœ์ ํŠธ๋„ ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์ผ๋ฐ˜์ ์ธ Win32 ๋ฐ Inbox ์•ฑ ํŒจํ„ด์— ๋Œ€ํ•œ ํ…œํ”Œ๋ฆฟ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๋จธ๋ฆฌ ๊ผญ๋Œ€๊ธฐ์—์„œ ์งง์€ ๋ชฉ๋ก :

  • ๋ฆฌ๋ณธ
  • ๋ฉ”์ธ ๋ฉ”๋‰ด
  • ํƒญ ๋ฌธ์„œ ์ธํ„ฐํŽ˜์ด์Šค
  • ํƒ์ƒ‰ ๋ณด๊ธฐ
  • ๋ช…๋ น/๋„๊ตฌ ๋ชจ์Œ
  • ์ƒ์œ„ ํƒ์ƒ‰ ๋ณด๊ธฐ
  • ํ—ˆ๋ธŒ/๊ฐค๋Ÿฌ๋ฆฌ(์•ฝ๊ฐ„ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์Œ)
  • Treeview/MasterDetails(ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ, RegEdit, ๊ด€๋ฆฌ ์•ฑ)

๊ทธ๋Ÿฌ๋‚˜ ๊ณตํ†ต ๋Œ€ํ™” ์ƒ์ž, ํŽ˜์ด์ง€, ์„ค์ • ํŽ˜์ด์ง€ ๋“ฑ์— ๋Œ€ํ•œ ํ•ญ๋ชฉ ํ…œํ”Œ๋ฆฟ๋„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Visual Studio์˜ ํ…œํ”Œ๋ฆฟ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

VSCode/Visual Studio์šฉ C++ ํ™•์žฅ์œผ๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. VS Code๋ฅผ Visual Studio์™€ ์œ ์‚ฌํ•œ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ์ง€์›๋˜๋Š” ํŽธ์ง‘๊ธฐ๋กœ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. WinUI๋Š” OSS์ด๊ณ  VS Code๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋ฏ€๋กœ ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Template10 ๋ฐ Windows Template Studio์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค. WinUI3์—๋Š” ์ด๋Ÿฌํ•œ ๋„๊ตฌ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด ๊ธฐ๋ณธ ์Šค์บํด๋”ฉ์„ ๊ณ„์†ํ•ด์„œ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ผ๋ถ€์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๋‹น์‹ ์ด ์›ํ•˜์ง€ ์•Š๋Š” ๋“œ๋ฌธ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด MVVM ์Šค์บํด๋”ฉ์„ ๊บผ์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ASPNET Core๋กœ ์ผ๋ถ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์ข…์†์„ฑ ์ฃผ์ž…์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ASPNET Core์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ž‘์—… ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋Š˜๋‚  UWP์˜ ๊ฒฝ์šฐ ์ด๋ฅผ ์ง์ ‘ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ WTS์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ํ•ด์•ผ ํ•˜์ง€๋งŒ ๋‚˜์ค‘์—๋Š” ์—ฌ์ „ํžˆ ๋ถ™์–ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์ข…์†์„ฑ ์ฃผ์ž…์ด ํฌํ•จ๋œ WinUI3๋Š” ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ ์‹œ์Šคํ…œ์˜ ์กด์žฌ๊ฐ€ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์˜ ๋ถ€์กฑ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ, ํ…œํ”Œ๋ฆฟ ์‹œ์Šคํ…œ์„ ํ†ตํ•ฉํ•  ์ง€์› ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ’ˆ์งˆ์„ ๊ฐ•์กฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Template10 ๋ฐ Windows Template Studio์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.

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

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

@AntiPasha ๋ผ์ดํŠธ ์›จ์ดํŠธ ์Šคํƒ€์ผ๋ง ๋“ค์–ด๋ณด์…จ๋‚˜์š”? ์ด๋ฅผ ํ†ตํ•ด ์ „์ฒด ์Šคํƒ€์ผ์„ ๋‹ค์‹œ ๋งŒ๋“ค ํ•„์š” ์—†์ด ํ˜ธ๋ฒ„ ์ƒ‰์ƒ์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„ํŠผ์˜ ํ˜ธ๋ฒ„ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ XAML ๋„๊ตฌ๊ฐ€ ํ†ตํ•ฉ๋˜๋ฉด ์ผ์ข…์˜ ๊ณต์œ  xaml ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ:

<UserControl xmlns="???" xmlns:uwp="???" xmlns:wpf="???">
   <!-- Potentional xmlns:android="???" xmlns:avalonia="???" -->
   <Button uwp:Content="Hi, UWP!" wpf:Content="Hi, WPF!">
</UserControl>

ํŠน๋ณ„ํ•œ ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” ์ผ์ข…์˜ ๊ณต์œ  ๋ฐฉ์–ธ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? (์˜ˆ: Visual Studio์˜ ๊ณต์œ  ํ”„๋กœ์ ํŠธ). ์กฐ๊ฑด๋ถ€ xaml์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Tirraon ์ด๊ฒƒ์€ ์ •๋ง ํฅ๋ฏธ๋กœ์šด ์˜ˆ์ด์ง€๋งŒ ๋„๊ตฌ ํ†ตํ•ฉ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ ํ”Œ๋žซํผ์ด ์˜ค๋Š˜๋‚ ๊ณผ ๊ฐ™์ด ์กด์žฌํ•  ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ๊ณ  ๋ฐฉ์‹์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ ๋‹ค๋ฅธ Xaml ํ‘œ์ค€์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™๋“ฑํ•œ.

๊ธฐ๋ณธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ xaml ํŒŒ์ผ์ด ์†ํ•œ "์ตœ์ƒ์œ„" ํ”Œ๋žซํผ์„ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ XAML ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜„ ):

wpf: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
uwp: xmlns="http://github.com/microsoft/microsoft-ui-xaml"
์•„๋ฐœ๋กœ๋‹ˆ์•„: xmlns="https://github.com/AvaloniaUI/AvaloniaUI"
์šฐ๋…ธ: xmlns="https://github.com/unoplatform/uno"
xamarin.forms: xmlns="https://github.com/xamarin/Xamarin.Forms"

๋”ฐ๋ผ์„œ Xaml Islands๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ WinUI์™€ WPF๋ฅผ ํ˜ผํ•ฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งˆํฌ์—…์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                       xmlns:uwp="http://github.com/microsoft/microsoft-ui-xaml">
   <StackPanel>
     <uwp:Button Content="Hi, UWP!" x:Name="uwpButton">
     <Button Content="Hi, WPF!" Width="{x:Bind uwpButton.Width}" />
   </StackPanel>

</UserControl>

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋‚˜์š”?

@stevenbrix
UWP์— ๋Œ€ํ•œ ์˜ˆ์ œ์—์„œ๋Š” ๋‘ ๋ฒ„ํŠผ์„ ๋ชจ๋‘ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
๋‚ด ๋ง์€, ์˜ˆ๋ฅผ ๋“ค์–ด xmlns=".../xaml/presentation"์ด ์ตœ์ƒ์œ„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ด๊ณ  UserControl wutg StackPanel์ด uwp์™€ wpf์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋‘ ํ”Œ๋žซํผ ๋ชจ๋‘์—์„œ ๋‘ ๋ฒˆ์งธ Button์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ์š”?

๋„๊ตฌ ํ†ตํ•ฉ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ ํ”Œ๋žซํผ์ด ์˜ค๋Š˜๋‚ ๊ณผ ๊ฐ™์ด ์กด์žฌํ•  ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ๊ณ  ๋ฐฉ์‹์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋„ค, ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

UWP์— ๋Œ€ํ•œ ์˜ˆ์ œ์—์„œ๋Š” ๋‘ ๋ฒ„ํŠผ์„ ๋ชจ๋‘ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
๋‚ด ๋ง์€, ์˜ˆ๋ฅผ ๋“ค์–ด xmlns=".../xaml/presentation"์ด ์ตœ์ƒ์œ„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ด๊ณ  UserControl wutg StackPanel์ด uwp์™€ wpf์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋‘ ํ”Œ๋žซํผ ๋ชจ๋‘์—์„œ ๋‘ ๋ฒˆ์งธ Button์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ์š”?

@Tirraon , ๋‚ด๊ฐ€ ์ œ๊ณตํ•œ ์˜ˆ์ œ๋Š” ์ˆœ์ „ํžˆ Xaml Islands๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ ์ง„์ ์œผ๋กœ ํ˜„๋Œ€ํ™”ํ•˜๋Š” WPF ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. WPF์™€ WinUI ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ์‚ฌ์šฉ๋˜๋Š” "ํ‘œ์ค€" ๋งˆํฌ์—…์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

ํ˜„์žฌ Xaml Islands๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์•ฑ ์ž‘์„ฑ์ž๋Š” ๋ชจ๋“  ์„ฌ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ปจํŠธ๋กค์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ WPF ํƒœ๊ทธ์— WinUI ์š”์†Œ๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํฌํ•จํ•˜๋Š” ๋Œ€์‹  WPF ํƒœ๊ทธ์˜ ๋ฌธ์ž์—ด์„ ํ†ตํ•ด ํ˜•์‹์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ ์ „ํ™”๋ฅผ ๋ฐ›๊ณ  ์žˆ์ง€๋งŒ, ์ผ๋‹จ ๋‚ด PC ๊ทผ์ฒ˜์— ์žˆ์œผ๋ฉด ๋‚ด๊ฐ€ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์˜ ์ „ํ›„๋ฅผ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@stevenbrix
์˜ค, ์ด์ œ ๋‹น์‹ ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@stevenbrix
์˜ค, ์ด์ œ ๋‹น์‹ ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@ํ‹ฐ๋ผ์˜จ ๋Œ€๋‹จํ•ด! ์šฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ํŽ˜์ด์ง€์— ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค โ˜บ๏ธ

์ œ ์•„์ด๋””์–ด๊ฐ€ ์˜์™ธ์˜ ๊ฒƒ ๊ฐ™๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Xaml Island ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉํ‘œ๋กœ ์ž ์žฌ์ ์œผ๋กœ ๋„๊ตฌ๋ฅผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ดˆ๊ธฐ์— ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒƒ์— ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

FWIW, ๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์— ํ™•์‹คํžˆ ์žฅ์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” WinUI3/.NET5 ๊ธฐ๊ฐ„ ๋‚ด์— ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ์„ ๊ธฐ๋ณธ ์บ”๋ฒ„์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ธฐ๋ณธ ๋ฉ”์‹œ์ง€ ์‹œ์Šคํ…œ์—์„œ ์ž…๋ ฅ์„ ์ˆ˜์‹ ํ•˜๋Š” ์ผ๋ถ€ ํŒŒ์ดํ”„๋ผ์ธ์— WinUI Xaml์„ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”. WinUi.Adapters.DirectX, WinUI.Adapters.WASM, WinUi.Adapters.X, WinUi.Adapters.Android์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ ์‹œ ๋ชจ๋“  ์–ด๋Œ‘ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•  ํ•„์š”๋Š” ์—†์œผ๋ฉฐ Windows 10์„ ์ง€์›ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์–ด๋Œ‘ํ„ฐ๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๋ณด๋‚ธ ์‚ฌ๋žŒ: Steven Kirbach [email protected]
๋ณด๋‚ธ ๋‚ ์งœ: 2019๋…„ 11์›” 7์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 9:13:46
๋ฐ›๋Š” ์‚ฌ๋žŒ: microsoft/microsoft-ui-xaml [email protected]
์ฐธ์กฐ: ๋” ์ƒคํ”„ ๋‹Œ์ž [email protected] ; ๋Œ“๊ธ€ [email protected]
์ œ๋ชฉ: Re: [microsoft/microsoft-ui-xaml] WinUI 3.0 ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๋ฐ ๋„๊ตฌ - ์ž…๋ ฅ ํ•„์š”(#1045)

@stevenbrix https://github.com/stevenbrix
์˜ค, ์ด์ œ ๋‹น์‹ ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@Tirraon https://github.com/Tirraon ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ํŽ˜์ด์ง€์— ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค โ˜บ๏ธ

์ œ ์•„์ด๋””์–ด๊ฐ€ ์˜์™ธ์˜ ๊ฒƒ ๊ฐ™๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Xaml Island ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉํ‘œ๋กœ ์ž ์žฌ์ ์œผ๋กœ ๋„๊ตฌ๋ฅผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ดˆ๊ธฐ์— ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒƒ์— ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

FWIW, ๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์— ํ™•์‹คํžˆ ์žฅ์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” WinUI3/.NET5 ๊ธฐ๊ฐ„ ๋‚ด์— ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
GitHub์˜์— ๊ทธ๊ฒƒ์„ ์ง์ ‘์ด ์ด๋ฉ”์ผ์— ํšŒ์‹  ๋ณผ https://github.com/microsoft/microsoft-ui-xaml/issues/1045?email_source=notifications&email_token=AD3GCLBHRGZTDFHFWQTAFK3QSQWCVA5CNFSM4ICOLUJ2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEDMXFLY#issuecomment-551121583 , ๋˜๋Š” ํƒˆํ‡ด https://github.com/ ์•Œ๋ฆผ/๊ตฌ๋… ์ทจ์†Œ-์ธ์ฆ/AD3GCLF2BUTXQFPSVNULZODQSQWCVANCNFSM4ICOLUJQ .

์˜ˆ, XAML Island ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ํ˜„์žฌ ๋”์ฐํ•ฉ๋‹ˆ๋‹ค.

@sharpninja
์šฐ๋…ธ๋ฅผ ๋ด์•ผํ•œ๋‹ค
https://platform.uno/
๋˜ํ•œ ๋ชจ๋“  ํ”Œ๋žซํผ์— ๋Œ€ํ•ด WinUI 3.0์„ ์ง€์›ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
https://platform.uno/winui-on-windows7-via-unoplatform/

@stevenbrix
์ €๋Š” Xaml Islands์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ๊ฑฐ์˜ ์—†์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ผ๋ฐ˜ UWP๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ํ™•์‹คํžˆ ๋” ๊ฐ€๊นŒ์ด์—์„œ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ์ œ์•ˆ์€ Xaml Islands ์ž์ฒด์™€ ๊ด€๋ จ์ด ์—†์—ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”Œ๋žซํผ์—์„œ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— WinUI์™€ ๋” ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ œ์•ˆ์€ Xaml Islands ์ž์ฒด์™€ ๊ด€๋ จ์ด ์—†์—ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”Œ๋žซํผ์—์„œ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— WinUI์™€ ๋” ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@Tirraon , ๊ทธ๋ž˜ ์™„์ „ํžˆ ์ดํ•ดํ•˜๊ณ  ๋จธ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ณณ์ด ์ ˆ๋Œ€์ ์œผ๋กœ ์ข‹์•„ ๐Ÿ™Œ

๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด @jeromelaban ๋ฐ ํšŒ์‚ฌ์™€ ๊ฐ„๋‹จํžˆ ์ด์•ผ๊ธฐํ–ˆ์œผ๋ฉฐ ํ™•์‹คํžˆ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ๋…ผ์˜์˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์ฒด์ ์ธ ๊ณ„ํš์ด๋‚˜ ์•ฝ์†์€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ž…๋ ฅ์€ ํ›Œ๋ฅญํ•˜๋ฉฐ ๊ณ ๊ฐ์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์น˜๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ˜„

XAML ์•„์ผ๋žœ๋“œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” C++ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ง๋ฉดํ•œ ๋ฌธ์ œ ๋ชฉ๋ก์€ ์ด ์Šค๋ ˆ๋“œ์˜ ์ด์ „ ๋ฉ”์‹œ์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ, XAML Island ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ํ˜„์žฌ ๋”์ฐํ•ฉ๋‹ˆ๋‹ค.

XAML ์•„์ผ๋žœ๋“œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” C++ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ง๋ฉดํ•œ ๋ฌธ์ œ ๋ชฉ๋ก์€ ์ด ์Šค๋ ˆ๋“œ์˜ ์ด์ „ ๋ฉ”์‹œ์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

@sylveon ๊ท€ํ•˜์˜ ์˜๊ฒฌ(์•„๋ž˜ ๋งํฌ)์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ, ๊ฝค ๋”์ฐํ•˜๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋ถˆํŽธ์„ ๋ผ์ณ ๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์„ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.
https://github.com/microsoft/microsoft-ui-xaml/issues/1045#issuecomment -512945553
https://github.com/microsoft/microsoft-ui-xaml/issues/1045#issuecomment -513505038

๋‹น์‹ ์ด ๊ฒช๊ณ  ์žˆ๋Š” ๋งŽ์€ ๊ณ ํ†ต์€ ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์˜ ๊ด€์‹ฌ์„ ๋ฐ›๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€ ๊ตฌ์„ฑ์› ์ค‘ ์ผ๋ถ€๊ฐ€ XAML ๋„๊ตฌ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•œ ์ด ๋น„๋””์˜ค๋ฅผ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํ•ด๋‹น ๋งํฌ๋Š” @michael-hawker ๋ฐ @marb2000 ์ด ์ƒˆ๋กœ์šด Xaml Island ํ™˜๊ฒฝ์œผ๋กœ

Xaml Island์˜ ๊ฒฝํ—˜์„ ์‰ฝ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ•˜๋Š” ์ธก๋ฉด์€ ํ˜„์žฌ WPF์— UWP ์ฝ˜ํ…์ธ  ์„ฌ์„ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์œ„ ๋น„๋””์˜ค์—์„œ).

  <Grid>
   <xi:WindowsXamlHost InitialTypeName="UWP_XamlApplication.SamplePage"/>
  </Grid>

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

  <Grid>
   <uwp:SamplePage />
  </Grid>

@stevenbrix

๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด @jeromelaban ๋ฐ ํšŒ์‚ฌ์™€ ๊ฐ„๋‹จํžˆ ์ด์•ผ๊ธฐํ–ˆ์œผ๋ฉฐ ํ™•์‹คํžˆ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ๋…ผ์˜์˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์ฒด์ ์ธ ๊ณ„ํš์ด๋‚˜ ์•ฝ์†์€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ž…๋ ฅ์€ ํ›Œ๋ฅญํ•˜๋ฉฐ ๊ณ ๊ฐ์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์น˜๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ๋งŽ์€ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค! (์ด ๋Œ€ํ™”๋Š” ์–ด๋””์—์„œ๋‚˜ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.) WinUI ํฌ์ŠคํŠธ 3.0์ด ํ”Œ๋žซํผ ๊ฐ„ ๊ตฌํ˜„์œผ๋กœ ์ „ํ™˜๋œ๋‹ค๋ฉด ๊ฐœ๋ฐœ์ž ์ง€์›์ด ๋งŽ์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. #1461์— ๋Œ€ํ•œ ํ† ๋ก ์„ ๋ณด์‹ญ์‹œ์˜ค. ๋‹จ๊ธฐ์ ์œผ๋กœ๋Š” Uno Platform ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ XAML/C#์„ HTML/WASM์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ UWP ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋†€๋ผ์šด ์ผ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์žฅ๊ธฐ์ ์œผ๋กœ ์ €๋Š” Electron ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์— ๋Œ€ํ•ด ์šฐ๋ คํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•œ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ๋‚˜๋Š” ๋ชจ๋‘๊ฐ€ ํ˜„์žฌ WinUI 3.0์œผ๋กœ ๋ฐ”์˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ž‘์—…์ด ๋๋‚˜๋ฉด @jeromelaban , @marb2000 , @jevansaks ๋ฐ ๊ธฐํƒ€ ์‚ฌ์šฉ์ž๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ UWP๋ฅผ ๋ชจ๋“  ๊ณณ์—์„œ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ํ–ฅํ›„ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ์ปค๋ฎค๋‹ˆํ‹ฐ ํ† ๋ก ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

WinUi๋Š” ๋„ค์˜ค์™€ ๋“€์˜ค๊ฐ€ ๋ชจ๋‘ ์‚ด์•„๋‚จ์„ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์ œ์ •์‹ ์˜ ๊ธธ์ž…๋‹ˆ๋‹ค.


๋ณด๋‚ธ ์‚ฌ๋žŒ: roblo [email protected]
๋ณด๋‚ธ ๋‚ ์งœ: 2019๋…„ 11์›” 7์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 12:00:07
๋ฐ›๋Š” ์‚ฌ๋žŒ: microsoft/microsoft-ui-xaml [email protected]
์ฐธ์กฐ: ๋” ์ƒคํ”„ ๋‹Œ์ž [email protected] ; ๋ฉ˜์…˜ @noreply.github.com
์ œ๋ชฉ: Re: [microsoft/microsoft-ui-xaml] WinUI 3.0 ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๋ฐ ๋„๊ตฌ - ์ž…๋ ฅ ํ•„์š”(#1045)

@stevenbrix https://github.com/stevenbrix

๋‚˜๋Š” @jeromelaban https://github.com/jeromelaban ๋ฐ ํšŒ์‚ฌ์™€ ์ •ํ™•ํžˆ ๋‹น์‹ ์ด ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์ด์•ผ๊ธฐํ–ˆ์œผ๋ฉฐ ํ™•์‹คํžˆ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ๋…ผ์˜์˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์ฒด์ ์ธ ๊ณ„ํš์ด๋‚˜ ์•ฝ์†์€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ž…๋ ฅ์€ ํ›Œ๋ฅญํ•˜๋ฉฐ ๊ณ ๊ฐ์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์น˜๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ๋งŽ์€ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค! (์ด ๋Œ€ํ™”๋Š” ์–ด๋””์—์„œ๋‚˜ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.) WinUI ํฌ์ŠคํŠธ 3.0์ด ํ”Œ๋žซํผ ๊ฐ„ ๊ตฌํ˜„์œผ๋กœ ์ „ํ™˜๋œ๋‹ค๋ฉด ๊ฐœ๋ฐœ์ž ์ง€์›์ด ๋งŽ์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. #1461 https://github.com/microsoft/microsoft-ui-xaml/issues/1461 ์—์„œ ํ† ๋ก ์„ ๋ณด์‹ญ์‹œ์˜ค. ๋‹จ๊ธฐ์ ์œผ๋กœ๋Š” Uno Platform ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ XAML/C#์„ HTML/WASM์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ UWP ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋†€๋ผ์šด ์ผ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์žฅ๊ธฐ์ ์œผ๋กœ ์ €๋Š” Electron ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์— ๋Œ€ํ•ด ์šฐ๋ คํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•œ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ๋‚˜๋Š” ๋ชจ๋‘๊ฐ€ ํ˜„์žฌ WinUI 3.0์œผ๋กœ ๋ฐ”์˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ๋๋‚˜๋ฉด @jeromelaban https://github.com/jeromelaban , @marb2000 https://github.com/marb2000 , @jevansaks https://github.com/jevansaks ๋ฐ ๊ธฐํƒ€๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. UWP๊ฐ€ ๋ชจ๋“  ๊ณณ์—์„œ ๋ Œ๋”๋ง๋˜๋„๋ก ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”. ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ํ–ฅํ›„ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ์ปค๋ฎค๋‹ˆํ‹ฐ ํ† ๋ก ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
GitHub์˜์— ๊ทธ๊ฒƒ์„ ์ง์ ‘์ด ์ด๋ฉ”์ผ์— ํšŒ์‹  ๋ณผ https://github.com/microsoft/microsoft-ui-xaml/issues/1045?email_source=notifications&email_token=AD3GCLCHIRMGIIB4EEMXQATQSRJSPA5CNFSM4ICOLUJ2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEDNI2QA#issuecomment-551193920 , ๋˜๋Š” ํƒˆํ‡ด https://github.com/ ์•Œ๋ฆผ/๊ตฌ๋… ์ทจ์†Œ-์ธ์ฆ/AD3GCLCAZIOGVET6CJKLKLTQSRJSPANCNFSM4ICOLUJQ .

WinUi๋Š” ๋„ค์˜ค์™€ ๋“€์˜ค๊ฐ€ ๋ชจ๋‘ ์‚ด์•„๋‚จ์„ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์ œ์ •์‹ ์˜ ๊ธธ์ž…๋‹ˆ๋‹ค.

๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์ง€๋งŒ Android ๋ฐ Surface Duo์—์„œ ์‹คํ–‰๋˜๋Š” Windows ์•ฑ์—์„œ ๋™์ผํ•œ UI๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž์˜ ์ตœ์†Œํ•œ์˜ ๊ฐœ์ž…์œผ๋กœ - ๊ทธ๊ฒƒ์ด ์„ฑ๋ฐฐ์ž…๋‹ˆ๋‹ค.

WinUI๊ฐ€ ์ฃผ์š” ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์ด ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ณ  Windows๊ฐ€ ์žฅ๊ธฐ์ ์œผ๋กœ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์˜ ์•ฑ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋ฉด. (ํฐ ํ™•๋ฆฝ๋œ ์•ฑ์˜ ๊ฒฝ์šฐ ํ•ญ์ƒ ๋‚˜์œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ LoB ๋ฐ ๋‹ค์Œ ํฐ ์•ฑ์˜ ๊ฒฝ์šฐ...)

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

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

XAML Direct๊ฐ€ ์žˆ์ง€๋งŒ ํ˜„์žฌ C# ๋ฐ C++์—์„œ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.core.direct

๋‚ด ๋ง์€ ๊ทธ๊ฒŒ ์•„๋‹ˆ์•ผ. ์ฝ”๋“œ ์ƒ์„ฑ ๋„๊ตฌ์˜ ์ถœ๋ ฅ์ด C# ๋˜๋Š” C++๊ฐ€ ์•„๋‹Œ IL์ด๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ XAML์„ IL๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@sharpninja C++ ์ฝ”๋“œ ๋Œ€์‹  LLVM ๋ฐ”์ดํŠธ์ฝ”๋“œ๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์œ ์ตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด MIDL ๋ฐ XLang๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ชจ๋“  XLang ์ง€์› ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์‚ฌ์šฉํ•  COM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ WinMD ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

C++ ๋ชจ์ž๋ฅผ ์“ฐ๊ณ  C++์šฉ WinUI ๋„๊ตฌ์™€ ๊ด€๋ จํ•˜์—ฌ ๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์€ Microsoft๊ฐ€ ๋งˆ์นจ๋‚ด 90๋…„๋Œ€ ์ค‘๋ฐ˜๋ถ€ํ„ฐ C++ Builder๊ฐ€ ํ•ด์˜จ ์ผ์„ ๋”ฐ๋ผ์žก๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

C++ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์‹ค์ œ RAD ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์–‘์‹์—๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ์ง€๋งŒ C++/CLI๋Š” ์ด์— ๋ฏธ์น˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

C++/CX๋Š” ๊ทธ๋ ‡๊ฒŒ ๋  ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ C++ ๋นŒ๋”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ C++/WinRT๋Š” ํ‘œ์ค€ C++17์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ์Šคํฌํ†ฑ ๊ฐœ๋ฐœ์ž์˜ ์ „๋ฐ˜์ ์ธ ๊ฒฝํ—˜์€ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ์ƒ์šฉ๊ตฌ์˜ ์ฆ๊ฐ€, COM ์œ ํ˜•์ด ABI ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ ๋””์ž์ด๋„ˆ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ์ง€์›ํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” MIDL ์ปดํŒŒ์ผ๋Ÿฌ์™€ COM ABI ์ง€์›์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ƒ์šฉ๊ตฌ๋ฅผ ๋‹ค๋ฃฐ ์ƒ๊ฐ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹น๋ถ„๊ฐ„ ์—ฌ์ „ํžˆ C++/CX๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— .NET ๋ชจ์ž๋ฅผ ์“ด ์ƒํƒœ์—์„œ DirectX์™€ ๊ฐ™์€ C++ ์ „์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งˆ์นจ๋‚ด WinUI ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ Blend๋Š” ์‚ฌ๋ž‘ํ•˜๊ณ  F#๋„ Microsoft์˜ .NET ์–ธ์–ด๋ผ๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

UWP Community Discord์—์„œ StatusBar์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋‹ค๊ฐ€ ๋“  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค..

Visual Studio์—์„œ ๋„๊ตฌ ์ƒ์ž์— UWP์—์„œ ๋ˆ„๋ฝ๋œ WPF ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ํ•ญ๋ชฉ์ด ํฌํ•จ๋˜๋„๋ก ํ•˜๊ณ  ํ•ด๋‹น ํ•ญ๋ชฉ์ด ์„ ํƒ๋˜๋ฉด ๊ธฐ์กด ์ปจํŠธ๋กค์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ํŒ์—…์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ด ์•„์ด๋””์–ด๋Š” WPF(๋˜๋Š” ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ)์—์„œ ์˜ค๋Š” ์‚ฌ๋žŒ๋“ค์ด ํŠน์ • ์ปจํŠธ๋กค์„ ๋ณผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•œ ๊ฒฝํ—˜์ด ๋  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ „ํ™˜์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋ ค๋Š” ๋ฐ”๋žŒ์—์„œ ๋น„๋กฏ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. CommandBar๊ฐ€ StatusBar์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ๋žŒ๋“ค์ด WinUI๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ˆ„๋ฝ๋œ ๋ชจ๋“  ์ปจํŠธ๋กค์„ ์‹ค์ œ๋กœ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š๊ณ ๋„ ์ผ๋ถ€ ๊ณต๋ฐฑ์„ ์ฑ„์šฐ๋Š” ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Re: StatusBar - UWP๋ฅผ ์‹œ๋„ํ•˜๋Š” ๊ธฐ์กด ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ์ž์˜ ๊ด€์ ์—์„œ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ StatusBar๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋งŽ์€ ์•ฑ์—์„œ ํ•„์ˆ˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์˜ˆ, CommandBar๊ฐ€ ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ๋žŒ๋“ค์€ CommandBar๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๋ˆ„๊ตฐ๊ฐ€๋Š” ๋‚ด๊ฐ€ ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋งจ ์•„๋ž˜์— ๋†“๊ณ  ํ•œ ํ–‰ ๋†’์ด๋กœ ๋งŒ๋“ค๊ณ  ๋‹ค์–‘ํ•œ ์ปจํŠธ๋กค์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ‘œ์‹œํ•  ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ์กด Xaml ๋””์ž์ด๋„ˆ๋“ค๋„ CommandBar์— ๋Œ€ํ•ด ๋ชจ๋ฅด๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‹น์‹ ์ด ๋งž์„ ์ˆ˜๋„ ์žˆ๊ณ  CommandBar๊ฐ€ ๋” ๋‚˜์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ Paul Thurrot์€ UWP ๋ฉ”๋ชจ์žฅ ์•ฑ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ฆฌ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CommandBar๊ฐ€ StatusBar์˜ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์บ์ฃผ์–ผ(๋˜๋Š” ์‹ ๊ทœ) ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ์ „ํžˆ StatusBar๋ฅผ ์ฐพ๊ณ  ์žˆ์ง€๋งŒ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Paul Thurrot์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ œ ์š”์ ์€ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

์Šค๋‹ˆํŽซ์ด ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋„ xaml์— ์ฃผ์ž…๋œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๋ณด๋‚ธ ์‚ฌ๋žŒ: Gavin-Williams [email protected]
๋ณด๋‚ธ ๋‚ ์งœ: 2020๋…„ 2์›” 18์ผ ํ™”์š”์ผ ์˜คํ›„ 7:05:39
๋ฐ›๋Š” ์‚ฌ๋žŒ: microsoft/microsoft-ui-xaml [email protected]
์ฐธ์กฐ: ๋” ์ƒคํ”„ ๋‹Œ์ž [email protected] ; ๋ฉ˜์…˜ @noreply.github.com
์ œ๋ชฉ: Re: [microsoft/microsoft-ui-xaml] WinUI 3.0 ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๋ฐ ๋„๊ตฌ - ์ž…๋ ฅ ํ•„์š”(#1045)

UWP Community Discord์—์„œ StatusBar์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋‹ค๊ฐ€ ๋“  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค..

Visual Studio์—์„œ ๋„๊ตฌ ์ƒ์ž์— UWP์—์„œ ๋ˆ„๋ฝ๋œ WPF ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ํ•ญ๋ชฉ์ด ํฌํ•จ๋˜๋„๋ก ํ•˜๊ณ  ํ•ด๋‹น ํ•ญ๋ชฉ์ด ์„ ํƒ๋˜๋ฉด ๊ธฐ์กด ์ปจํŠธ๋กค์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ํŒ์—…์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ด ์•„์ด๋””์–ด๋Š” WPF(๋˜๋Š” ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ)์—์„œ ์˜ค๋Š” ์‚ฌ๋žŒ๋“ค์ด ํŠน์ • ์ปจํŠธ๋กค์„ ๋ณผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์ปจํŠธ๋กค์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•œ ๊ฒฝํ—˜์ด ๋  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ „ํ™˜์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋ ค๋Š” ๋ฐ”๋žŒ์—์„œ ๋น„๋กฏ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. CommandBar๊ฐ€ StatusBar์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ๋žŒ๋“ค์ด WinUI๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ˆ„๋ฝ๋œ ๋ชจ๋“  ์ปจํŠธ๋กค์„ ์‹ค์ œ๋กœ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š๊ณ ๋„ ์ผ๋ถ€ ๊ณต๋ฐฑ์„ ์ฑ„์šฐ๋Š” ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
GitHub์˜์— ๊ทธ๊ฒƒ์„ ์ง์ ‘์ด ์ด๋ฉ”์ผ์— ํšŒ์‹  ๋ณผ https://github.com/microsoft/microsoft-ui-xaml/issues/1045?email_source=notifications&email_token=AD3GCLGYERSFO7LBXKWBBRDRDSAWHA5CNFSM4ICOLUJ2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEMF6O3Y#issuecomment-587982703 , ๋˜๋Š” ํƒˆํ‡ด https://github.com/ ์•Œ๋ฆผ/๊ตฌ๋… ์ทจ์†Œ-์ธ์ฆ/AD3GCLFLGA773XOS5OSG5ULRDSAWHANCNFSM4ICOLUJQ .

๊ฐœ๋ฐœ์ž ์Šคํ† ๋ฆฌ์—๋Š” ์ผ์ข…์˜ ๋น„๊ต ๋ชฉ๋ก์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Win32 ์•ฑ์— ๊ณ ์œ ํ•œ ๊ฐœ๋…์ด๋ฏ€๋กœ ์ƒํƒœ ํ‘œ์‹œ์ค„, ๋„๊ตฌ ๋ชจ์Œ, ๋ฉ”๋‰ด, ๊ทธ๋ฆฌํผ, ํƒญ ๋“ฑ์ด ํ•œ ๋ชฉ๋ก์— ์žˆ๊ณ  WinUI๋Š” ๋‹ค๋ฅธ ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ์•ฑ์˜ UI๋ฅผ WinUI๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋‘˜ ๋‹ค์˜ ์ฝ”๋“œ ์ƒ˜ํ”Œ์„ ํฌํ•จํ•˜๋Š” ํŽ˜์ด์ง€ ์ž์ฒด.

์—ด๋ฆฐ ์งˆ๋ฌธ
1-3๋‹จ๊ณ„๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋ฉด ๋„์›€์ด ๋ ๊นŒ์š”?

์˜ˆ. ์ €๋Š” 1๊ฐœ์˜ "๋ ˆ๊ฑฐ์‹œ" Windows Forms ์•ฑ(๋ ˆ๊ฑฐ์‹œ๋ž€ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์˜ˆ์‚ฐ์ด ์—†์Œ์„ ์˜๋ฏธํ•จ)๊ณผ 2๊ฐœ ๋˜๋Š” 3๊ฐœ์˜ ๋ ˆ๊ฑฐ์‹œ WPF ์•ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. WinForms ์•ฑ์€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ WPF ์•ฑ์„ WinUI 3์œผ๋กœ ์‹ ์†ํ•˜๊ฒŒ ์ด์‹ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋„๊ตฌ๋Š” ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

MSIX๋Š” ๋ชจ๋“  ์•ฑ์— ๋Œ€ํ•œ ์ตœ์‹  ํŒจํ‚ค์ง• ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Win32์˜ WinUI์˜ ๊ฒฝ์šฐ ClickOnce๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์–ด๋–ค ๋‹ค๋ฅธ ํŒจํ‚ค์ง• ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์›์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํŠนํžˆ Win32์˜ WinUI์˜ ๊ฒฝ์šฐ

ํ˜„์žฌ ClickOnce๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋ฐ์Šคํฌํ†ฑ์— ์•ฑ์„ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์—…๋ฐ์ดํŠธ์˜ ์ผ๋ถ€ ๋ชจ๋ธ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@JeffSchwandt

์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋Š” ์ด์ „ ๋ฒ„์ „(1-2)์„ ์‚ฌ์šฉํ•˜๋Š” WinUI ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฒ„์ „ 3์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

WPF ์•ฑ์„ WinUI ์•ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์ž๋™ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ํŠนํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋งŽ์€ ๋…ธ๋ ฅ ์—†์ด๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค).

์ด ์Šค๋ ˆ๋“œ๊ฐ€ ์ด ์š”์ฒญ์„ ๊ฒŒ์‹œํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Rust๋Š” ํ˜„์žฌ ์ ์ ˆํ•œ UI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ ˆ์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. WinUI๊ฐ€ ํ–ฅํ›„ ๋„ค์ดํ‹ฐ๋ธŒ SDK์™€ ์ผ๋ถ€ ๋„๊ตฌ๋กœ Rust๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ๊ฐ€ ์ด ์š”์ฒญ์„ ๊ฒŒ์‹œํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Rust๋Š” ํ˜„์žฌ ์ ์ ˆํ•œ UI ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ ˆ์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. WinUI๊ฐ€ ํ–ฅํ›„ ๋„ค์ดํ‹ฐ๋ธŒ SDK์™€ ์ผ๋ถ€ ๋„๊ตฌ๋กœ Rust๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค. Rust/WinRT๋Š” Rust ์•ฑ์—์„œ WinUI์™€ ๊ฐ™์€ WinRT API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค! https://kennykerr.ca/2020/02/22/rust-winrt-coming-soon/์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

@jevansaks ํ—ค์ด, ์‘๋‹ต ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์˜ˆ, Kenny๊ฐ€ Rust/WinRT์—์„œ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ WinRT๊ฐ€ WinUI์—์„œ ์ง€์›ํ•˜๋Š” ์œ ์ผํ•œ API ๊ณ„์ธต์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์Šคํฌํ†ฑ ์•ฑ์˜ WinRT API ์‚ฌ์šฉ์ด Windows 10 1903์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๋ฐ˜๋ฉด WinUI๋Š” ์ด์ „ ๋ฒ„์ „์˜ Windows 10์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋งž๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

Rust/WinRT(C++/WinRT์™€ ๊ฐ™์€)๋Š” Windows 7๊นŒ์ง€ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. WinRT ์ž์ฒด๋Š” ํ•ญ์ƒ ๋ฐ์Šคํฌํ†ฑ/win32 ์•ฑ์—์„œ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. store/uwp/packaging ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋Š” ํŠน์ • API๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค(WinRT ์ „์ฒด๊ฐ€ ์•„๋‹˜). WinUI์— ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์—†๋Š” ํ•œ ์ง€์›๋˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ C++/WinRT ๋ฐ Rust/WinRT๋ฅผ ํ†ตํ•ด ๋ฐ์Šคํฌํ†ฑ ์•ฑ์—์„œ WinUI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WinUI ๋ฐ์Šคํฌํ†ฑ ์•ฑ์€ ๋ผ์ด๋ธŒ ํƒ€์ผ ๋ฐ ํƒ€์ผ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํ˜„์žฌ UWP ์•ฑ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹ํƒ€์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์ƒ˜ํ”Œ๊ณผ SDK ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ ์•ฑ์˜ WinRT API ์‚ฌ์šฉ์ด Windows 10 1903์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋งž๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

WinUI Desktop์€ ํ˜„์žฌ WinUI 3.0์šฉ์œผ๋กœ ์„ค๊ณ„ ์ค‘์ด๋ฉฐ ์ผ๋ฐ˜ Win32 ์•ฑ์—์„œ WinUI ํ•˜์œ„ ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ ๊ณ„ํš์€ 1803๊นŒ์ง€์ž„).

Windows UI๋Š” ์ตœ์†Œํ•œ ์ฃผ์š” MVVM ํ”„๋ ˆ์ž„์›Œํฌ์ธ MVVM Light, Prism ๋ฐ Caliburn์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ INotifyPropertyChanged ๋ฐ INotifyCollectionChanged๊ฐ€ ObservableCollection์„ ๊นจ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋ฌธ์„œํ™”๋œ ๋ฌธ์ œํ™•์‹คํžˆ MVVM Light์™€ ๋‹ค๋ฅธ ๋‘ ํ”„๋ ˆ์ž„์›Œํฌ๋„ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์•Œ์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„, ObservableCollection์„ ๊นจ๋Š” INotifyPropertyChanged ๋ฐ INotifyCollectionChanged ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๋ฌธ์„œํ™”๋œ ๋ฌธ์ œ๋Š” ํ™•์‹คํžˆ MVVM Light์™€ ๋‹ค๋ฅธ ๋‘ ํ”„๋ ˆ์ž„์›Œํฌ๋„ ์†์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์•Œ์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@terrycox ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๊ฐ€ WinUI 3.0 RTM์— ์˜ํ•ด ํ•ด๊ฒฐ๋  ๊ฒƒ์ž„์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ ์ด์ „์— ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋นŒ๋“œ์—์„œ ์ด์ƒ์ ์œผ๋กœ๋Š” ;)

@terrycox Windows UI๋Š” ์ตœ์†Œํ•œ ์ฃผ์š” MVVM ํ”„๋ ˆ์ž„์›Œํฌ์ธ MVVM Light, Prism ๋ฐ Caliburn์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ... ๋ฌธ์„œํ™”๋œ ๋ฌธ์ œ

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

๊ทธ๋Ÿฌ๋‚˜ MVVM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด WinUI๋ฅผ ํฌํ•จํ•œ .Net UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ UIElements๊ฐ€ ์ธ์‹ํ•˜๊ณ  ์žˆ๋Š” ์ด๋ฒคํŠธ ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์€ ํ•„์š”ํ•˜๋ฉฐ ๊ทธ๊ฒƒ์ด ๊ณ ์žฅ๋‚œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๋ณด๋‚ธ ์‚ฌ๋žŒ: Charles Roddie [email protected]
๋ณด๋ƒ„: 2020๋…„ 3์›” 25์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 2:28:46
๋ฐ›๋Š” ์‚ฌ๋žŒ: microsoft/microsoft-ui-xaml [email protected]
์ฐธ์กฐ: ๋” ์ƒคํ”„ ๋‹Œ์ž [email protected] ; ๋ฉ˜์…˜ @noreply.github.com
์ œ๋ชฉ: Re: [microsoft/microsoft-ui-xaml] WinUI 3.0 ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๋ฐ ๋„๊ตฌ - ์ž…๋ ฅ ํ•„์š”(#1045)

@terrycox https://github.com/terrycox Windows UI๋Š” ์ตœ์†Œํ•œ ์ฃผ์š” MVVM ํ”„๋ ˆ์ž„์›Œํฌ์ธ MVVM Light, Prism ๋ฐ Caliburn์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ... ๋ฌธ์„œํ™”๋œ ๋ฌธ์ œ

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

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ํšŒ์‹ ํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/microsoft/microsoft-ui-xaml/issues/1045#issuecomment-604040104 ์—์„œ ํ™•์ธํ•˜๊ฑฐ๋‚˜ https://github.com/notifications/unsubscribe-auth/๋ฅผ ๊ตฌ๋… ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค.

Dotnet cli ๋„๊ตฌ๋Š” ๋‹ค์Œ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„ท์ฝ”์–ด SDK
dotnet new ๋ฐ dotnet build์™€ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ์ถฉ๋ถ„ํ•ด์•ผ ํ•˜๋ฉฐ Visual Studio ์„ค์น˜์— ๋Œ€ํ•œ ํ•˜๋“œ ์ข…์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. .Net Core ์‹œ๋Œ€์— ์™„์ „ํžˆ ์ฐธ์—ฌํ•˜์‹ญ์‹œ์˜ค!

  • xaml ๋””์ž์ด๋„ˆ๊ฐ€ ๋น ๋ฅด๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ XAML ๋””์ž์ด๋„ˆ๋Š” ๋Š๋ฆฌ๊ณ  ํ•ญ์ƒ ์ผ๋ถ€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋””์ž์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

  • ํ˜„์žฌ uwp์—๋Š” ์ž ๊ธˆ ํ™”๋ฉด์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” API๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ž ๊ธˆ ํ™”๋ฉด์„ ๊ฐ์ง€ํ•˜๊ณ  ๋ถ€์šธ ๊ฐ’์„ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” API๊ฐ€ ์ œ๊ณต๋˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž ๊ทธ๊ฑฐ๋‚˜ ์ž ๊ธˆ ํ•ด์ œํ•œ ํ›„์—๋„ ์ผ๋ถ€ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๋ฐฐ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    - ๊ธฐ์กด ์ž ๊ธˆํ™”๋ฉด API

  • ๋‚ด ๋ฌธ์ œ ์„ค๋ช…

@JensNordenbro ์˜ ์˜๊ฒฌ์— ๋”ฐ๋ฅด๋ฉด ์ด๊ฒƒ์ด Vs Code์—์„œ๋งŒ ์ž‘๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

.NET 5 ์ €์žฅ์†Œ ํ˜ธ์ŠคํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐธ์กฐํ•˜๋Š” WinUI 3.0 UI๋กœ .NET 5 ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ…œํ”Œ๋ฆฟ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด .NET 5.0์˜ ์ค‘๋ณต ์„ค์น˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WinUI ๋ฐ์Šคํฌํ†ฑ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ muxc.Window.ThisPtr์—์„œ hWnd๋กœ, ๊ธฐ๋ณธ Win32 ์ฐฝ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ด๋™ํ•ฉ๋‹ˆ๊นŒ?

์ด ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ค์–ด์„œ ๋ฐ์Šคํฌํ†ฑ์šฉ WinUI 3 Preview 1์šฉ ์ƒˆ 2020๋…„ 5์›” ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Windows์˜ ๊ธฐ๋ณธ UI ํ”Œ๋žซํผ์ด ๋˜๋Š” WinUI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ๋กœ Windows 10์˜ ์ผ๋ถ€๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ํ†ต์‹  ๋ถ€์กฑ์— ๋†€๋ž์Šต๋‹ˆ๊นŒ?

๋‚ด ๊ฒฐ๊ณผ Hello World ์•ฑ์˜ ํฌ๊ธฐ๋Š” ์•ฝ 120MB์˜€์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก , ๊ณต๊ฐ„์€ ์ €๋ ดํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ๋‚˜ ์ž์‹ ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ WinUI๋Š” ํฌํ•จ๋œ .NET 5 ์ž์ฒด๋งŒํผ ๋งŽ์€ ๊ณต๊ฐ„์„ ์†Œ๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. x64 ๋นŒ๋“œ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๋‹ค์ค‘ ํ”Œ๋žซํผ ํŒจํ‚ค์ง€์— x86์„ ํฌํ•จํ•˜๊ณ  ๊ทธ ํฌ๊ธฐ๋ฅผ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ฆฌ์‹ญ์‹œ์˜ค. ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฐฐํฌ์šฉ์œผ๋กœ ํŒจํ‚ค์ง•ํ•  300MB ์•ฑ์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WinUI 3๊ฐ€ .NET 5์˜ Windows ๋ฒ„์ „์— ํฌํ•จ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? .NET Core ๋ชจ๋“ˆํ™” ๋…ธ๋ ฅ์˜ ์ผ๋ถ€์ž…๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์–ด๋””์— ํ•ด๋‹นํ•ฉ๋‹ˆ๊นŒ? ์ •๋ง ๋ชจ๋“  ์•ฑ์˜ ํด๋”๊ฐ€ ์€๋ฐ€ํ•œ๊ฐ€์š”? ๊ณต์‹ Windows 10 ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ...?

์•„๋‹ˆ๋ฉด ๋ฏธ๋ž˜์— Windows 10์˜ ์ผ๋ถ€๊ฐ€ ๋ ๊นŒ์š”? WinUI๊ฐ€ ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋˜๊ณ  .NET 5๊ฐ€ ๋‚˜์ค‘์— Windows์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๋Œ€์‹  ๋น„๊ต์  ์ž‘์€ ์•ฑ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์ ์–ด๋„ Windows 10X์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ์ด๊ณ  ๋‚˜์ค‘์— Windows 10 non-X์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ Windows 10 SDK C#/WinRT ๋ธŒ๋ฆฌ์ง€ DLL์„ ์ œ์™ธํ•˜๋ฉด ์•ฑ ํฌ๊ธฐ๋Š” 1-5MB๋กœ ๊ธ‰๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ryandemopoulos ๋Š” Discord์—์„œ WinUI๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋  ๊ฒƒ์ด๋ฉฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด Store ๋˜๋Š” MSIX๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์€ ๋ชจ๋‘ ๋™์ผํ•œ ๋ณต์‚ฌ๋ณธ์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฒด ๋ฒ„์ „์˜ WinUI๋ฅผ ๋ณด์œ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

WinUI๋ฅผ Windows ์ž์ฒด์˜ ์ผ๋ถ€๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ WinUI๊ฐ€ OS์—์„œ ๋ถ„๋ฆฌ๋˜๋Š” ์ง€์ ์„ ๋ฌดํšจํ™”ํ•ฉ๋‹ˆ๋‹ค.

"์•ฑ์˜ ํฌ๊ธฐ๊ฐ€ ์•„๋‹Œ ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ"์ด ๊ด€์‹ฌ์‚ฌ์ž…๋‹ˆ๋‹ค. .NET 5๊ฐ€ ๋น„์Šทํ•˜๊ฒŒ ๋ฐฐํฌ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@lmcdougald .NET Core Installer ์—์„œ ๋ฌธ์ œ๋ฅผ ์—ด๊ณ  ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด .NET 5์—์„œ๋„ Framework Packaging์„ ์‚ฌ์šฉํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

@jonasnordlund WinRT ๋Ÿฐํƒ€์ž„ ๋ฐฐํฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ํ† ๋ก  #2500์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ฑฐ๊ธฐ์—์„œ ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

@marb2000 ์ด์Šˆ๋ฅผ ์—ด ์Šค๋Ÿฝ๋„ค์š” . ์ด๊ฒƒ์ด Windows 10X๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์•ฑ์— ํ•„์ˆ˜์ ์ธ ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ปดํŒŒ์ผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ์ง์ ‘ WinUI๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฉด UWP ํด๋ผ์ด์–ธํŠธ, ํŠนํžˆ LoB ์•ฑ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํฌํ•จ๋œ ๋ชจ๋“  .NET ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

  • ์ €์—๊ฒŒ ์ตœ์šฐ์„  ์ˆœ์œ„๋Š” ๋‹น์‹ ์ด Uno ํ”Œ๋žซํผ์„ ์œก์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ UWP๋ฅผ ๊ด€๋ จ์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ Uno๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด XF๋‚˜ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์— ํƒ€ํ˜‘ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (https://github.com/microsoft/microsoft-ui-xaml/issues/2024)
  • ViewModel์—์„œ ์‚ฌ์šฉํ•  ์ถ”์ƒ ํด๋ผ์ด์–ธํŠธ ์ธก ID ๊ด€๋ฆฌ API(https://github.com/microsoft/ProjectReunion/issues/31)
  • ์ „์ฒด ๋ฐ์ดํ„ฐ ์ฃผ์„ ์ง€์›, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐ UI ์ œ๋ชฉ, ๋ฌธ์ž์—ด ๊ธธ์ด, ํ•„์ˆ˜ ์†์„ฑ, ์ฝ๊ธฐ ์ „์šฉ ํ•„๋“œ, ์›Œํ„ฐ๋งˆํฌ ๋“ฑ ๋“ฑ(https://bit.ly/3gcMJ3a)
  • ๊ธฐ์กด RIA ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๋Œ€์•ˆ์ด ๋˜๋„๋ก OData๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: ์ง€์› ์†์„ฑ ์ƒ์„ฑ, ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„, ์ผ๋ฐ˜ ์œ ํ˜•, XML ๋ฌธ์„œ(https://github.com/OData/odata.net/issues/1746)
  • WPF์—์„œ ๋ˆ„๋ฝ๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ ๊ฐ€์ ธ์˜ค๊ธฐ
  • x:Bind ์—๋Š” ๋ฒ”์œ„ ๋˜๋Š” ์ค‘์ฒฉ ๋ฐ”์ธ๋”ฉ๊ณผ ๊ฐ™์€ Binding ๋ชจ๋“  ๊ธฐ๋Šฅ๋„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(https://github.com/microsoft/microsoft-ui-xaml/issues/2237).
  • ํ•ซ ๋ฆฌ์Šคํƒ€ํŠธ(https://github.com/microsoft/ProjectReunion/issues/44)
  • ๋‹จ์ˆœํ•œ Hello World ํ…œํ”Œ๋ฆฟ ์ด์ƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ, MVVM, ๋ผ์šฐํŒ…, x-plat ํ”„๋กœ์ ํŠธ(์˜ˆ: Uno-Platform) ๋“ฑ์„ ์ˆ˜์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, WTS์— ๋” ๋งŽ์€ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์‹ญ์‹œ์˜ค.
  • ๋„ํ‚น, ๊ฐ„๊ฒฉ ๋“ฑ๊ณผ ๊ฐ™์€ WinForms์™€ ๊ฐ™์€ XAML WYSIWYG ํŽธ์ง‘๊ธฐ ๋ ˆ์ด์•„์›ƒ ๊ธฐ๋Šฅ - ์ด๊ฒƒ์ด ์™„๋ฃŒ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! โค

ํŽธ์ง‘ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

WinUI ํŒ€์€ Uno ์ œํ’ˆ ํŒ€(๋น„ Microsoft), Xamarin Forms/MAUI ํŒ€ ๋ฐ React Native์™€ ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค๊ณผ ์ ๊ทน์ ์œผ๋กœ ํ˜‘๋ ฅํ•˜๋ฉฐ ๊ทธ๋“ค์˜ ์„ฑ๊ณต์ ์ธ ๋ฏธ๋ž˜๋ฅผ ๊ธฐ์›ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๋ฝ๋œ WPF ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ƒ์œ„ ๊ธฐ๋Šฅ์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? WPF์™€ WinUI ๊ฐ„์˜ ๊ฒฉ์ฐจ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋” ๋ณต์žกํ•œ ํ…œํ”Œ๋ฆฟ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. Window Template Studio ๋Š” ์ด๋Ÿฌํ•œ ์‚ฌ๋ช…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

WPF #719 @weitzhandler @marb2000์— ๋น„ํ•ด WinUI๊ฐ€ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์„ ๋ชจ์•„๋ณด๋ ค๊ณ  ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋” ๋ณต์žกํ•œ ํ…œํ”Œ๋ฆฟ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. Window Template Studio๋Š” ์ด๋Ÿฌํ•œ ์‚ฌ๋ช…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@marb2000 ์šฐ๋ฆฌ VSIX์— Window Template Studio๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ทธ ๋ฐ˜๋Œ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ผ๊นŒ์š”? ์•ž์œผ๋กœ ๋ชจ๋“  WinUI3(๋ฐ Project Reunion) ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ Window Template Studio๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋” ๋ณต์žกํ•œ ํ…œํ”Œ๋ฆฟ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. Window Template Studio๋Š” ์ด๋Ÿฌํ•œ ์‚ฌ๋ช…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@marb2000 ์šฐ๋ฆฌ VSIX์— Window Template Studio๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ทธ ๋ฐ˜๋Œ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ผ๊นŒ์š”? ์•ž์œผ๋กœ ๋ชจ๋“  WinUI3(๋ฐ Project Reunion) ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ Window Template Studio๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๐Ÿ‘€ @crutkas @sibille

C++ ๋ฐ ์ตœ์‹  ๋„๊ตฌ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋ฐฐ์šฐ๊ธฐ ์œ„ํ•ด C++ Builder(VCL/FMX) ๋ฐ Qt Creator/Design studio์™€ ํ•จ๊ป˜ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ WinUI๋Š” C++๋กœ ์ž‘์„ฑ๋œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ GUI์— ๋Œ€ํ•ด ์˜ค๋Š˜๋‚  ์ด๋ฏธ ์ด๋Ÿฌํ•œ ์ œํ’ˆ๊ณผ ์œ ์‚ฌํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ด€์‹ฌ์„ ๊ฐ–๋Š” ๊ฒƒ์€ .NET ๊ฐœ๋ฐœ ๊ฒฝํ—˜๊ณผ C++๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์œ ์Šค ์ผ€์ด์Šค์— ๋Œ€ํ•ด ์œ ์‚ฌํ•œ ๊ฒฝํ—˜์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ์—์„œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

C++ Builder ๋ฐ QtCreator๋Š” ์ด๋Ÿฌํ•œ ๊ฒฝํ—˜์„ ๋‹ฌ์„ฑํ•˜๋ฉฐ .NET ๊ฐœ๋ฐœ์ž๊ฐ€ C++/WinRT ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋ฉฐ์น ์„ ์†Œ๋น„ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์— ์ง๋ฉดํ–ˆ์„ ๋•Œ ์ง‘๊ณผ ๊ฐ™์€ ํŽธ์•ˆํ•จ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ™˜์˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™œ .NET ๊ฐœ๋ฐœ์ž์— ๋Œ€ํ•ด ์ด๊ฒƒ์„ ๋งŒ๋“ค๊นŒ์š”? C++ XAML ๊ฒฝํ—˜์€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. C++ ๊ฐœ๋ฐœ์ž๋“  .NET ๊ฐœ๋ฐœ์ž๋“  ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ, ์›น(Edge), ๋ชจ๋ฐ”์ผ ๋ฐ IoT์—์„œ ๋™์ผํ•œ XAML์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธธ์„ ์—ด๋ฉด ์ข‹์„ ๊ฑฐ๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

C#, Xaml ๋˜๋Š” ๋””์ž์ด๋„ˆ๊ฐ€ ์—†๋Š” C++ ํ”„๋กœ์ ํŠธ์—์„œ ์–ธ์ œ WinUI 3๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋˜ํ•œ WinUI 3์˜ C++ ์ฝ”์–ด ์˜คํ”ˆ ์†Œ์‹ฑ ๋‚ ์งœ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘: ์ฒซ ๋ฒˆ์งธ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์–ป์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. WinUI 3.0 Preview 1์— C++ WinUI 3 ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

.vsix ํ™•์žฅ์„ ์„ค์น˜ํ•œ ํ›„ "WinUI"๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ C# ๋˜๋Š” C++ ํ…œํ”Œ๋ฆฟ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์—ฌ ์ƒˆ WinUI 3.0 ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WinUI๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ข…์ข… PowerShell๋กœ ์ž‘์„ฑ๋˜๋Š” ์ผ์„  IT ์ง€์› ์ง์›์„ ์œ„ํ•œ ์ž‘์€ GUI ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Visual Studio Code์—์„œ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. C# ๊ธฐ๋ฐ˜ VSCode ๊ฐœ๋ฐœ ์˜ต์…˜๋„ ํ›Œ๋ฅญํ•œ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™„์ „ํ•œ Visual Studio๋Š” ์ด ๊ฒฝ์šฐ์— ๋‹ค์†Œ ๋ฌด๊ฒ๊ณ  ๋ณต์žกํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

ํ˜„์žฌ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ "XAML์šฉ Visual Studio ์‚ฌ์šฉ" ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ์งˆ๋ฌธ์€ ๊ทธ๊ฐ€ 5์›”์— ์งˆ๋ฌธํ•œ @mqudsi ์งˆ๋ฌธ์˜ ๋งฅ๋ฝ์— ์žˆ์ง€๋งŒ ์•„๋ฌด๋„ ์‘๋‹ตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

In a WinUI desktop application, how does one go from muxc.Window.ThisPtr to an hWnd to the native Win32 window?

์ด๊ฒƒ์€ ๋ฐ์Šคํฌํ†ฑ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋ฏ€๋กœ ICoreWindowInterop์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ new HandleRef(this, ThisPtr) ์™€ ๊ฐ™์€ ๋ฌด์ž‘์œ„ ์žฅ์‹์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 'this'๋Š” ์œ ํ˜• Microsoft.UI.Xaml.Window์ด์ง€๋งŒ ์ž˜๋ชป๋œ ์ฐฝ ํ•ธ๋“ค์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ๋ฒˆํ˜ธ๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์นจ๋‚ด ๊ทธ hwnd๋ฅผ ์–ป์œผ๋ฉด ๋” ๋งŽ์€ COM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐฝ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ ํ•˜์—ฌ ๋‚ด๊ฐ€ ์ง€๊ธˆ ๊ฒช๊ณ  ์žˆ๋Š” ๊ณ ํ†ต์„ ๋Š๋ผ์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•ด ๊ธฐ๋ณธ ์ฐฝ์— ๋Œ€ํ•œ hWnd๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉํ•œ ๋น ๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ๊ฒฝ๊ณ„์„ ์ด ์—†๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WindowStyle=None์— ํ•ด๋‹นํ•˜๋Š” WPF์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์†”๋ฃจ์…˜์ด ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค .

using var process = Process.GetCurrentProcess();
var hWnd = process.MainWindowHandle;

ํ˜„์žฌ๋กœ์„œ๋Š” WinUI๊ฐ€ ๋ฐ์Šคํฌํƒ‘ ํ”„๋กœ์„ธ์Šค์— ์žˆ์„ ๋•Œ hWnd๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ/๋ฌธ์„œํ™”ํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ œ๊ฐ€ ์‚ฌ์šฉํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ๋ˆˆ์„ ๋Œ๋ ธ์Šต๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํžˆ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

UWP์™€ ์œ ๋‹ˆ๋ฒ„์„ค Windows๋ผ๋Š” ์šฉ์–ด๋Š” ์—†์–ด์ ธ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์šฉ์–ด์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ถ€๋„๋Ÿฌ์›Œํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ถˆํ–‰ํ•œ ์ˆ˜ํ•˜๋ฌผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ WinUI(์œ ๋‹ˆ๋ฒ„์„ค Windows)๋ฅผ WinUI(Win64)๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ์Šคํฌํƒ‘ ๋˜๋Š” ์Šคํ† ์–ด ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

Win64๋Š” ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ฆ‰, Win32 API๋Š” 32๋น„ํŠธ๋งŒ ์ง€์›ํ•˜๊ณ  ๋ฐ˜๋Œ€๋กœ UWP๋Š” 64๋น„ํŠธ๋งŒ ์ง€์›ํ•˜๋ฉฐ ๋‘˜ ๋‹ค ๊ฑฐ์ง“์ž…๋‹ˆ๋‹ค.

Win32 ์ด๋ฆ„ ์ž์ฒด๋Š” ์ด๋ฏธ ๋งŽ์€ ์ดˆ๋ณด์ž๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์•…ํ™”์‹œํ‚ค๋Š” ๋ฐ Win64๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@VagueGit ๋‚ด๊ฐ€ ๋ฐฐ์šด ๊ฒƒ์€ ์˜ฌ๋ฐ”๋ฅธ ์ด๋ฆ„์„ ์„ ํƒํ•˜๊ณ  ์ด์•ผ๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋” ๋ณต์žกํ•œ ์ผ ์ค‘ ํ•˜๋‚˜๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ๋ณด๋‹ค ์šฐ๋ฆฌ(Microsoft)๊ฐ€ ๊ท€ํ•˜์˜ ์„ฑ๊ณต์„ ๋•๊ธฐ ์œ„ํ•ด ์˜ฌ๋ฐ”๋ฅธ ์ œํ’ˆ(๋ฐ ์Šคํ† ๋ฆฌ)์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. UWP๋Š” Win32๋กœ ์ž˜ ์•Œ๋ ค์ง„ ์šฉ์–ด์ด๋ฏ€๋กœ ๊ณ„์† ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค(๋งค์šฐ ๋‹จ์ˆœํ™”๋จ).

WinUI๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์žฅ์น˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ "์œ ํ˜•"์˜ ์•ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•ฑ์€ ์ž…๋ ฅ๊ณผ ํผ ํŒฉํ„ฐ๊ฐ€ ๋งŽ์€ ๋งŽ์€ ๊ธฐ๊ธฐ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ UWP๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. UWP๋Š” ์ด๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒจํ‚ค์ง• ๋ชจ๋ธ, ์ €์žฅ์†Œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋ธ, ๋ณด์•ˆ ์ปจํ…Œ์ด๋„ˆ ๋“ฑ๊ณผ ๊ฐ™์€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์•ฑ์€ ๋ฐ์Šคํฌํ†ฑ๋งŒ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ OS์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Win32 ๋˜๋Š” Desktop(Visual Studio์—์„œ WPF, WinForms, MFC, ์•ฑ์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

UWP ์•ฑ ์˜ WinUI ๋ฐ

@marb2000 ๋„ค์ด๋ฐ์ด ์–ด๋ ต

WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๋Š” UWP ์•ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Win32 API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ์Šคํฌํƒ‘๋งŒ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ ์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์–ด์šธ๋ฆฌ๋‚˜์š”?

@marb2000 ๋„ค์ด๋ฐ์ด ์–ด๋ ต

WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๋Š” UWP ์•ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Win32 API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ์Šคํฌํƒ‘๋งŒ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ ์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์–ด์šธ๋ฆฌ๋‚˜์š”?

์ •ํ™•ํžˆ ๋ˆ„๊ตฌ๋ฅผ ์œ„ํ•œ ์•ฑ์ธ๊ฐ€์š”?

์ผ๋ถ€๋Ÿฌ UWP ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์†Œ๋น„์ž๋กœ์„œ ์•ฑ์ด ์Šคํ† ์–ด์— ์—†์œผ๋ฉด ์•ฑ์„ ๋ณด๋Š” ๊ฒƒ์€ ๊ณ ์‚ฌํ•˜๊ณ  ๋งŒ์ง€์ง€๋„ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š” @shaheedmalik ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์—๊ฒŒ ๊ทธ๊ฒƒ์„ ๋งŒ์ง€๋ผ๊ณ  ์š”๊ตฌํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :-). ์šฐ๋ฆฌ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์•ฑ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. Win32 ๋ฐ UWP. ๋ช‡ ๋…„ ๋™์•ˆ ์Šคํ† ์–ด์— ์žˆ์—ˆ์ง€๋งŒ ์Šคํ† ์–ด์—๋Š” ๋ณด์ด์ง€ ์•Š๋Š” UWP ์•ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 30๋…„ ์ „์œผ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋Š” ํ™•๊ณ ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ ๊ฐ ๊ธฐ๋ฐ˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ UWP ์•ฑ์— ๋งŒ์กฑํ•˜์ง€๋งŒ ๋งค์žฅ ๊ฒฝํ—˜์— ๋งŒ์กฑํ•˜์ง€ ์•Š์•„ ์šฐ๋ฆฌ๋Š” ์ด ์•ฑ์„ ๋งค์žฅ ๋ฐ–์œผ๋กœ ์˜ฎ๊น๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” Win64 ๋น„์ฆˆ๋‹ˆ์Šค ์•ฑ์— ๋Œ€ํ•œ ์‹œ์žฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ ๊ฐ์ด ๋น„์šฉ์„ ์ง€๋ถˆํ•  Win64 ์•ฑ์„ ์ œ๊ณตํ•œ ์†Œ์ˆ˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐœ๋ฐœ์ž ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์œ ๋‹ˆ๋ฒ„์„ค Windows/๋‹ค์ค‘ ํ”Œ๋žซํผ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋Š” ์ด ์Šค๋ ˆ๋“œ์— ๋ช‡ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋งค์šฐ ๋“œ๋ญ…๋‹ˆ๋‹ค. ๋‚ด ๊ฒฝํ—˜์— ๋น„์ถ”์–ด ๋ณผ ๋•Œ ๋Œ€๋ถ€๋ถ„์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐœ๋ฐœ์ž๋Š” ํŠน์ • ํผ ํŒฉํ„ฐ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

UWP์— ๋ง‰๋Œ€ํ•œ ํˆฌ์ž๋ฅผ ํ•˜๊ณ  UWP์˜ ๋น„์ฆˆ๋‹ˆ์Šค ์„ฑ๊ณต์„ ๋‹ฌ์„ฑํ•œ ๊ฐœ๋ฐœ ํšŒ์‚ฌ์˜ ๊ด€์ ์—์„œ ๋งํ•˜์ž๋ฉด WinUI(๋ฐ์Šคํฌํ†ฑ) ๋ฐ WinUI(์Šคํ† ์–ด)์šฉ ํ…œํ”Œ๋ฆฟ์ด ์•„๋‹๊นŒ์š”? UWP๊ฐ€ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์—ด์•…ํ•˜๊ฒŒ ์—ฌ๊ฒจ์ง€๋Š”์ง€์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์–ป์œผ๋ ค๋ฉด ๊ธฐ์ˆ  ๋ฏธ๋””์–ด๋ฅผ ํŒ”๋กœ์šฐํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@VagueGit
"WinUI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๋Š” UWP ์•ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Win32 API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ์Šคํฌํ†ฑ๋งŒ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  ์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ ํ•ฉํ•ฉ๋‹ˆ๊นŒ?"

UWP๋ฅผ WinUI 3์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ  ์Šคํ† ์–ด ์™ธ๋ถ€์— ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ˆœ์ง„ํ•œ ์งˆ๋ฌธ: MSIX์˜ ์‚ฌ์ด๋“œ๋กœ๋“œ ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ์Šคํ† ์–ด ์™ธ์— UWP ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@VagueGit
"๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” Win64 ๋น„์ฆˆ๋‹ˆ์Šค ์•ฑ์„ ์œ„ํ•œ ์‹œ์žฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค."

ํ•œ ๊ฐ€์ง€ ์งˆ๋ฌธ, Win64๋Š” ๋งŽ์€ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ฑ์€ x64์šฉ์œผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์—๊ฒŒ Win64๋Š” ์–ด๋–ค ์˜๋ฏธ์ธ๊ฐ€์š”?

@marb2000 UWP๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋ณด๊ณ ์— ๋Œ€ํ•œ ์ง€์›์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ธŒ๋žœ๋“œ ๋ณ€๊ฒฝ์ด ๋ณด๊ณ ์„œ ์ž‘์„ฑ์ž์™€ ๊ฐ™์€ ํƒ€์‚ฌ ๋„๊ตฌ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์ด๋“œ ๋กœ๋”ฉ์„ โ€‹โ€‹๊ฐ€์ง€๊ณ  ๋†€์•˜์ง€๋งŒ ์‚ฌ์ด๋“œ ๋กœ๋”ฉ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— 20H1๊นŒ์ง€๋Š” ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” Win64๊ฐ€ Windows์—์„œ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ๊ธธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Micro$๋Š” ๊ณผ๊ฑฐ์— Win32๋ฅผ ๋ ˆ๊ฑฐ์‹œ๋กœ ๋‚ด์„ธ์šฐ๋ ค ์‹œ๋„ํ–ˆ์ง€๋งŒ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์œผ๋ฉฐ ํ˜„์žฌ๋Š” ๊ทธ ์ž๋ฆฌ๋ฅผ ๋˜์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ถ๊ทน์ ์œผ๋กœ Win32๋Š” ์šฐ๋ฆฌ์˜ ํŒ๋‹จ์— ๋”ฐ๋ผ ์‚ฌ๋ผ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ €๋Š” Win32 ๊ฐœ๋ฐœ 30๋…„ ํ›„์— ๋งํ•ฉ๋‹ˆ๋‹ค). ์šฐ๋ฆฌ๋Š” ๊ธฐ์—…์ด ๊ตฌ๋งคํ•  ๋น„์ฆˆ๋‹ˆ์Šค ์•ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด UWP์˜ ํ•œ๊ณ„๋ฅผ ๋Œ€๋ถ€๋ถ„ ๊ทน๋ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” UWP์˜ ๋˜ ๋‹ค๋ฅธ ๋ฐ˜๋ณต์ด ๋ธŒ๋žœ๋“œ ๋ณ€๊ฒฝ ์—†์ด ์ œํ•œ์ ์ธ ๊ด€์‹ฌ์„ ๋ฐ›๊ฒŒ ๋  ๊ฒƒ์„ ์šฐ๋ คํ•ฉ๋‹ˆ๋‹ค.

@marb2000 ์˜ ํ˜ผ๋ž€์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด Win64๋ผ๋Š” ์šฉ์–ด๋Š” ์ด๋ฏธ (์ž˜๋ชป) ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋„ ์•ž์„œ ์ง€์ ํ•œ ๋ฐ” ์žˆ์Šต๋‹ˆ๋‹ค.

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

@sylveon UWP๋Š” ๋ชจ๋‘๊ฐ€ ์‹คํŒจ๋กœ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌ๋ธŒ๋žœ๋”ฉ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์œผ๋กœ WinUI(Deskop) ๋˜๋Š” WinUI(Store)์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

WinUI(์Šคํ† ์–ด)๋Š” ์Šคํ† ์–ด์—์„œ Win32 ์•ฑ์„ ๋ฐฐ์†กํ•˜๊ฑฐ๋‚˜ ์Šคํ† ์–ด ์™ธ๋ถ€์—์„œ UWP ์•ฑ์„ ๋ฐฐ์†กํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ WinUI(๋ฐ์Šคํฌํ†ฑ)๋Š” ์ข‹์Šต๋‹ˆ๋‹ค.

@sylveon WinUI(Store)๋Š” ์ƒ์ ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์ ์„ ํ†ตํ•ด ๋ฆด๋ฆฌ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์„ธํŠธ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ดˆ๋ณด์ž๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•  ์ •๋„๋กœ ๋‚˜์˜๋‹ค.

์ด๊ฒƒ์€ ์ด ์Šค๋ ˆ๋“œ์˜ ํŠน์ • ์‚ฌ๋žŒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ์Šคํฌํƒ‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž/ํšŒ์‚ฌ ์†Œ์œ ์ž๋กœ์„œ ์ œ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ž…๋‹ˆ๋‹ค.

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

์—ฌ๊ธฐ์—์„œ MAUI์™€ ๊ฐ™์€ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํฅ๋ถ„ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜๋ฉด ์ฆ‰์‹œ ์‹ค๋งํ•˜๋Š” ๋งŽ์€ ๊ฐœ๋ฐœ์ž(์ € ํฌํ•จ)๊ฐ€ ์žˆ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ธŒ๋žœ๋”ฉ์€ "์ด๋ด, ์šฐ๋ฆฌ๋Š” xyz์—์„œ ๋‹น์‹ ์„ ์ฐจ๋‹จํ•œ ๊ฒƒ๊ณผ๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์—์„œ ์‹œ์ž‘ํ•˜๋Š” ์ด ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค"๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณด๊ธฐ๋ฅผ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ฒช์—ˆ๋˜ ์–ด๋ ค์›€์„ ์ƒ์‡„ํ•˜๋Š” ๋ณ€๊ฒฝ๋œ ๊ธฐ๋Šฅ์˜ ๊ฑฐ๋Œ€ํ•œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ์€ ๋ชจ๋“  ์ œํ’ˆ์ด๋‚˜ ๋ธŒ๋žœ๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ฐœ์ „ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ LTS๋ฅผ ์•”์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์‹ญ ๋…„ ๋™์•ˆ ์‚ฌ์šฉ๋œ ๋ธŒ๋žœ๋“œ์™€ ์ด๋ฆ„์—์„œ ํŽธ์•ˆํ•จ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„ ๋ณ€๊ฒฝ์ด ๋•Œ๋•Œ๋กœ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํฌ๊ธฐ๋ฅผ ์ƒ๊ธฐ์‹œํ‚ค๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค(Silverlight). ๋ช‡ ๋…„ ๋™์•ˆ ๋ฌธ์ œ์— ์‹œ๋‹ฌ๋ ธ์ง€๋งŒ ๊ฒฐ๊ตญ ์‚ฌ๋ž‘๋ฐ›๊ณ  ์กด๊ฒฝ๋ฐ›๋Š” ๋ธŒ๋žœ๋“œ๊ฐ€ ๋œ ์ž๋™์ฐจ ๋ชจ๋ธ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ๊ฒฝํ—˜์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋”๋ผ๋„ ์นœ์ˆ™ํ•จ๊ณผ ๊ด€๋ จํ•˜์—ฌ ํ•  ๋ง์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ํ•œ ์ •๋ง ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ ์–ด๋„ ๋‘ ๋ช…์˜ ์ฒญ์ค‘์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ๋ฐ ์ตœ์ข… ์ œํ’ˆ ์‚ฌ์šฉ์ž. ๊ฐœ๋ฐœ์ž/๋น„์ฆˆ๋‹ˆ์Šค ์†Œ์œ ์ž๋กœ์„œ, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•œ ๊ณ ๊ฐ์ด ์žˆ๊ณ  ๊ณ ๊ฐ์ด ๊ธฐ๋ณธ ๊ธฐ์ˆ  ์ด๋ฆ„์œผ๋กœ ์ธํ•ด ํ”ผํ•ด๋ฅผ ์ž…์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ์ด๋ฆ„์œผ๋กœ ํ‘œ์‹œ๋œ ์ œํ’ˆ์ด ์„ฑ์ˆ™ํ•ด์กŒ์œผ๋ฉฐ ํ•ด๋‹น ์ œํ’ˆ์—์„œ ๊ณ ๊ฐ์ด ์šฐ๋ คํ•˜๋Š” ์‚ฌํ•ญ์— ๋Œ€ํ•ด ํ™•์‹ ์„ ์‹ฌ์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ œ ์ผ์ž…๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ๋‚ด๊ฐ€ "WinUI ๋˜๋Š” MAUI๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ•˜๊ณ  ๊ทธ๋“ค์€ ์ด๋ฏธ ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœํ•œ WPF ๋˜๋Š” UWP ๋˜๋Š” Xamarin ์ œํ’ˆ์„ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•˜๋ฉด ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜์‘์€ "์˜ค ์ข‹์•„, ์ด์ œ ์šฐ๋ฆฌ ์•ฑ 2,3 ๋˜๋Š” 4๊ฐœ์˜ ๋‹ค๋ฅธ ๊ธฐ์ˆ ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค." ์—ฌ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ๊ทธ๋“ค์„ ํŒ๋งคํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ๋‹˜๋“ค์ด ๋‹ค ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ๋‘์‹œ๋“  ๋ฐ”๊พธ์‹œ๋“  ํ‘ธ์‹œ๋ฐฑ์„ ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ (์ €์—๊ฒŒ) ์ค‘์š”ํ•œ ๊ฒƒ์€ LTS๊ฐ€ ์žˆ๋Š” ๋งค๋ ฅ์ ์ด๊ณ  ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œํ’ˆ์ด ๋งˆ๊ฐ ๊ธฐํ•œ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ํฅ๋ถ„ํ•˜๊ณ  ์ œํ’ˆ์ด ์ถœ์‹œ๋˜๋ฉด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ชฉ๋ก์„ ์ฝ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 2016๋…„๋ถ€ํ„ฐ NetCore/Net5(์ด๋ฆ„ ๋ณ€๊ฒฝ LOL)์— ๋Œ€ํ•ด ์ด ์ ์ด ๋งˆ์Œ์— ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. (BTW, ๊ณ ๊ฐ์—๊ฒŒ NetCore๋กœ ์ „ํ™˜ํ•˜๋„๋ก ์„ค๋“ํ•œ ํ›„ 1๋…„ ๋™์•ˆ .Net5๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ๋ชฉํ‘œ๋กœ ์‚ผ์„ ๊ณ„ํš์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ๋„ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค!)

์ง€๊ธˆ์€ XAML ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์Šคํฌํ†ฑ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ณ  UWP/WinUI๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ Œ๋”๋ง ์„ฑ๋Šฅ(UWP ์ƒŒ๋“œ๋ฐ•์Šค ์—†์ด)์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์‹œ์ ์œผ๋กœ ๋นจ๋ฆฌ ๊ฐ€๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ด์œ ๋กœ ๊ทธ๋ฆฌ๊ณ  9์›” ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๊ฐ€ ๋–จ์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ์•„๋ฐœ๋กœ๋‹ˆ์•„๋ฅผ ์‹œํ—˜ ์šด์ „ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. SkiaSharp๋ฅผ ํ†ตํ•œ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์— ๋Œ€ํ•ด ๋“ค์œผ๋ฉด์„œ WPF ์œ ์‚ฌ์ ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

UI ๊ฐœ๋ฐœ ์˜ต์…˜์ด ์•ˆ์ •ํ™”๋˜๋ฉด ๋ช‡ ๋…„ ์•ˆ์— ํฅ๋ฏธ์ง„์ง„ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ๋ถ€์กฑ์— ๋Œ€ํ•œ ์ œ ์ƒ๊ฐ์€ ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹  ๋ชจ๋‘์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ xaml์€ Micro$์—๊ฒŒ ์žฌ์•™์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ ์••๋„์ ์œผ๋กœ WinForms์— ๋จธ๋ฌผ๋ €๊ฑฐ๋‚˜ ์™„์ „ํžˆ ์›น ๊ฐœ๋ฐœ์— ๋›ฐ์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. UWP ์ดํ›„ ๊ฐœ๋ฐœ์ž์˜ ์ดํƒˆ์ด ์•…ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

xaml ๊ธฐ์ˆ ์ด ์ง€์† ๊ฐ€๋Šฅํ•˜๋ ค๋ฉด Micro$๊ฐ€ ์˜จ๋ณด๋”ฉ์— ์‹คํŒจํ•œ ์ˆ˜๋ฐฑ๋งŒ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๋ฅผ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐœ๋ฐœ์ž, ๋„๊ตฌ ๊ณต๊ธ‰์—…์ฒด ๋ฐ ๊ธฐ์ˆ  ๋ฏธ๋””์–ด์—๊ฒŒ UWP๋Š” ๋ง‰๋‹ค๋ฅธ ๊ณจ๋ชฉ์ž…๋‹ˆ๋‹ค. UWP์˜ ๋˜ ๋‹ค๋ฅธ ๋ฐ˜๋ณต์€ ๊ทธ๋“ค์„ ์ด๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@VagueGit ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด๋ฆ„์ด ๋ฐ”๋€ ์ œํ’ˆ์„ ๋™์ผํ•˜๊ฒŒ ์•Œ๊ณ  ์‹ถ์–ดํ•  ๋งŒํผ ์—ด์‹ฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ MAUI๋ฅผ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ Xamarin Forms๋กœ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๊ทธ๋“ค์€ MAUI๊ฐ€ ๋„์šฉ๋œ ์ด๋ฆ„์ด์—ˆ๋‹ค๊ณ ๊นŒ์ง€ ๋งํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„ ๋ณ€๊ฒฝ์œผ๋กœ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋™๊ธฐ๋ฅผ ์ค„ ์ˆ˜๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ๊ธฐ๋Šฅ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? UWP๊ฐ€ ์—ฌ๋Ÿฌ Windows๋ฅผ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ์™„์ „ํ•œ ์‹ ๋ขฐ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด ๋ชจ๋‘ UWP๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  ์Šคํ† ์–ด ์•ฑ์šฉ ์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ •๋ง๋กœ ๋‚˜๋ฅผ ํฅ๋ถ„ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ํฐ ์†Œ๋ฆฌ๋กœ ๊ฟˆ๊พธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ํŠน์ง•!!

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

๋”ฐ๋ผ์„œ UWP ๊ฒฝ๋กœ๋ฅผ ๊ณ„์† ๋”ฐ๋ผ๊ฐ€๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์€ UWP Store ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒŒ๋“œ๋ฐ•์Šค ๋ฐ ์™„์ „ํ•œ ์‹ ๋ขฐ๊ฐ€ ์•„๋‹Œ 64๋น„ํŠธ ๋ฐ์Šคํฌํ†ฑ์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ... ๊ธ€์Ž„ UWP๊ฐ€ ์•„๋‹Œ๊ฐ€์š”?

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

๊ฐœ๋ฐœ ์‹œ์žฅ์€ UWP์˜ ๊ฐœ๋ฐœ์„ ์ฃผ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒŒ๋“œ๋ฐ•์Šค ๋ฐ ์™„์ „ํ•œ ์‹ ๋ขฐ๊ฐ€ ์•„๋‹Œ 64๋น„ํŠธ ๋ฐ์Šคํฌํƒ‘์€ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๊ทธ ์ด์ƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹ค๋ฅธ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ UWP๋ผ๊ณ  ํ•˜๋ฉด UWP๋ฅผ ์‚ญ์ œํ•œ ์‚ฌ๋žŒ๋“ค์ด ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@VagueGit UWP๋กœ ์„ฑ๊ณต

UWP์˜ ์ด๋ฆ„์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ์—”์ง„์— "UWP is"๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Bing์ด๋‚˜ Google์ด ์ œ๊ณตํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ž๋™ ์ œ์•ˆ์€ "UWP is dead"์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” @marb2000 ์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ผ๋Š” ๋ง๊ณผ ํ•จ๊ป˜...

์˜ค๋Š˜๋‚  ๋ฐ์Šคํฌํ†ฑ ํ”„๋กœ์ ํŠธ์˜ ์—ฌ๋Ÿฌ ์ธก๋ฉด์—์„œ "UWP"๋กœ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. UI ์Šคํƒ(์ผ๋ช… WinUI3)
  2. MSIX ํŒจํ‚ค์ง•
  3. MRT ๋ฆฌ์†Œ์Šค

CoreApplication์ด ํ•ด์ œ๋˜๋ฉด UWP์™€ ๋ฐ์Šคํฌํ†ฑ์˜ ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ์„ ํƒํ•˜๋Š” ์ƒŒ๋“œ๋ฐ•์Šค ๋ชจ๋ธ๊ณผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜๋ฟ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ด๋ฅผ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๋งˆ๋ฒ•์‚ฌ์™€ ๊ฐ™์€ ๊ฒฝํ—˜์„ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

@JeanRoca ๋Š” ์ด ์ž‘์—…์„ ์ฃผ๋„ํ•˜๋Š” PM์ด๋ฉฐ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” WinUI ๋ฐ์Šคํฌํƒ‘ ํ…œํ”Œ๋ฆฟ์˜ ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. Win32๋ณด๋‹ค ์ ์ ˆํ•˜๊ณ  ๋ฏธ๋ž˜ ์ง€ํ–ฅ์ ์ž…๋‹ˆ๋‹ค. Win32๊ฐ€ 32๋น„ํŠธ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ œ์•ˆํ•œ ๋ฐ˜๋ฉด ์‹œ์ž‘ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. WinUI Desktop์€ ๋ฏธ๋””์–ด์™€ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ์ฃผ๋ชฉ์„ ๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

UWP ์•ฑ์ด ์Šคํ† ์–ด ์™ธ๋ถ€์—์„œ ์ถœ์‹œ๋˜๋ฉด ํŒจํ‚ค์ง€๋Š” .appinstaller์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์•ฑ์„ Win UI Desktop์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ํŒจํ‚ค์ง€๊ฐ€ appinstaller์—์„œ msix๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

์•ฑ ํŒจํ‚ค์ง€ ๋‚ด์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋ฒ„์ „์„ ์ ์ ˆํ•˜๊ฒŒ ๋ฒ”ํ”„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด Windows๋Š” ์ด๊ฒƒ์ด ๋™์ผํ•œ ์•ฑ์˜ ์ƒˆ ๋ฒ„์ „์ž„์„ ์ธ์‹ํ•˜๊ณ  ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์•ฑ์œผ๋กœ ์„ค์น˜ํ•  ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋‚ด ์ดํ•ด์— ๋”ฐ๋ฅด๋ฉด WinUI 3.0์€ .NET Framework <= 4.8์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ WinUI์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ .NET ๋„ค์ดํ‹ฐ๋ธŒ ๋˜๋Š” .NET 3.1/5+(๋˜๋Š” ๋‹ค๋ฅธ ๋ฐ”์ธ๋”ฉ ์ง‘ํ•ฉ)์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

.NET 5(๋˜๋Š” ์ด ์‹œ์ ์—์„œ 6์œผ๋กœ ์ถ”์ธก๋จ)์šฉ ํ”„๋ ˆ์ž„์›Œํฌ ํŒจํ‚ค์ง•์— ๋Œ€ํ•ด ์ถ”๊ฐ€๋กœ ์ง„ํ–‰/์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ๋Š”๋ฐ ์‘๋‹ต์ด ์—†์Šต๋‹ˆ๋‹ค. .NET 5 ์ธ์•ฑ ๋ฒˆ๋“ค๋ง์€ ์‹œ์ž‘์ด ์•„๋‹™๋‹ˆ๋‹ค.

@stevenbrix

CoreApplication์ด ํ•ด์ œ๋˜๋ฉด UWP์™€ ๋ฐ์Šคํฌํ†ฑ์˜ ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ์„ ํƒํ•˜๋Š” ์ƒŒ๋“œ๋ฐ•์Šค ๋ชจ๋ธ๊ณผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜๋ฟ์ž…๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๋˜ ๋‹ค๋ฅธ ํฐ ์ฐจ์ด์ ์€ .NET ๊ฐœ๋ฐœ์ž๊ฐ€ DirectX์™€ ๊ฐ™์€ API์— ๋Œ€ํ•ด C++๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํŒ€์˜ ํŒ€์€ COM ๊ธฐ๋ฐ˜์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  UWP์™€ ํ˜ธํ™˜๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋ถ„๋ช…ํžˆ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ๊ฒฝํ—˜๊ณผ ๊ฐ™์€ ๋ฉ‹์ง„ ๋ฉ”๋ชจ์žฅ์œผ๋กœ MIDL์„ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•˜๊ณ  ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ์ƒ์‚ฐ์„ฑ ์‹œ๋Œ€๋กœ ๋˜๋Œ์•„๊ฐ€๋Š” ๊ณผ์ •์—์„œ ๋ถ„๋ช…ํžˆ Windows ํŒ€์€ C++ ์›Œํฌํ”Œ๋กœ์— NET๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹  ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜๊ณผ ๊ฐ™์€ ATL์„ ํฌ๊ธฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. C++/CX๋Š” C++ Builder์— ๋„ˆ๋ฌด ๊ทผ์ ‘ํ•ด ์žˆ์–ด์„œ ISO๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ฃฝ์—ฌ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šด์ด ์ข‹๊ฒŒ๋„ C++23์—์„œ, ๊ทธ๋ฆฌ๊ณ  2025๋…„์—๋Š” VS์—์„œ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ž˜๋ชป์„ ์—†์• ๊ธฐ ์œ„ํ•œ ์ ์ ˆํ•œ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ๋งˆ๋ จ๋˜์ง€ ์•Š๋Š” ํ•œ ๊ทธ๋•Œ๊นŒ์ง€ UWP์— ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ์‚ฌ๋žŒ์ด ์žˆ์„์ง€๋Š” ์˜๋ฌธ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•  ํŒ€์— ๊ด€ํ•œ GitHub ๋ฌธ์ œ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์€ ํฅ๋ฏธ๋ฅผ ์žƒ๋Š” ๋งค์šฐ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ด€์‹ฌ์„ ๋ณด์ด๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

DirectX API๋Š” WinRT ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์กด ์†Œ๋น„์ž์—๊ฒŒ ์ค‘์š”ํ•œ API ์ค‘๋‹จ์ด ๋  ์ˆ˜ ์žˆ๊ณ  ์ผ์–ด๋‚  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๋‹ค์ด๋ ‰ํŠธ X์— ํ•ด๋‹นํ•˜๋Š” ๋ž˜ํผ๊ฐ€์žˆ๋‹ค TerraFX ๊ฒฐํ•ฉ ๋˜๋Š” 1 : ์›์‹œ 1 VORTICE ๋” C # ์Šคํƒ€์ผ์˜ API ๋ž˜ํผ์ž…๋‹ˆ๋‹ค.

CX์˜ ๊ฒฝ์šฐ ์‚ฌ๋ผ์ ธ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ๊ด€๋ จ ์–ธ์–ด ํ™•์žฅ์€ ๋‚˜์˜๊ณ  ๋ˆˆ์‚ด์„ ์ฐŒํ‘ธ๋ฆฌ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ด์‹์„ฑ์„ ํฌ๊ฒŒ ์ €ํ•ดํ•˜๊ณ  C++ ํ‘œ์ค€ ์ง€์› ์ธก๋ฉด์—์„œ ๋’ค์ฒ˜์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ์™„์ „ํ•œ ์ˆ˜์ง ํ†ตํ•ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์•ˆ์ธ WRL์€ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต๊ณ  ์ง€๋‚˜์น˜๊ฒŒ ์žฅํ™ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค(DX ๋ถ€์„œ ํฌํ•จ)์ด WinRT API๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๋†€๋ผ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

C++/WinRT๋Š” ํ›จ์”ฌ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. IDL์„ ๋‹ค์‹œ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค๋Š” ์ ์€ ์œ ๊ฐ์ž…๋‹ˆ๋‹ค(ํ˜„์žฌ๋Š” ํ•„์š”์•…). C++ ํŒ€์€ ์ด์ „๋ณด๋‹ค ํ‘œ์ค€ ์ง€์›์—์„œ ํ›จ์”ฌ ๋” ๋‚˜์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ C++23์ด ์™„์„ฑ๋˜๊ธฐ ์ „์— ์‹ค์ œ๋กœ ๋ฉ”ํƒ€ํด๋ž˜์Šค๋ฅผ ์–ป๋Š”๋‹ค๋ฉด ๋†€๋ผ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ์ž UX๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ๊ฐœ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@์‹ค๋ฒ ์˜จ

Windows ๊ฐœ๋ฐœ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ƒ์‚ฐ์„ฑ ์ €ํ•˜๋ฅผ ์ •๋‹นํ™”ํ•˜๋ฉด์„œ Redmond์—์„œ ๋‚˜์˜ค๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋ฌด์‹œํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ผ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

CX์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค... C++ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋…์  ์–ธ์–ด ํ™•์žฅ์„ ์ข‹์•„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์•ฑ ํŒจํ‚ค์ง€ ๋‚ด์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋ฒ„์ „์„ ์ ์ ˆํ•˜๊ฒŒ ๋ฒ”ํ”„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ Windows๋Š” ์ด๊ฒƒ์ด ๋™์ผํ•œ ์•ฑ์˜ ์ƒˆ ๋ฒ„์ „์ž„์„ ์ธ์‹ํ•˜๊ณ  ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ• ๊นŒ์š”, ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์•ฑ์œผ๋กœ ์„ค์น˜ํ• ๊นŒ์š”?

@VagueGit , ์ด๊ฒƒ์€ ํ›Œ๋ฅญํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ UWP์™€ ๋ฐ์Šคํฌํ†ฑ ์•ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ธฐ์ˆ ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋‹ต์ด ์˜ˆ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ์ตœ์‹  SDK์—์„œ๋Š” UWP ์•ฑ์—๋„ .msix ํ™•์žฅ์ž๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(ํ‹€๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ธ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”). ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๊ฒƒ์„ ํ˜„์ง€์—์„œ ์‹œ๋„ํ•˜๊ณ  ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๊นŒ? ์ฐธ๊ณ ๋กœ @adambraden .

.NET 5(๋˜๋Š” ์ด ์‹œ์ ์—์„œ 6์œผ๋กœ ์ถ”์ธก๋จ)์šฉ ํ”„๋ ˆ์ž„์›Œํฌ ํŒจํ‚ค์ง•์— ๋Œ€ํ•ด ์ถ”๊ฐ€๋กœ ์ง„ํ–‰/์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ๋Š”๋ฐ ์‘๋‹ต์ด ์—†์Šต๋‹ˆ๋‹ค. .NET 5 ์ธ์•ฑ ๋ฒˆ๋“ค๋ง์€ ์‹œ์ž‘์ด ์•„๋‹™๋‹ˆ๋‹ค.

@lmcdougald ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ๋ง์”€ํ•˜์‹œ๋Š”์ง€ ์•Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(ํ•˜์ง€๋งŒ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค). ํ•˜๋‚˜๊ฐ€ ์žˆ์ง€๋งŒ .net6 ์‹œ๊ฐ„๋Œ€์— ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ๊ฒฝํ—˜๊ณผ ๊ฐ™์€ ๋ฉ‹์ง„ ๋ฉ”๋ชจ์žฅ์œผ๋กœ MIDL์„ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•˜๊ณ  ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ์ƒ์‚ฐ์„ฑ ์‹œ๋Œ€๋กœ ๋˜๋Œ์•„๊ฐ€๋Š” ๊ณผ์ •์—์„œ ๋ถ„๋ช…ํžˆ Windows ํŒ€์€ C++ ์›Œํฌํ”Œ๋กœ์— NET๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹  ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜๊ณผ ๊ฐ™์€ ATL์„ ํฌ๊ธฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. C++/CX๋Š” C++ Builder์— ๋„ˆ๋ฌด ๊ทผ์ ‘ํ•ด ์žˆ์–ด์„œ ISO๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ฃฝ์—ฌ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šด์ด ์ข‹๊ฒŒ๋„ C++23์—์„œ, ๊ทธ๋ฆฌ๊ณ  2025๋…„์—๋Š” VS์—์„œ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•  ํŒ€์— ๊ด€ํ•œ GitHub ๋ฌธ์ œ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์€ ํฅ๋ฏธ๋ฅผ ์žƒ๋Š” ๋งค์šฐ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ด€์‹ฌ์„ ๋ณด์ด๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

@pjmlp ๋‚˜๋Š” ๋‹น์‹ ์˜ ์ •์ง๊ณผ ์—ด์ •์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ˜„์žฌ C++ ๊ฒฝํ—˜์ด ์ˆ˜์ค€ ์ดํ•˜๋ผ๋Š” ๋ฐ ๋” ๋™์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” C++ ๊ฒฝํ—˜์„ .NET๊ณผ ๋” ๋น„์Šทํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์ผ์„ ํ–ˆ์ง€๋งŒ @sylveon์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” C++๋ฅผ ํ›Œ๋ฅญํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด๊ณ  ์‹ถ๋‹ค๋ฉด C++ ํ‘œ์ค€์„ ์ถ”์ง„ํ•˜๋Š” ๋ฐ ์Ÿ์•„ ๋ถ€์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”ํƒ€ ํด๋ž˜์Šค๊ฐ€ ํƒˆ์ถœ๊ตฌ๋ผ๋Š” ๊ฒƒ์€ ๋ถˆํ–‰ํ•œ ์ผ์ด๋ฉฐ, ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์— ๋™์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์— ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ๋ฐฉ๋ฒ•์„ ๋…ผ์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. "์ด๊ฒƒ์ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด๋ผ๋Š” ๊ฒƒ์„ ๋ชจ๋‘๊ฐ€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค."๋กœ ๋งŒ์กฑํ•˜๋ฉฐ 1๋…„ ์ •๋„ ๋ถ€ํ’€๋ ค์ง„ ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@stevenbrix ๋ฐ @VagueGit - ์—ฌ์ „ํžˆ msix ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด appinstaller ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. appinstaller ํŒŒ์ผ์€ ํŒจํ‚ค์ง€์— URI๋ฅผ ์ œ๊ณตํ•˜๋Š” json ํŒŒ์ผ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์–ธ๊ธ‰ํ–ˆ์œผ๋ฏ€๋กœ ๋‚ด๋ถ€ ์œ„์น˜์— ๋งž๊ฒŒ appinstaller uri๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์•ก์„ธ์Šค์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ CDN์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ ๊ด€๋ จํ•˜์—ฌ - ํŒจํ‚ค์ง€ ID๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ ํŒจํ‚ค์ง€ ์•ฑ์˜ ๊ฒฝ์šฐ ์˜ˆ, ์ƒˆ ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋ฉด ๊ธฐ์กด ์•ฑ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@stevenbrix @VagueGit ํ˜„์žฌ ๋งˆ๋ฒ•์‚ฌ์— ๋Œ€ํ•œ ๊ฒฝํ—˜๊ณผ ๊ฐ™์€ ์ •๋ณด๋กœ ๋‹ต์žฅ์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ์—ญํ• ์—์„œ ์•„์ง ๋งค์šฐ ์‹ ์ธ์ด๋ฏ€๋กœ ๋‚ด๊ฐ€ ๋งํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์†Œ๊ธˆ ํ•œ ์•Œ๋กœ ๋ฐ›์•„๋“ค์ด์‹ญ์‹œ์˜ค. ์ฆ‰, ์šฐ๋ฆฌ ํŒ€์€ ํ˜„์žฌ Windows Template Studio ์—์„œ ๋…ธ๋ ฅ์„ ์ฃผ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ๋งˆ๋ฒ•์‚ฌ์˜ ๊ธฐ์กด ํ…œํ”Œ๋ฆฟ์—์„œ ์›ํ•˜๋Š” ํŽ˜์ด์ง€ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ƒˆ WPF ๋˜๋Š” UWP ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

CX์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค... C++ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋…์  ์–ธ์–ด ํ™•์žฅ์„ ์ข‹์•„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ clang, GCC, Intel์—์„œ ๊ทธ๋“ค์„ ์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๋‹ค. xlCC, PGI, CUDA, C++ Builder ๋ฐ ์ž„๋ฒ ๋””๋“œ ํ”Œ๋žซํผ์˜ ๊ณผ๋‹ค.

๋ถ„๋ช…ํžˆ CX๋Š” Microsoft์—์„œ ์ œ๊ณตํ•˜๋Š” C++ RAD ํ™˜๊ฒฝ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” ์ •์ฑ…์œผ๋กœ ์ธํ•ด ์ค‘๋‹จ๋˜์—ˆ์œผ๋ฉฐ ๋Œ€์‹  ๋ฉ”๋ชจ์žฅ๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์œผ๋กœ MDIL/ATL์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

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

๊ทธ๋ ‡๋‹ค๋ฉด WinUI์™€ ๊ฐ™์€ ๋…์  UI์— ๋Œ€ํ•ด ์ฝ”๋”ฉํ•˜๋Š” ์ด์œ ๋Š” ๋Œ€์‹  X Windows์™€ ๊ฐ™์€ ๊ณต๊ฐœ ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

... ๋งˆ์น˜ Windows์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ. ํ‘œ์ค€ ์ค€์ˆ˜ ๊ฒ€์ฆ์„ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ(Clang ๋ฐ MSVC)๋ฅผ ๋‹ค์ค‘ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ์ตœ์‹  C++ ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ ํ™•์žฅ์„ ํ”ผํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ฝ”๋“œ๋Š” C++20์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์–ธ์–ด ํ™•์žฅ์ด C++17 ์ง€์›์ด ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜ ๋งค์šฐ ๋Šฆ๊ฒŒ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ด ์ƒํ™ฉ์€ C++20์—์„œ ๋ฐ˜๋ณต๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋˜๋Š” C++20์ด 17๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•…ํ™”๋ฉ๋‹ˆ๋‹ค). ์˜ˆ๋ฅผ ๋“ค์–ด C++20( /std:c++latest )๊ณผ CX( /ZW )๋ฅผ ํ˜ผํ•ฉํ•  ์ˆ˜ ์—†์œผ๋ฉด ๋‘ ์Šค์œ„์น˜๊ฐ€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

NVCC๊ฐ€ ์žฅ์น˜ ์ธก C++17์„ ์ง€์›ํ•˜๋Š” ๋ฐ ์˜ฌํ•ด๊นŒ์ง€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์ข‹์ง€ ์•Š์•„.

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

์œ„์˜ ์ด์œ ๋กœ ๋‚˜๋Š” ๊ทธ๋“ค์„ ํ”ผํ•ฉ๋‹ˆ๋‹ค. WinUI C++ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์–ธ์–ด ํ™•์žฅ์œผ๋กœ ํšŒ๊ท€ํ•˜๋ฉด ๋Œ€์ฒด GUI ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ด๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@sylveon WinUI์šฉ์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์ด์‹ ๊ฐ€๋Šฅํ•œ C++20์€ Windows ์™ธ๋ถ€์—์„œ๋Š” ์™„์ „ํžˆ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์—†๋Š” Qt๋„ ์žฌ๋ฏธ์žˆ๊ฒŒ ์ฆ๊ธฐ์„ธ์š”.

C++ ๋ฐ์Šคํฌํ†ฑ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์‚ฌ์šฉํ•  ๊ฐ€์น˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฌด์˜๋ฏธํ•œ ์ •์น˜๊ฐ€ CX๋ฅผ ์ฃฝ์˜€๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์„œ๋กœ ์šฐํ˜ธ์ ์ธ ์ œ์•ˆ. ๋‚˜๋Š” ๊ธฐ์ˆ ์ ์ธ C++ ์ฃผ์žฅ์— ๋Œ€ํ•ด ๋…ผํ‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ˆ„๊ฐ€ ์˜ณ์€์ง€ ํŒ๋‹จํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์š”์ ์€ go have fun with X ์™€ ๊ฐ™์€ ๋ฌธ๊ตฌ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์šฐํ˜ธ์ ์ด๊ณ  ํ˜‘๋ ฅ์ ์ธ ๋ถ„์œ„๊ธฐ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @stevenbrix ๋ฐ ๊ธฐํƒ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

@hansmbakker ๊ฐ์‚ฌ

@pjmm ๋ฐ @sylveon ์—ด์ •์ ์ด๊ณ  ์†”์งํ•œ ๋Œ€ํ™”์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์  ๋ชจ๋‘ ๋งค์šฐ ํƒ€๋‹นํ•˜๋ฉฐ, ๋‘ ์‚ฌ๋žŒ์ด ๋ชจ๋‘ ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ์— ์„ธ์ƒ์€ ์ถฉ๋ถ„ํžˆ ํฌ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@pjmlp ์šฐ๋ฆฌ๋Š” C++์— ๋Œ€ํ•œ ํ˜„์žฌ ๊ฒฝํ—˜์— ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉฐ C++ ๋ฉ”ํƒ€ํด๋ž˜์Šค ์ „์— ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” idl-free c++/winrt์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ํ† ๋ก ์„ ํ–ˆ๊ณ  @kennykerr ์™€ @Scottj1s ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด Build ํ† ๋ก ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ๊ฒช์—ˆ๋˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋Š” WinUI์™€์˜ ํ†ตํ•ฉ๊ณผ ๊ด€๋ จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์‘์ง‘๋ ฅ ์žˆ๋Š” ์Šคํ† ๋ฆฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. C++/Cx๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  idl-free ๋ฒ„์ „์˜ C++/winrt์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ?

๊ธฐ๋Œ€์น˜๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์—์„œ 2020๋…„์— ๋งŽ์€ ์ง„์ „์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

IDL ๋ฌด๋ฃŒ C++/WinRT์— ๊ด€์‹ฌ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

IDE ๊ฒฝํ—˜๋„ ์ตœ๊ณ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด C#์—์„œ์™€ ๊ฐ™์ด XAML ํŽธ์ง‘๊ธฐ์—์„œ ์ด๋ฒคํŠธ ์ฝœ๋ฐฑ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์ƒˆ ์ฝœ๋ฐฑ ๋งŒ๋“ค๊ธฐ ๋“œ๋กญ๋‹ค์šด์€ ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ). XAML ํŽธ์ง‘๊ธฐ์—์„œ ์ •์˜๋กœ ์ด๋™๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ฑ„์šด ๋‹ค์–‘ํ•œ XAML ์ปดํŒŒ์ผ๋Ÿฌ ๋ฒ„๊ทธ๋กœ, ๋‹ค๋ฅธ ์ง€์› ์–ธ์–ด์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@stevenbrix , IDL์ด ์—†๋Š” C++/WinRT์— ์ œ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(๋ฌผ๋ก  C++/CX๋กœ์˜ ๋ณต๊ท€๋Š” ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ์šฐ๋ฆฌ๋Š” ํ”Œ๋žซํผ ๊ฐ„ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ž‘์„ฑํ•˜๊ณ  MSVC ๋ฐ LLVM(Windows ํฌํ•จ)์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋ฏ€๋กœ ํ‘œ์ค€ ์ค€์ˆ˜ C++๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

@stevenbrix ,

@pjmlp ์šฐ๋ฆฌ๋Š” C++์— ๋Œ€ํ•œ ํ˜„์žฌ ๊ฒฝํ—˜์— ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉฐ C++ ๋ฉ”ํƒ€ํด๋ž˜์Šค ์ „์— ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” idl-free c++/winrt์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ํ† ๋ก ์„ ํ–ˆ๊ณ  @kennykerr ์™€ @Scottj1s ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด Build ํ† ๋ก ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ๊ฒช์—ˆ๋˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋Š” WinUI์™€์˜ ํ†ตํ•ฉ๊ณผ ๊ด€๋ จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์‘์ง‘๋ ฅ ์žˆ๋Š” ์Šคํ† ๋ฆฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. C++/Cx๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  idl-free ๋ฒ„์ „์˜ C++/winrt์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ?

๊ธฐ๋Œ€์น˜๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์—์„œ 2020๋…„์— ๋งŽ์€ ์ง„์ „์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ C++/WinRT๋ฅผ ์‚ฌ์šฉํ•œ ์ด ์ „์ฒด ์•„์ด๋””์–ด๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒ์‚ฐ์„ฑ ์ €ํ•˜์— ๋Œ€ํ•œ ๊ณ ๋ ค ์—†์ด ์šฐ๋ฆฌ์—๊ฒŒ ์–ผ๋งˆ๋‚˜ ๋‚˜์œ ์˜ํ–ฅ์„ ๋ฏธ์ณค๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ Windows ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์ด Windows 3.0์œผ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋Š” ์˜ค๋žœ ๊ฐœ๋ฐœ์ž์ด๋ฉฐ ์˜ค๋Š˜๋‚  C++๋Š” ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ .NET ๊ธฐ๋ฐ˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋Œ€๋ถ€๋ถ„ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Borland ๋„๊ตฌ๋Š” ์˜ค๋žœ Windows ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ ค์ง„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ์ธํ•ด Microsoft ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋๋‚  ๋•Œ๊นŒ์ง€ ์ €์˜ ๋นต๊ณผ ๋ฒ„ํ„ฐ์˜€์Šต๋‹ˆ๋‹ค.

Visual C++๋Š” Forms ๋ฐ AOT ์ปดํŒŒ์ผ๊ณผ์˜ ํ†ตํ•ฉ์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— C++/CLI์—์„œ๋„ C++ Builder๋กœ _Visual_๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

C++/CX๋Š” Microsoft๊ฐ€ ๋งˆ์นจ๋‚ด ๊ทธ๊ฒƒ์„ ์–ป์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. 25๋…„ ํ›„์—๋Š” Delphi/C++ Builder๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ƒ์‚ฐ์„ฑ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ œ๊ณต๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ€์‹  ์šฐ๋ฆฌ์˜ ์ƒ์‚ฐ์„ฑ ์ €ํ•˜์— ๋Œ€ํ•œ ๊ณ ๋ ค ์—†์ด C++/CX๋ฅผ ์ฃฝ์ด๋ ค๋Š” ์ •์น˜์  ์›€์ง์ž„์œผ๋กœ ์–ป์€ ๊ฒƒ์€ ๋ˆ„๋ฝ๋œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ISO C++ ๋ฐ WG 21์— ๋„˜๊ฒผ์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ Visual C++ ํŒ€์ด ์šฐ๋ฆฌ์—๊ฒŒ์„œ ๋นผ์•—์€ ๋ชจ๋“  ๊ฒƒ์ด WG 21์—์„œ ์Šน์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ๊ฒฐ๊ตญ ISO C++์— ์ฑ„ํƒ๋˜๋”๋ผ๋„ 2023๋…„, 2026๋…„, ....? ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ์‹ค์ œ๋กœ Windows ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณต๋˜๋Š” ์‹œ์ ์ด ์–ธ์ œ์ธ์ง€์— ๋Œ€ํ•œ ์ „์ฒด ์‹œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์ง€์›์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ๋Š” 2012๋…„ Windows 8์ด ์ถœ์‹œ๋œ ์ดํ›„ C++/CX๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ์ œ๊ณตํ•œ ๊ฒƒ๊ณผ ๋™๋“ฑํ•œ ์ˆ˜์ค€์— ๋„๋‹ฌํ•˜๋Š” ๋ฐ ์•ฝ ๋์—†๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 2020๋…„๊นŒ์ง€ ๊ฐœ์„ ์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์—ฌ๊ธฐ์„œ 9๋…„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ชจ๋“  ๊ฒƒ์ด ๊ด€๋ฆฌ๋œ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ํ™”๋ฅผ ๋‚ด๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‹ค๋ก€ํ•ฉ๋‹ˆ๋‹ค. UWP ์‹คํŒจ, Reunion, .NET ์—์ฝ” ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ ์–ด ๋ณธ MIDL ๋ฉ”๋ชจ์žฅ ๊ฒฝํ—˜๊ณผ ATL๊ณผ ๊ฐ™์€ ๋์—†๋Š” ํ…œํ”Œ๋ฆฟ ์ˆ˜ํ”„๋กœ 2000 ๋…„์ฒ˜๋Ÿผ ์ฝ”๋”ฉํ•˜๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

์˜ˆ, IDL ๋ฌด๋ฃŒ C++/WinRT ๋ฒ„์ „์ด๊ฑฐ๋‚˜ ์ตœ์†Œํ•œ ์™„์ „ํ•œ Intellisense/Intelicode ์ง€์›์ด ์žˆ๊ณ  ์ˆ˜๋™์œผ๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ํ•„์š”๊ฐ€ ์—†๋Š” IDL ๊ฒฝํ—˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ C++ ์ฝ”๋“œ ์ž์ฒด์—์„œ ATL๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์„ ์—†์• ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

.NET/C++ ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ, ์ €๋Š” Microsoft ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ณผ๊ฑฐ๋กœ ์‹œ๊ฐ„ ์—ฌํ–‰์„ ํ•˜๋Š” ๊ฒƒ์— ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค C++ RAD ๊ด€์ ์ด ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ C++/ WinRT ์Šคํ† ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌ๋˜์—ˆ๊ณ  ์ง€๊ธˆ UWP์—์„œ ๋ฐฑํŽ˜๋‹ฌ๋ง์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ, ๋‚˜๋Š” "๊ฐœ๋ฐœ์ž, ๊ฐœ๋ฐœ์ž, ๊ฐœ๋ฐœ์ž"๊ฐ€ ์–ด๋””๋กœ ๊ฐ”๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ์•ฝ๊ฐ„ ์—‰๋šฑํ•œ ๋Š๋‚Œ์ด ๋“ ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ C++ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด์จŒ๋“  ํ•˜์ง€ ์•Š๋Š” ISO ์ˆœ๋„์˜ ์ด๋ฆ„์œผ๋กœ .NET์—์„œ C++๋กœ ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€์•ผ ํ•  ๋•Œ ์ƒ์‚ฐ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋Š๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

C++๋Š” ์—ฌ์ „ํžˆ ๋งค์šฐ ๊ด€๋ จ์„ฑ์ด ๋†’์€ ๋…๋ฆฝ ์‹คํ–‰ํ˜•์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ด€๋ฆฌ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์›์‹œ C++๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ „์ฒด UWP ๋Ÿฐํƒ€์ž„ ๋ฐ XAML/WinUI ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ธฐ๋ณธ C++์ž…๋‹ˆ๋‹ค. C++๋กœ ์ž‘์„ฑ๋œ UWP ์•ฑ์—๋Š” (๋‹คํ–‰ํžˆ) ๊ด€๋ฆฌ๋˜๋Š” ์–ธ์–ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

.NET์—์„œ C++๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์„ ๋Š๋‚€๋‹ค๋ฉด ๊ทธ ์ด์œ ๋ฅผ ์Šค์Šค๋กœ์—๊ฒŒ ๋ฌผ์–ด๋ณด๊ณ  .NET ๋‚ด์—์„œ ์ง์ ‘ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ? ์ŠคํŒฌ ์œ ํ˜•, stackalloc ๋ฐ ๋ฒกํ„ฐ ๋‚ด์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. DirectX, ๊ธฐ๋ณธ API ๋˜๋Š” COM? TerraFX์™€ ๊ฐ™์€ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. C++ ์ „์šฉ lib์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๊นŒ? .NET์—์„œ ํ•„์š”ํ•œ ๊ฒƒ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜์‹ญ์‹œ์˜ค.

.NET์€ C++ ์—†์ด ๋” ์ข‹๊ณ  C++๋Š” .NET ์—†์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” cppwinrt์˜ ํ…œํ”Œ๋ฆฟ์ด ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ๊ฐ€์žฅ ์งœ์ฆ๋‚˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ์ฝ”๋“œ ์ƒ์„ฑ์˜ ํ•„์š”์„ฑ๊ณผ ๊ทธ๊ฒƒ์ด ์ƒ์„ฑํ•˜๋Š” ๋”์ฐํ•œ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

@sylveon Easy, Windows ํŒ€์ด UWP๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๊ฑฐ๋ถ€ํ•˜๊ณ  ํƒ€์‚ฌ ๋ฐ”์ธ๋”ฉ์ด ํฌํ•จ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ผ์ด์„ ์Šค ๋ฐ ํ–ฅํ›„ ์ง€์› ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฒ•๋ฌด ๋ถ€์„œ์˜ ์ถ•๋ณต์„ ๋ฐ›์€ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

Borland(ํ˜„์žฌ Embarcadero)์™€ The Qt Company๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ฃผ์—ˆ์ง€๋งŒ ํ”Œ๋žซํผ์„ ์œ ์ง€ํ•˜๋ ค๋Š” ๊ด€๋ จ์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ Microsoft์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

macOS, iOS, Android, ChromeOS GUI์—์„œ ISO C++๋กœ ์–ด๋””๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์–ด์จŒ๋“  ์—ฌ๊ธฐ์„œ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์€ ๋ฌด์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@pjmlp iOS/macOS/Windows์—์„œ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ˆ˜๋ฐฑ๋งŒ ์ค„์˜ ISO C++๊ฐ€ ํฌํ•จ๋œ ๊ต์ฐจ ํ”Œ๋žซํผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. C++๋Š” ์„ฑ๋Šฅ ๋ฐ/๋˜๋Š” ๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช…์— ๊ด€์‹ฌ์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. C++ ํ™•์žฅ์€ ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ ์ปดํŒŒ์ผ๋Ÿฌ(์„œ๋กœ์˜ ํ™•์žฅ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•จ)๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์ด์ „์— C++/CLI๋ฅผ ์‚ฌ์šฉํ•ด ์™”์œผ๋ฉฐ ๋งค์šฐ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์›์‹œ C++ ํฌ์ธํ„ฐ๋งŒ ํ—ˆ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋ฉค๋ฒ„์™€ ๊ฐ™์€ ์ œํ•œ์œผ๋กœ ์ธํ•ด ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ๊น๋‹ˆ๋‹ค(๋‹จ์ผ ๋ฌธ์ž ๋ณ€๊ฒฝ ์‹œ MD ๋ณ‘ํ•ฉ ์‹œ๊ฐ„ 5๋ถ„ ์†Œ์š”).
C++์—๋Š” pragma ๊ด€๋ฆฌ/๋น„๊ด€๋ฆฌ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ๋ž˜ํ•‘ ํ•„์š”๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ๋Š” C++์™€ ๋น„๊ตํ•˜์—ฌ C++/CLI์˜ ๋‹ค๋ฅธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ๋นŒ๋“œ ์‹œ C++/CLI ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ C++17 ์ด์ƒ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ง์„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” C++๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ—ค๋”๋ฅผ ํฌํ•จํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. 20๊ฐ€์ง€ ๊ธฐ๋Šฅ).
๋‚ด๊ฐ€ ๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ ์—ฌ๋Ÿฌ ๊ฒฝ์Ÿ์ ์ธ ๋…ธ๋ ฅ์„ ํ•˜์ง€ ๋ง๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ‘œ์ค€์— ์ถฉ์‹คํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ž‘์—…ํ•˜์‹ญ์‹œ์˜ค. Microsoft๋Š” C++ ์œ„์›ํšŒ์— ์žˆ์œผ๋ฉฐ ํ‘œ์ค€์„ ๋ฐœ์ „์‹œํ‚ค๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋…์ ์ด ์•„๋‹ˆ๋ผ ํ™•์žฅ์— ๊ณ ์ •๋œ ์ดˆ์ ์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

midl.exe, cl.exe ๋˜๋Š” link.exe์™€ ์œ ์‚ฌํ•œ xaml ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด xaml.exe์™€ ๊ฐ™์€ xaml ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? winui ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ž๋™ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ cmake์™€ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค: https://github.com/microsoft/ProjectReunion/issues/58

midl.exe, cl.exe ๋˜๋Š” link.exe์™€ ์œ ์‚ฌํ•œ xaml ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด xaml.exe์™€ ๊ฐ™์€ xaml ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? winui ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ž๋™ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@sammi #1433์€ ๋‹น์‹ ์ด ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ทธ๋Ÿด๋“ฏํ•œ ์†”๋ฃจ์…˜์„ ์š”์•ฝํ•ฉ๋‹ˆ๊นŒ?

midl.exe, cl.exe ๋˜๋Š” link.exe์™€ ์œ ์‚ฌํ•œ xaml ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด xaml.exe์™€ ๊ฐ™์€ xaml ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? winui ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ž๋™ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@sammi #1433์€ ๋‹น์‹ ์ด ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ทธ๋Ÿด๋“ฏํ•œ ์†”๋ฃจ์…˜์„ ์š”์•ฝํ•ฉ๋‹ˆ๊นŒ?

@jtbrower , ์ œ๊ฐ€ โ€‹โ€‹์ฐพ๋˜ ๋ฐ”๋กœ ๊ทธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํ™•์‹คํžˆ ๊ทธ๊ฒƒ์€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ด๊ณ  ๋งŽ์€ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋งŒ WinUI 3 ๋ฏธ๋ฆฌ๋ณด๊ธฐ 2๋Š” ๋‚˜์—๊ฒŒ ์‹ค๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ํฐ ์š”๊ตฌ ์‚ฌํ•ญ์€ XAML ์„ค๊ณ„ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” XAML ๋””์ž์ด๋„ˆ๊ฐ€ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์— ์ƒ๋‹นํžˆ ๋†€๋ž๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ์–ธ์ œ ์ž‘๋™ํ• ์ง€์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ •๋ณด๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, Visual Studio์˜ ํ˜„์žฌ XAML ๋””์ž์ด๋„ˆ๊ฐ€ ๋งค์šฐ ๋Š๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ์ค‘๋‹จ๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ์‚ฌํ•ญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ ์ค‘๋‹จ๋œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Height="*" ๋ฅผ "Auto" ๋˜๋Š” 100์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. (์˜ค๋ฅ˜ ์ฐฝ์€ ์•ฝ 10๊ฐœ์˜ ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰์–ด๋ƒ…๋‹ˆ๋‹ค. ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ๋ฌผ๊ฒฐ์„ ์ด ์žˆ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•จ)

๋ถ„๋ช…ํžˆ ๋งํ•ด์„œ, ์ €๋Š” ๋””์ž์ธ์„ ์œ„ํ•ด ๋””์ž์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ ๋ ˆ์ด์•„์›ƒ์ด ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์น˜๊ธฐ ์ „์— ๊ตฌ์ƒํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋” ์‰ฌ์šฐ๋ฉด ๋””์ž์ด๋„ˆ๊ฐ€ "๋ณด๊ธฐ ์ „์šฉ"์ด๊ณ  XAML์„ ์กฐ์ •ํ•˜๋ฉด์„œ(์ถฉ๋Œ ์—†์ด) ์—…๋ฐ์ดํŠธ๋œ ๊ฒฝ์šฐ GUI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ XAML์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋งค์šฐ ๋“œ๋ฌผ๊ฒŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. . ์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถœ๋ ฅ์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” XAML ์†Œ์Šค๋กœ WindowsCommunityToolkit ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์€ ์ œ ๋ชฉ์ ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

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

Project Reunion์ด ์•ฑ ์ปจํ…Œ์ด๋„ˆ์—์„œ GUI๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ƒŒ๋“œ๋ฐ•์Šค/๊ฒฝ๊ณ„๊ฐ€ ์—†๋Š” UWP์™€ ๊ฐ™์€ UX๋Š” ํฐ ์ง„์ „์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์–ธ์ œ ๋‹ค์‹œ ์ž‘๋™ํ•˜๋Š” XAML ๋””์ž์ด๋„ˆ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์„๊นŒ์š”... ์ œ๋ฐœ์š”?

ํ•ซ ๋ฆฌ๋กœ๋“œ๋Š” ๋Œ€๋ถ€๋ถ„ XAML ๋””์ž์ด๋„ˆ์˜ "๋ณด๊ธฐ ์ „์šฉ" ๋ชฉ์ ์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ๋Š” WinUI ๋„๊ตฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ซ ๋ฆฌ๋กœ๋“œ ๋ฐ ๋ผ์ด๋ธŒ ๋น„์ฃผ์–ผ ํŠธ๋ฆฌ๋Š” WinUI์—์„œ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณด๊ธฐ ์ „์šฉ ๋””์ž์ด๋„ˆ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” "๋‹ค์Œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."์˜€์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ‹€๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ(๊ทธ๋ ‡๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”), ์ง€๊ธˆ ๋‹น์žฅ์€ WinUI์—์„œ UI๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ๋Š” WinUI ๋„๊ตฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ซ ๋ฆฌ๋กœ๋“œ ๋ฐ ๋ผ์ด๋ธŒ ๋น„์ฃผ์–ผ ํŠธ๋ฆฌ๋Š” WinUI์—์„œ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณด๊ธฐ ์ „์šฉ ๋””์ž์ด๋„ˆ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” "๋‹ค์Œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."์˜€์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ‹€๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ(๊ทธ๋ ‡๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”), ์ง€๊ธˆ ๋‹น์žฅ์€ WinUI์—์„œ UI๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @ericleigh007 ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์ธ WinUI 3 Preview 3๋ฅผ ํ™•์ธํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์œผ์…จ๋‚˜์š”? ์ตœ๊ทผ IntelliSense, Hot Reload, Live Visual Tree ๋ฐ Live Property Explorer์™€ ๊ฐ™์€ ๋งŽ์€ ๋„๊ตฌ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์—์„œ ๋ฆด๋ฆฌ์Šค ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค . ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์— ๊ด€์‹ฌ์ด ๋งŽ์œผ๋‹ˆ ๋ถ€๋‹ด ์—†์ด ์—ฐ๋ฝ์ฃผ์„ธ์š”!

@JeanRoca ๋ถˆํ–‰ํžˆ๋„ C++/CX ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๋”ฐ๋ผ์žก๋Š” ๊ฒƒ์€ ๋„๊ตฌ ๊ฐœ์„  ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ C++ ๋„๊ตฌ๊ฐ€ 2000๋…„์œผ๋กœ ๋Œ์•„๊ฐ€ ๋ฉ”๋ชจ์žฅ์— IDL ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ณ (ํŽธ์ง‘๊ธฐ ์ง€์› ์—†์ด) ์ˆ˜๋™์œผ๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์งˆ ๋•Œ WinUI์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์ž์˜ ๋งŽ์€ ์‚ฌ๋ž‘์„ ๊ธฐ๋Œ€ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด .NET์— ๋จธ๋ฌผ๊ฒŒ ํ•˜๊ฑฐ๋‚˜ C++/WinRT๋กœ ์ด๋™ํ•˜๋ผ๋Š” ๊ฒฝ๊ณ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  C++/CX๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ๋‹ค์‹œ๋ณด๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿคž

๋ฉ”์ผ์—์„œ ๋ณด๋‚ธ ๋ฉ”์ผ https://go.microsoft.com/fwlink/?LinkId=550986 for Windows 10

๋ณด๋‚ธ ์‚ฌ๋žŒ: JeanRoca [email protected]
๋ณด๋ƒ„: 2020๋…„ 11์›” 18์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 4:41
๋ฐ›๋Š” ์‚ฌ๋žŒ: microsoft/microsoft-ui-xaml [email protected]
์ฐธ์กฐ: Eric [email protected] ; ๋ฉ˜์…˜ @noreply.github.com
์ œ๋ชฉ: Re: [microsoft/microsoft-ui-xaml] WinUI 3.0 ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๋ฐ ๋„๊ตฌ - ์ž…๋ ฅ ํ•„์š”(#1045)

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ๋Š” WinUI ๋„๊ตฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ซ ๋ฆฌ๋กœ๋“œ ๋ฐ ๋ผ์ด๋ธŒ ๋น„์ฃผ์–ผ ํŠธ๋ฆฌ๋Š” WinUI์—์„œ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณด๊ธฐ ์ „์šฉ ๋””์ž์ด๋„ˆ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” "๋‹ค์Œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."์˜€์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ‹€๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ(๊ทธ๋ ‡๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”), ์ง€๊ธˆ ๋‹น์žฅ์€ WinUI์—์„œ UI๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @ ericleigh007 https://eur05.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fericleigh007&data=04%7C01%7C%7Cae66199f9c044a728fb108d88b7c470d%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637412713160082691%7CUnknown% 7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAILCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sBIZUiZU ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ํ™•์ธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ตœ๊ทผ IntelliSense, Hot Reload, Live Visual Tree ๋ฐ Live Property Explorer์™€ ๊ฐ™์€ ๋งŽ์€ ๋„๊ตฌ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ฆด๋ฆฌ์Šค ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://eur05.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmicrosoft%2Fmicrosoft-ui-xaml%2Fissues%2F3620&data=04%7C01% 7C % 7Cae66199f9c044a728fb108d88b7c470d % 7C84df9e7fe9f640afb435aaaaaaaaaaaa % 7C1 % 7C0 % 7C637412713160082691 % 7CUnknown % 7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0 % 3D % 7C1000 & SDATA = 2jVKkAs9Whd6U9kH1ZxJKy956wI6Itg7jq6lCuaqEgE % 3D & = 0์„ ์˜ˆ์•ฝ ํ•˜๊ณ  ์—ฌ๊ธฐ์— ์ตœ์‹ ์˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์–ป์„ https://eur05.safelinks.protection.outlook.com/?url=https% 3A % 2F % 2Fdocs.microsoft.com % 2Fen ๋ฏธ % 2Fwindows % 2Fapps % 2Fwinui % 2Fwinui3 % 2F ๋ฐ ๋ฐ์ดํ„ฐ = 04% 7C01 % 7C % 7Cae66199f9c044a728fb108d88b7c470d % 7C84df9e7fe9f640afb435aaaaaaaaaaaa % 7C1 % 7C0 % 7C637412713160092685 % 7CUnknown % 7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0 % 3D % 7C1000 ๋ฐ SDATA = VF2s7jilqpksevP6Fx7mXW1QCNJN2 % 2BK5yWOndg3rKoc%3D&reserved=0 . ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์— ๊ด€์‹ฌ์ด ๋งŽ์œผ๋‹ˆ ๋ถ€๋‹ด ์—†์ด ์—ฐ๋ฝ์ฃผ์„ธ์š”!

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub https://eur05.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmicrosoft%2Fmicrosoft-ui-xaml%2Fissues%2F1045%23issuecomment์—์„œ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. = 04% 7C01 % 7C % 7Cae66199f9c044a728fb108d88b7c470d % 7C84df9e7fe9f640afb435aaaaaaaaaaaa % 7C1 % 7C0 % 7C637412713160092685 % 7CUnknown % 7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0 % 3D % 7C1000 ๋ฐ SDATA = R1S2JpfBSzsNKJBAH5๊ฐ€ 2Fgme8Bq % % % 2FjHbzB9FySk1KnZKbk 3D ๋ฐ ์˜ˆ์•ฝ = 0 -729402012 ๋ฐ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ฑฐ๋ถ€ //eur05.safelinks.protection.outlook : HTTPS .COM /? URL = HTTPS % 3A % 2F % 2Fgithub.com % 2Fnotifications % 2Funsubscribe-์ธ์ฆ % 2FABX3S2XLYXYXP7BZZC3OE73SQNGBFANCNFSM4ICOLUJQ ๋ฐ ๋ฐ์ดํ„ฐ = 04ํผ์„ผํŠธ 7C01 % 7C % 7Cae66199f9c044a728fb108d88b7c470d % 7C84df9e7fe9f640afb435aaaaaaaaaaaa % 7C1 % 7C0 % 7C637412713160102680 % 7CUnknown % 7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0 % 3D % 7C1000 ๋ฐ SDATA = 0H6IpND3YX1s6oyXy % 2FCXNAMN9n8fvSPdWks%2FfmXT0Bc%3D&reserved=0 .

- ํ˜„์žฌ winui3 C++(๋ฐ์Šคํฌํ†ฑ)์—์„œ ์ž‘๋™ํ•˜๋Š” wysiwyg ํŽธ์ง‘๊ธฐ/๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์ž–์•„์š”?

Microsoft๋Š” C++/CX ์‚ฌ์šฉ์ž๋„ ์†Œ์™ธ์‹œํ‚ค๋ ค๊ณ  ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ํ˜•์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Microsoft๊ฐ€ ๋ช‡ ๋…„ ์ „์— UWP๋ฅผ ์œ„ํ•ด ์ถ”์ง„ํ–ˆ๋˜ ๊ธฐ์ˆ ์„ ์ฑ„ํƒํ•œ ์‚ฌ๋žŒ์€ .net์ด๋“  C++์ด๋“  ํ˜„์žฌ Microsoft์˜ ์ง€์› ์—†์ด๋Š” ๊ณค๊ฒฝ์— ์ฒ˜ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

WinUI 3์€ WPF๋กœ ์ž‘์„ฑ๋œ ๋ฐ์Šคํฌํ†ฑ ์•ฑ์—๋งŒ ์ ์šฉ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ UWP์—๋Š” WPF์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์—†๊ณ  WinUI๋Š” ๋” ์ ์€ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋นจ๋ฆฌ ๊นจ๋‹ซ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. WinUI 3๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ์— ์ข‹์ง€ ์•Š์€ ์žฅ์†Œ์ธ ๋ชจ๋‘๊ฐ€ ์ขŒ์ ˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@robloo UWP๋ฅผ ์˜นํ˜ธํ•˜๋˜ ์‚ฌ๋žŒ์œผ๋กœ์„œ ๊ทธ๋“ค์€ ๋‚˜๋ฅผ ์žƒ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ํ˜ผ๋ž€์„ ์ •๋ฆฌํ•  ๋•Œ๊นŒ์ง€ WPF์™€ Win32์ž…๋‹ˆ๋‹ค.

C++/WinRT๋Š” ์ •์น˜์ ์ธ ์›€์ง์ž„์ด์—ˆ๊ณ  ISO C++๊ฐ€ ๊ฒฐ๊ตญ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐ ๋ฉ”ํƒ€ํด๋ž˜์Šค ์ง€์›์„ ์ œ๊ณตํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ Visual Studio ํŒ€์ด C++/CX ๊ฒฝํ—˜์„ ๋ณต์ œํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ผ๋Š” ๋ง์„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

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

.NET์—์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  UWP ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” Microsoft๋ฅผ ์ฐธ์•„์•ผ ํ–ˆ์ง€๋งŒ C++/CLI์™€ ๊ฐ™์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” C++/CX์—์„œ๋Š” ์–ด๋–ป๊ฒŒ๋“  ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ C++/WinRT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ATL๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ Reunion ๋ฌธ์ œ ํ† ๋ก ๊ณผ ์—…๋ฐ์ดํŠธ ๋กœ๋“œ๋งต์„ ์ฝ์œผ๋ฉด ๋ฐฉํ–ฅ์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๋ช‡ ๋…„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

WPF ๋ฐ Win32๋Š” ์˜ค๋ž˜๋˜์—ˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์„ ์žƒ์ง€ ์•Š๊ณ  ์—ฌ๊ธฐ์— ์žˆ๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

- ํ˜„์žฌ winui3 C++(๋ฐ์Šคํฌํ†ฑ)์—์„œ ์ž‘๋™ํ•˜๋Š” wysiwyg ํŽธ์ง‘๊ธฐ/๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์ž–์•„์š”?

XAML ๋””์ž์ด๋„ˆ๋Š” ์ผ์ข…์˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์ฒ˜์Œ๋ถ€ํ„ฐ wysiwyg ํŽธ์ง‘์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Hot reload(์ด์ œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ 3์—์„œ ์ž‘๋™)๊ฐ€ ๋” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ ๋น„์ฃผ์–ผ ํŠธ๋ฆฌ์™€ ๋ผ์ด๋ธŒ ์†Œํ’ˆ ๋ณด๊ธฐ๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ 3์—์„œ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋””์ž์ด๋„ˆ๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

ํŒŒํ‹ฐ์— ๋Šฆ์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. @wjk ๋Š” ๊ทธ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์ ์œผ๋กœ ๊ทธ๊ฒƒ์„ ๋ชป ๋ฐ•์•˜์Šต๋‹ˆ๋‹ค.

  1. MSIX๋Š” ๋ชจ๋‘ ํ›Œ๋ฅญํ•˜์ง€๋งŒ MSIX๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๋” ๋ณต์žกํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐ ์—ฌ์ „ํžˆ ์ข‹์€ MSI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•„์š”ํ•œ Authenticode ์ธ์ฆ์„œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋น„์‹ธ๊ธฐ ๋•Œ๋ฌธ์— MSIX๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๊บผ๋ ค์ง‘๋‹ˆ๋‹ค.

์ €๋Š” MSIX์˜ ๋งค๋ ฅ์— ์ •๋ง ๊ฐ์‚ฌํ•˜์ง€๋งŒ ์ด ์ธ์ฆ์„œ ์„œ๋ช… ์˜๋ฌด๋Š” ์ €์—๊ฒŒ ์žˆ์–ด ๊ฑฐ๋ž˜ ์ฐจ๋‹จ๊ธฐ์ž…๋‹ˆ๋‹ค. ํด๋ž˜์‹ ๋ฐ์Šคํฌํ†ฑ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ SCM ์นœํ™”์ ์ธ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. MSIX์˜ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ณด๋‹ค ํ˜„๋Œ€์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์œ„ํ•œ Microsoft Store ๋ฐ ์ธ์ฆ ์š”๊ตฌ ์‚ฌํ•ญ ์—†์ด MSI ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒˆ ๋ฒ„์ „์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ์ด๊ฒƒ์ด ํ˜„์žฌ ๋กœ๋“œ๋งต์— ๋‚˜์—ด๋œ "๋น„ MSIX ๋ฐฐํฌ ์ง€์›" ๊ธฐ๋Šฅ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๊ฐ€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ์ ์— ์˜ํ•ด ์ด์ „ ๋ฆด๋ฆฌ์Šค๋กœ ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๋Š” ํ•œ 3.x๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐ ๊ฐ‡ํžŒ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. VS Installer ํ”„๋กœ์ ํŠธ๋Š” ๋น„๊ทน์ ์œผ๋กœ ์˜ค๋ž˜๋˜์—ˆ๊ณ  ์†Œ์Šค ์ œ์–ด์— ์ „ํ˜€ ์นœ์ˆ™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜“

@Chiramisu ์ €๋„ ๊ทธ ์˜๊ฒฌ์— ๋™์˜ํ•˜์ง€๋งŒ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ

@Chiramisu WiX๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ๋ชจ๋“  MSI ๊ธฐ๋ฐ˜ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์— ์‚ฌ์šฉํ•˜๋ฉฐ ๋งค์šฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Visual Studio ํ™•์žฅ ๋„ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์–‘ํ•œ ์ปดํŒŒ์ผ ๋ช…๋ น์„ ์ž๋™ํ™”ํ•˜๋Š” WiX ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@robloo UWP๋ฅผ ์˜นํ˜ธํ•˜๋˜ ์‚ฌ๋žŒ์œผ๋กœ์„œ ๊ทธ๋“ค์€ ๋‚˜๋ฅผ ์žƒ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ํ˜ผ๋ž€์„ ์ •๋ฆฌํ•  ๋•Œ๊นŒ์ง€ WPF์™€ Win32์ž…๋‹ˆ๋‹ค.

C++/WinRT๋Š” ์ •์น˜์ ์ธ ์›€์ง์ž„์ด์—ˆ๊ณ  ISO C++๊ฐ€ ๊ฒฐ๊ตญ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐ ๋ฉ”ํƒ€ํด๋ž˜์Šค ์ง€์›์„ ์ œ๊ณตํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ Visual Studio ํŒ€์ด C++/CX ๊ฒฝํ—˜์„ ๋ณต์ œํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ผ๋Š” ๋ง์„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

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

.NET์—์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  UWP ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” Microsoft๋ฅผ ์ฐธ์•„์•ผ ํ–ˆ์ง€๋งŒ C++/CLI์™€ ๊ฐ™์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” C++/CX์—์„œ๋Š” ์–ด๋–ป๊ฒŒ๋“  ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ C++/WinRT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ATL๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ Reunion ๋ฌธ์ œ ํ† ๋ก ๊ณผ ์—…๋ฐ์ดํŠธ ๋กœ๋“œ๋งต์„ ์ฝ์œผ๋ฉด ๋ฐฉํ–ฅ์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๋ช‡ ๋…„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

WPF ๋ฐ Win32๋Š” ์˜ค๋ž˜๋˜์—ˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์„ ์žƒ์ง€ ์•Š๊ณ  ์—ฌ๊ธฐ์— ์žˆ๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์† ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก C++/WinRT๋ฅผ ์‚ฌ์šฉํ•œ IDL ํŽธ์ง‘์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? co_await ๋ฐ ๊ธฐํƒ€ C++ 17 ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ๋ณธ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด C++/CX์—์„œ ๋ณต์žก์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

MS? ๋ˆ„๊ตฐ๊ฐ€ ๊ทธ ์ฃผ์œ„์— ์ •๋ง ์ข‹์€ ๋ž˜ํผ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š” ํ•œ C++ 17 ๊ธฐ๋Šฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” C++/WinRT๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ํ˜„์žฌ ๋””์ž์ธ๊ณผ ๋„ˆ๋ฌด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? C++/WinRT๋ฅผ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋„๋ก C++ 17์šฉ์œผ๋กœ ์ผ๋ถ€ "์šฐ์ˆ˜ํ•œ ๋ž˜ํผ"๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๋งŒํผ C++/CX๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๊นŒ?

(์ด์ œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ์‚ฌ์— ๋งํฌํ•  ๊ฒƒ์ด๊ณ , ๋‚˜๋Š” ์–ด๋ฆฌ์„๊ฒŒ ๋Š๋‚„ ๊ฒƒ์ž…๋‹ˆ๋‹ค)

@lmcdougald ์•„์ง ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด ํŠน์ • ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ์ „ํžˆ .NET Framework 3.5์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•Œ์ง€. ์•„์ง ์—…๋ฐ์ดํŠธ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ๊ธฐ์ˆ ์ด ์ด ๊ณ ๋Œ€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜–

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

์นœ์ ˆํ•œ

@Chiramisu ์˜ˆ, WiX๋Š” ์ด์ „ ๋ฒ„์ „์˜ .NET Framework์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ์˜ˆ, winforms ์•ฑ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์›์‹œ MSI ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— WiX๋Š” ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋ฌด์—‡์ด๋“  ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๋ฐฐ์šฐ๋Š” ๊ด€์ ์—์„œ, ๋‚˜๋Š” ๊ธฐ๋ณธ ํŠœํ† ๋ฆฌ์–ผ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ .NET์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ๊ฐ์ง€ ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ WiX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์—์„œ NGEN ์„ ๋ฐฉ๋ฒ• ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•ฑ์—์„œ ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Visual Studio ํ™•์žฅ์—๋Š” ์ถ”๊ฐ€ํ•  ์˜ฌ๋ฐ”๋ฅธ ๋ผˆ๋Œ€ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ๋„ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. (์ฐธ๊ณ : ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ ํ…œํ”Œ๋ฆฟ์€ ํ›จ์”ฌ ๋” ๊ณ ๊ธ‰ ์ฃผ์ œ์ด๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.) ์ด๊ฒƒ์ด ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

@Chiramisu ๋‚˜๋Š” ๋‹น์‹ ์ด ์ฐพ๊ณ ์žˆ๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. WinUI 3.0 ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹Œ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋ฅผ์œ„ํ•œ ํŒจํ‚ค์ง• ๋„๊ตฌ๋ฅผ ์ฐพ๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

.NET Framework 3.5๋ฅผ MSIX๋กœ ํŒจํ‚ค์ง•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์€ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. VS 2019์—์„œ ํŒจํ‚ค์ง€ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ์•ฑ์— ๋Œ€ํ•œ MSIX ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•œ ๋‹ค์Œ ๊ธด ์ „ํ™˜์„ ๋‹ค์†Œ ์›ํ™œํ•˜๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

WinUI 3.0์€ ๊ณต์‹์ ์œผ๋กœ .NET 3.5๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์•„๋งˆ๋„ ์–ด๋–ค ๋ฒ„์ „์—์„œ๋„ .NET Framework๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ํŒจํ‚ค์ง• ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  .NET 4.6(๋˜๋Š” ์ด์ƒ์ ์œผ๋กœ๋Š” 4.8 ์ด์ƒ)์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ˜„๋Œ€ํ™”๋ฅผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰๋œ๋‹ค๋ฉด ์—…๋ฐ์ดํŠธ๋œ .NET 4.6+ ์•ฑ์—์„œ ์ฐธ์กฐํ•˜๋Š” .NET Standard ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ธฐ๋Šฅ ์ „ํ™˜์„ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

.NET 4.6 ์•ฑ์ด ์•ˆ์ •์ ์ด๊ณ  ํ…Œ์ŠคํŠธ๋˜๋ฉด MSIX ํŒจํ‚ค์ง• ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ž๋™ ์—…๋ฐ์ดํŠธ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .NET Standard ๋‹จ๊ณ„ ํ›„์—๋Š” .NET Core 3.1(๋˜๋Š” 5, ํ•˜์ง€๋งŒ LTS ์ƒํƒœ๊ฐ€ ์กฐ์ง์— ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค)์—์„œ ๊ฑฐ์˜ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ ํ—ค๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ…Œ์ŠคํŠธํ•œ ๋‹ค์Œ MSIX๋ฅผ ์ด ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ WinForms์—์„œ WinUI๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ WinUI๋ฅผ ๋ฐฐ์šฐ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ƒˆ ํ”„๋กœ์ ํŠธ ํ—ค๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  .NET Standard ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌํ˜„ + ์ฐธ์กฐํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•œ ๋‹ค์Œ ์ด ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋„๋ก ํŒจํ‚ค์ง€๋ฅผ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์–ด๋–ค ์ฃผ์–ด์ง„ ์‹œ์ ์—์„œ ๋งค์šฐ ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ํ˜„๋Œ€ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. MSIX ํŒจํ‚ค์ง• ๋ฐ .NET 4.6 + .NET Standard ๋‹จ๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘ก๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ›จ์”ฌ ๋” ๋งŽ์€ ๋„์›€๋ง ๋„๊ตฌ์™€ ์ตœ์‹  .NET ๊ฐœ๋ฐœ ์ฃผ๊ธฐ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. .NET 3.5๊ฐ€ ์กด์žฌํ•˜๋Š” ํ•œ ์ˆ˜๋ช… ์ฃผ๊ธฐ๊ฐ€ 1/10์ด๋ผ๋Š” ์ ์„ ๊ณ ๋ คํ•  ๋•Œ, ์„œ๋‘˜๋Ÿฌ .NET 5๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋‹จ๊ธฐ์ ์œผ๋กœ ์กฐ์ง์— ์ข‹์ง€ ์•Š์€ ์ƒ๊ฐ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

๊ณ„์† ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก C++/WinRT๋ฅผ ์‚ฌ์šฉํ•œ IDL ํŽธ์ง‘์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? co_await ๋ฐ ๊ธฐํƒ€ C++ 17 ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ๋ณธ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด C++/CX์—์„œ ๋ณต์žก์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

MS? ๋ˆ„๊ตฐ๊ฐ€ ๊ทธ ์ฃผ์œ„์— ์ •๋ง ์ข‹์€ ๋ž˜ํผ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š” ํ•œ C++ 17 ๊ธฐ๋Šฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” C++/WinRT๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ํ˜„์žฌ ๋””์ž์ธ๊ณผ ๋„ˆ๋ฌด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? C++/WinRT๋ฅผ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋„๋ก C++ 17์šฉ์œผ๋กœ ์ผ๋ถ€ "์šฐ์ˆ˜ํ•œ ๋ž˜ํผ"๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๋งŒํผ C++/CX๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๊นŒ?

(์ด์ œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ์‚ฌ์— ๋งํฌํ•  ๊ฒƒ์ด๊ณ , ๋‚˜๋Š” ์–ด๋ฆฌ์„๊ฒŒ ๋Š๋‚„ ๊ฒƒ์ž…๋‹ˆ๋‹ค)

์ผ๋ฐ˜ C++์—๋Š” .winmd ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ํ˜•์‹ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— WinRT ํด๋ž˜์Šค๋ฅผ .hpp ๋ฐ .cpp ์œ„์— .idl ํŒŒ์ผ์— ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

co_await ๋Š” .then([=](Foo^ thing) { }) ์–ด๋””์—๋‚˜ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ๋ณต์žกํ•˜๋ฉฐ C#์˜ await ๊ตฌ๋ฌธ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ ํ”„๋กœ์ ํŠธ์˜ ์˜ˆ(idl + hpp + cpp)์ž…๋‹ˆ๋‹ค.

namespace RuntimeComponent6
{
    runtimeclass Class
    {
        Class();
        Int32 MyProperty;
    }
}
#pragma once

#include "Class.g.h"

namespace winrt::RuntimeComponent6::implementation
{
    struct Class : ClassT<Class>
    {
        Class() = default;

        int32_t MyProperty();
        void MyProperty(int32_t value);
    };
}

namespace winrt::RuntimeComponent6::factory_implementation
{
    struct Class : ClassT<Class, implementation::Class>
    {
    };
}
#include "pch.h"
#include "Class.h"
#include "Class.g.cpp"

namespace winrt::RuntimeComponent6::implementation
{
    int32_t Class::MyProperty()
    {
        throw hresult_not_implemented();
    }

    void Class::MyProperty(int32_t /* value */)
    {
        throw hresult_not_implemented();
    }
}

๋‹ค์Œ์€ ์ž‘์€ co_await ์˜ˆ์ž…๋‹ˆ๋‹ค.

void PrintFeed(SyndicationFeed const& syndicationFeed)
{
    for (SyndicationItem const& syndicationItem : syndicationFeed.Items())
    {
        std::wcout << syndicationItem.Title().Text().c_str() << std::endl;
    }
}

IAsyncAction ProcessFeedAsync()
{
    Uri rssFeedUri{ L"https://blogs.windows.com/feed" };
    SyndicationClient syndicationClient;
    SyndicationFeed syndicationFeed = co_await syndicationClient.RetrieveFeedAsync(rssFeedUri);
    PrintFeed(syndicationFeed);
}

์•ˆ๋…•ํ•˜์„ธ์š”,

์šฐ๋ฆฌ๋Š” ๊ท€ํ•˜์˜ ํ”ผ๋“œ๋ฐฑ์„ ์ฝ๊ณ  ๋ฌธ์ œ์ ์— ๋Œ€ํ•ด ๊ธฐ๋กํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@ericleigh007 XAML Designer๋Š” ๊ณ ๊ฐ ํ”ผ๋“œ๋ฐฑ์„ ์ˆ˜์ง‘ํ•œ ํ›„ ๊ฐœ๋ฐœ์ž์˜ ๋‚ด๋ถ€ ๋ฃจํ”„๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ๊ณ ๊ฐ์˜ ๊ณ ์ถฉ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Hot Reload์™€ Live Visual Tree๊ฐ€ ์ƒ์œ„๊ถŒ์— ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. In-app-toolbar๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ 3์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ๋˜ ๋‹ค๋ฅธ ์ƒ๋‹จ์ž…๋‹ˆ๋‹ค. XAML ๋””์ž์ด๋„ˆ๊ฐ€ ์–ธ์ œ ๋  ๊ฒƒ์ธ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์€ ๋งž์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ๋กœ๋“œ๋งต ์ƒ๊ฐ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์—”์ง€๋‹ˆ์–ด๋ง ๊ณ„ํš์— ๋”ฐ๋ฅด๋ฉด 3.0 RTM์„ ๋ฒ—์–ด๋‚ฌ์œผ๋ฏ€๋กœ 3.0 ์ดํ›„์ž…๋‹ˆ๋‹ค.

@pjmlp C++/WinRT์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ๊ทธ๋ฆผ๊ณผ IDL ์ถ”๊ฐ€ ํ•„์š”์„ฑ์— ๊ณต๊ฐํ•ฉ๋‹ˆ๋‹ค. C++/CX๊ฐ€ ์ด ์ธก๋ฉด์—์„œ ํ›จ์”ฌ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. C++/WinRT ํ™˜๊ฒฝ ๊ฐœ์„ ์€ ์šฐ๋ฆฌ๊ฐ€ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. Live Visual Tree ๋ฐ Hot Reload์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” C# ๋ฐ C++ ๋ชจ๋‘์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ C++์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํŠน์ • ํ•ญ๋ชฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์—”์ง€๋‹ˆ์–ด๋ง ๊ณ„ํš์— ๋”ฐ๋ฅด๋ฉด IDL ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ 3.0 RTM์—์„œ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.

@robloo , ์šฐ๋ฆฌ๋Š” WPF๋กœ ์ž‘์„ฑ๋œ ๋ฐ์Šคํฌํƒ‘ ์•ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. C++/WinRT๋Š” WinUI ์ƒํƒœ๊ณ„์˜ ์ฒซ ๋ฒˆ์งธ ์‹œ๋ฏผ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ WinUI๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ ์ ˆํ•œ ๋„๊ตฌ์™€ ์–ธ์–ด๋ฅผ dogfoodํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@Chiramisu "๋น„ MSIX ๋ฐฐํฌ ์ง€์›"์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ MSIX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Desktop WinUI 3 ์•ฑ์„ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ด๋Ÿฌํ•œ ํ•„์š”์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Desktop WinUI 3 ์•ฑ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด .EXE์—์„œ ๋‘ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์•ฑ์„ ์„ค์น˜ํ•˜๋ ค๋ฉด xcopy๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค(์•„๋ฌด๊ฒƒ๋„ ์„œ๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†์Œ). ๊ธฐ๋ณธ์ ์œผ๋กœ WiX์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง• ๋ฐ ์„ค์น˜ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@marb2000 ๋ฌธ์ œ๋ฅผ ์ธ์ •

์ง€๊ธˆ์€ ASP.NET, WFP ๋ฐ Win32์— ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Microsoft๊ฐ€ ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๊ฐ€ UAP => UWP์—์„œ์™€ ๊ฐ™์ด ์ˆ˜๋™ ๊ตฌ์„ฑ์— ๋Œ๋ฆฌ๊ณ  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์ง€์ณค์Œ์„ ๊นจ๋‹ซ๊ณ  UWP์— ๋Œ€ํ•œ ํ›„์† ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ „ํ™˜, .NET Framework์—์„œ .NET Core๋กœ, ๋˜๋Š” ์˜ˆ C++/CX => C++/WinRT.

์ด๊ฒƒ์€ Windows 8 ๋„์ž… ์ดํ›„ ์ง€์†์ ์ธ ์žฌ์ž‘์„ฑ์œผ๋กœ ์•ฝ๊ฐ„ ์‹ค๋ง๊ฐ์„ ๋Š๋ผ๋Š” Windows ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋ณด์ปฌ ๋ฉค๋ฒ„๋กœ์„œ ํ”ผ๋“œ๋ฐฑ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

@pjmlp Windows API์— ๋Œ€ํ•œ (ํ‘œ์ค€ ํ˜ธํ™˜) C++ ๋ž˜ํผ์ธ C++/WinRT๋ฅผ ์™œ ๋น„ํŒํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ(๋ฐ IDL ํŒŒ์ผ ๋“ฑ) ์—†์ด C++/WinRT๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pjmlp Windows API์— ๋Œ€ํ•œ (ํ‘œ์ค€ ํ˜ธํ™˜) C++ ๋ž˜ํผ์ธ C++/WinRT๋ฅผ ์™œ ๋น„ํŒํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ(๋ฐ IDL ํŒŒ์ผ ๋“ฑ) ์—†์ด C++/WinRT๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Visual Studio์—์„œ C++/CX์˜ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์— ๋น„ํ•ด ๋„๊ตฌ ์ง€์›์ด ์ „ํ˜€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

IDL ํŒŒ์ผ์— ๋Œ€ํ•œ ํŽธ์ง‘ ์ง€์›์ด ์—†์œผ๋ฉฐ intelisense๋Š” ๊ณ ์‚ฌํ•˜๊ณ  ๊ตฌ๋ฌธ ๊ฐ•์กฐ๋„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ƒ์„ฑ๋œ ๋ฒˆ์—ญ ๋‹จ์œ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๋ณ‘ํ•ฉํ•˜๋ผ๋Š” ์ง€์‹œ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค!

์ด๊ฒƒ์€ ์˜›๋‚ ์— ATL์„ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ISO C++ ํ˜ธํ™˜์„ฑ์€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. UWP๋Š” ์–ด์จŒ๋“  Windows ์ „์šฉ์ด๋ฉฐ ์–ธ์–ด ํ™•์žฅ์ด ์—†๋Š” C++ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

WRL์˜ ์œ ์ผํ•œ ์‚ฌ์šฉ์ž์˜€๋˜ WinDev๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ด๋ฅผ ์ง„ํ–‰ ์ƒํ™ฉ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์—†์Šต๋‹ˆ๋‹ค.

@pjmlp ,

ISO C++ ํ˜ธํ™˜์„ฑ์€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. UWP๋Š” ์–ด์จŒ๋“  Windows ์ „์šฉ์ด๋ฉฐ ์–ธ์–ด ํ™•์žฅ์ด ์—†๋Š” C++ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ C++ ํ”Œ๋žซํผ ๊ฐ„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. C++/CX์˜ ์ œํ•œ์€ ๋”์ฐํ–ˆ์Šต๋‹ˆ๋‹ค(์›์‹œ ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜, ๋ชจ์ž! ( ^ ) ๋“ฑ). ํ˜„์žฌ ๋Œ€๊ทœ๋ชจ C++/CLI interop ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ์ ์ด ๋„ˆ๋ฌด ๋งŽ์•„ ๋‚˜์—ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

IDL ํŒŒ์ผ์— ๋Œ€ํ•œ ํŽธ์ง‘ ์ง€์›์ด ์—†์œผ๋ฉฐ intelisense๋Š” ๊ณ ์‚ฌํ•˜๊ณ  ๊ตฌ๋ฌธ ๊ฐ•์กฐ๋„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ƒ์„ฑ๋œ ๋ฒˆ์—ญ ๋‹จ์œ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๋ณ‘ํ•ฉํ•˜๋ผ๋Š” ์ง€์‹œ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค!

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, C++/WinRT์™€ ๋„๊ตฌ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ 2๊ฐœ์˜ ๋ณ„๊ฐœ์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. C++/WinRT๋Š” WinRT API๋ฅผ ๋‘˜๋Ÿฌ์‹ผ C++ ๋ž˜ํผ์ž…๋‹ˆ๋‹ค. IDL์€ ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ, ๋”์ฐํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋‚˜๋น ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋Š” Windows ์ „์šฉ ์•ฑ์„ ์ž‘์„ฑํ•˜๊ณ  MSVC๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ํ‘œ์ค€ ์ค€์ˆ˜์— ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@MarkIngramUK

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, C++/WinRT์™€ ๋„๊ตฌ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ 2๊ฐœ์˜ ๋ณ„๊ฐœ์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. C++/WinRT๋Š” WinRT API๋ฅผ ๋‘˜๋Ÿฌ์‹ผ C++ ๋ž˜ํผ์ž…๋‹ˆ๋‹ค. IDL์€ ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ, ๋”์ฐํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋‚˜๋น ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋Š” MS-DOS 3.3 ์ดํ›„๋กœ Microsoft ํ”Œ๋žซํผ์„ ์ฝ”๋”ฉํ•ด ์™”์œผ๋ฉฐ 1992๋…„ Turbo C++ 1.0๊ณผ ํ•จ๊ป˜ ๋‚ด ๋„๊ตฌ ์ƒ์ž์— C++๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ C++ ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋œ ๋Œ€๋ถ€๋ถ„์˜ Borland ๋ฐ Microsoft ์ œํ’ˆ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. C++/WinRT์— ๋Œ€ํ•œ ๊ฐ•์˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์€ C++ Builder ๋ฐ Qt(Qt Designer ํฌํ•จ) ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜๊ณผ ์ผ์น˜ํ•˜๋ฉฐ, C++/CX๋Š” 25๋…„ ํ›„์— ๊ฒฐ๊ตญ ๋”ฐ๋ผ์žก์„ ๊ฒƒ์ด๋ผ๋Š” ์•ฝ์†์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ถ„๋ช…ํžˆ ์—ฌ๊ธฐ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ATL 3.0์ด ํฌํ•จ๋œ Visual C++ 6.0์„ ์›ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” .NET 5, WPF ๋ฐ Win32 ๋ฐ์Šคํฌํ†ฑ ๊ฒฝํ—˜์„ ๊ณ ์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ณ ๋ คํ•  ๊ฐ€์น˜๊ฐ€ ์—†๋Š” ์†Œ์ˆ˜์ž์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด C++/WinRT๋Š” ๊ทธ๋Œ€๋กœ ๋ฐ€๋ ธ์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ, C++/WinRT๋Š” ์ด์ œ ๊ฑฐ์˜ 4๋…„์ด ๋˜์—ˆ๊ณ , Microsoft๋Š” ๊ตฌ๋ฌธ ๊ฐ•์กฐ ๋ฐ ์ธํ…”๋ฆฌ์„ผ์Šค์— ๋Œ€ํ•œ ์ง€์›์กฐ์ฐจ ์ œ๊ณตํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ ์ค‘ ์ผ๋ถ€๊ฐ€ ๋ฉ”๋ชจ์žฅ++(๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ)๋กœ ๋งŒ๋“  ๊ฒƒ, ์ •๋ง์š”?

์šฐ์„  ์ˆœ์œ„๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ํ™•์‹คํžˆ ๋ณด์—ฌ์ฃผ๋ฉฐ Windows 8 ์ดํ›„๋กœ ๋„ˆ๋ฌด ๋งŽ์€ ์žฌ์ž‘์„ฑ์ด WinUI์— ์ฑ„ํƒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@pjmlp , ๋‹ค์‹œ ๋‹น์‹ ์€ ์ž˜๋ชป๋œ ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. C++/WinRT๋Š” C++์ด๋ฏ€๋กœ ๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ๊ฐ€ ์žˆ๊ณ  ์ธํ…”๋ฆฌ์„ผ์Šค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ C++ ์ฝ”๋“œ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

IDL ๊ตฌ๋ฌธ ๊ฐ•์กฐ ํ‘œ์‹œ ๋ฐ IDL์—์„œ .hpp ๋ฐ .cpp์— ๊ธฐ๋ณธ ๊ตฌํ˜„์„ ์ƒ์„ฑํ•˜๋„๋ก ์ œ์•ˆํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด IDE ํ†ตํ•ฉ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ํ—ค๋”์— ์ •์˜ ์—†์ด ์„ ์–ธ๋œ ํ•จ์ˆ˜๊ฐ€ ํ˜„์žฌ ๋…น์ƒ‰ ๋ฌผ๊ฒฐ์„ ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ํ”„๋กฌํ”„ํŠธ) ํ•˜๋‚˜ ์ƒ์„ฑ) C++/CX๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์€ ์ˆœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ IMO์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ C++/CX์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ณต์œ  ์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ๋‚ด ํ”„๋กœ์ ํŠธ๋ฅผ C++20์—์„œ C++17๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๋ฉด ๋„ˆ๋ฌด ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(ํฌ๊ธฐํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 20 ๋‚˜์—๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์€ ์ข‹์€ ๊ฒƒ์„ ์ค€๋‹ค).

C++/WinRT๋Š” ๋˜ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  WinRT ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•  ๋•Œ C++/CX๋ณด๋‹ค ํ›จ์”ฌ ๋œ ๋ฐฉํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

Qt ๋ฐ C++ Builder๋Š” ๋Œ€๋ถ€๋ถ„ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋Š” C++์—์„œ ๊ฒฝํ—˜์„ ์Œ“์•˜์Šต๋‹ˆ๋‹ค(Qt์—๋Š” Qt MOC๋ผ๋Š” IDL๊ณผ ์œ ์‚ฌํ•œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค). ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด VS๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. DevDiv์˜ ๋ˆ„๊ตฐ๊ฐ€๋กœ๋ถ€ํ„ฐ ๋” ๋งŽ์€ ์‚ฌ๋ž‘์ด ํ•„์š”ํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด์ „์— @sylveon ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์ž์œ ๋กญ๊ฒŒ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ˜„์žฌ MSVC ๋ฐ Clang/LLVM์œผ๋กœ ๋นŒ๋“œ). C++/CX ๋˜๋Š” ๊ธฐํƒ€ MS ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@MarkIngramUK ๋ฐ @syveon

๋‚˜๋Š” ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋๋ƒˆ๊ณ , WinUI ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜๊ณผ ๋„๊ตฌ ๊ฐœ์„ ์„ ์œ„ํ•ด ๋‚˜์™€ ๊ฐ™์€ ํ”ผ๋“œ๋ฐฑ์„ ํ™˜์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ ํ˜ธํ™˜ C++/WinRT๋กœ ์ฆ๊ฑฐ์šด ์‹œ๊ฐ„์„ ๋ณด๋‚ด์‹ญ์‹œ์˜ค.

'no ์ผ€์ดํ„ฐ๋ง' ์˜คํƒ€๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋‚˜์š”.. '์ง€๊ธˆ...'์ด ๋˜์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@pjmlp ๋‚˜๋Š” ๋‹น์‹ ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

1๋…„ ์ •๋„ ์ „์— UWP C++/CX ์ฝ”๋“œ๋ฅผ C++/WinRT๋กœ ์ด์‹ํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์‹์— ๋Œ€ํ•œ ์ธ์„ผํ‹ฐ๋ธŒ๋Š” MSVC++์— ๋‚ด๊ฐ€ ์•ฝ 18๊ฐœ์›” ์ „์— ๋ณด๊ณ ํ–ˆ์ง€๋งŒ ๋‹จ์ˆœํžˆ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๋Š” ๋ฒ„๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Clang์„ ์‚ฌ์šฉํ•˜์—ฌ UWP ์•ฑ์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Visual Studio๋Š” Clang์„ ์‚ฌ์šฉํ•˜์—ฌ UWP ์•ฑ ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. C++/WinRT์˜ "ISO C++ ์ „์šฉ" ์ด์ ์ด ๋ฐ”๋กœ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— C++/WinRT๋ฅผ ํ†ตํ•ด C++/CX ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ์ด์‹ํ•˜๋Š” ๊ฒƒ์€ 20๋…„ ์ „์œผ๋กœ ์‹œ๊ฐ„ ์—ฌํ–‰์„ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๋ณธ์งˆ์ ์œผ๋กœ Android/iOS ์•ฑ์„ Windows๋กœ ์ด์‹ํ•˜๋Š” ๊ฒƒ์„ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. Android/iOS์šฉ ๊ฐœ๋ฐœ ์™ธ์— Windows ์•ฑ ๊ฐœ๋ฐœ์ธ clusterfuck์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ์™€ ๊ฐ™์€ ์ž‘์€ ์ƒ์ ์—์„œ ๋‹จ์ˆœํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@MarkIngramUK ๋„๊ตฌ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ ์ ˆํ•œ ํˆด๋ง ๋ถ€์กฑ์„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด์ œ ๋‚ด ๋ง์„ ๋งˆ์นœ ํ›„ ๋‚ด ์˜๊ฒฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

C++/CX์™€ ํ•จ๊ป˜ WinUI 3 ์‚ฌ์šฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด ๋„๊ตฌ๋ฅผ ๊ตฌ์ถ•ํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋Š” ํšŒ์‚ฌ์—์„œ C++/WinRT์šฉ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด C++/WinRT๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ™•์‹คํžˆ ์•„๋‹™๋‹ˆ๋‹ค.

@pjmlp ๋‚˜๋Š” ๋‹น์‹ ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

1๋…„ ์ •๋„ ์ „์— UWP C++/CX ์ฝ”๋“œ๋ฅผ C++/WinRT๋กœ ์ด์‹ํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์‹์— ๋Œ€ํ•œ ์ธ์„ผํ‹ฐ๋ธŒ๋Š” MSVC++์— ๋‚ด๊ฐ€ ์•ฝ 18๊ฐœ์›” ์ „์— ๋ณด๊ณ ํ–ˆ์ง€๋งŒ ๋‹จ์ˆœํžˆ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๋Š” ๋ฒ„๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Clang์„ ์‚ฌ์šฉํ•˜์—ฌ UWP ์•ฑ์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Visual Studio๋Š” Clang์„ ์‚ฌ์šฉํ•˜์—ฌ UWP ์•ฑ ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. C++/WinRT์˜ "ISO C++ ์ „์šฉ" ์ด์ ์ด ๋ฐ”๋กœ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— C++/WinRT๋ฅผ ํ†ตํ•ด C++/CX ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ์ด์‹ํ•˜๋Š” ๊ฒƒ์€ 20๋…„ ์ „์œผ๋กœ ์‹œ๊ฐ„ ์—ฌํ–‰์„ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๋ณธ์งˆ์ ์œผ๋กœ Android/iOS ์•ฑ์„ Windows๋กœ ์ด์‹ํ•˜๋Š” ๊ฒƒ์„ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. Android/iOS์šฉ ๊ฐœ๋ฐœ ์™ธ์— Windows ์•ฑ ๊ฐœ๋ฐœ์ธ clusterfuck์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ์™€ ๊ฐ™์€ ์ž‘์€ ์ƒ์ ์—์„œ ๋‹จ์ˆœํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@MarkIngramUK ๋„๊ตฌ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ ์ ˆํ•œ ํˆด๋ง ๋ถ€์กฑ์„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด์ œ ๋‚ด ๋ง์„ ๋งˆ์นœ ํ›„ ๋‚ด ์˜๊ฒฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

C++/CX์™€ ํ•จ๊ป˜ WinUI 3 ์‚ฌ์šฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด ๋„๊ตฌ๋ฅผ ๊ตฌ์ถ•ํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋Š” ํšŒ์‚ฌ์—์„œ C++/WinRT์šฉ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด C++/WinRT๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ™•์‹คํžˆ ์•„๋‹™๋‹ˆ๋‹ค.

๊ถ๊ธˆํ•ด์„œ 18๊ฐœ์›” ์ „์— ๋ณด๊ณ ๋œ ๋ฒ„๊ทธ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์–ด๋”˜๊ฐ€์— ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…• ๋ฏธ๊ตฌ์—˜,
___Android์šฉ Outlook์—์„œ ํšŒ์‹ ํ•œ ํ›„ ๋”์ฐํ•œ ์ƒํ™ฉ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.__

Winrt ํ”Œ๋žซํผ์ด WINUI๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋žซํผ์ด๋ผ๊ณ  ๋ง์”€ํ•˜์…จ๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฐ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ๋ชฉํ‘œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””์–ด๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/binding-property

์—ฌ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ํŠนํžˆ XAML ์ŠคํŠœ๋””์˜ค์™€ ๊ฐ™์€ ์กด์žฌํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ XAML ๋””์ž์ด๋„ˆ์— ๋Œ€ํ•ด ํ™•์‹ ์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (๋งŒ์•ฝ IValueConverter ์‚ฌ์šฉํ•˜๋Š” XAML์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด ...

์ด์ „ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด C++/WinRT ์ž์ฒด์˜ C++17 ํ‘œ์ค€ ์ค€์ˆ˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ Microsoft์˜ Visual C++ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— C++/CX ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ C++/WinRT๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ธ์„ผํ‹ฐ๋ธŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„. ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์™„์ „ํžˆ ๋ฐ”๋€” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Visual Studio๋Š” Windows ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ์ „ํ™˜์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ฐ์Šคํฌํ†ฑ ์•ฑ์—์„œ ์ง€์›๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์ง€์›๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์ œ๊ฒŒ ๋ฏธ์Šคํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. Clang ์ง€์›์€ Windows ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์‹ค์ œ๋กœ ํ™•์žฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Clang์„ ์‚ฌ์šฉํ•˜์—ฌ Android ๋ฐ iOS์šฉ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Clang์„ ์‚ฌ์šฉํ•˜์—ฌ Windows์šฉ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ C++/CX์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•˜๋Š” ๋งค์šฐ ์ข‹์€ ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ Visual Studio ๊ธฐ๋Šฅ ์š”์ฒญ ์ด ์ด๋ฏธ ์กด์žฌํ•˜์ง€๋งŒ Visual Studio ํŒ€์—์„œ ์ง€๊ธˆ๊นŒ์ง€ ์•„๋ฌด ๊ฒƒ๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

C++ ํ‘œ์ค€ ์ค€์ˆ˜๊ฐ€ ์žˆ๊ณ  ๋ฐ์Šคํฌํ†ฑ ์•ฑ์šฉ Visual Studio์—์„œ Clang ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  Windows ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ Clang ์ง€์›์„ ์ œ๊ณตํ•˜์—ฌ C++/CX์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ์‹ค์ œ ์ด์œ ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

ํ‘œ์ค€ ์ค€์ˆ˜๋Š” ์†Œ๋น„์ž์—๊ฒŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒ์‚ฐ์ž๊ฐ€ MSVC๋ฅผ ๊ณ ์ˆ˜ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด. CLToolExe ์†์„ฑ์„ .vcxproj ํŒŒ์ผ์˜ clang-cl ๊ฒฝ๋กœ๋กœ ์„ค์ •ํ•˜์—ฌ clang-cl์„ "๊ฐ•์ œ"ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋Š” LLVM ๋„๊ตฌ ์„ธํŠธ์—์„œ ์ด๋ฏธ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Œ ). UWP ํ”„๋กœ์ ํŠธ์—์„œ ์ด๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์‹œ๋„ํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

XAML ๋ฐ C++/WinRT ์ƒ์‚ฐ์ž ๋„๊ตฌ๊ฐ€ ๋ฐ์Šคํฌํ†ฑ ํ”„๋กœ์ ํŠธ์—์„œ ์ž ๊ธˆ ํ•ด์ œ๋˜๋ฉด ๋‚˜์—๊ฒŒ๋„ ๋ฌธ์ œ๊ฐ€ ์ค„์–ด๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ackh Clang 11์—์„œ ๋นŒ๋“œํ•  UWP ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
image

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

  • ํ”„๋กœ์ ํŠธ๋ฅผ ์–ธ๋กœ๋“œํ•˜๊ณ  <Project> ์•„๋ž˜์˜ ์ฒซ ๋ฒˆ์งธ ์ง€์‹œ๋ฌธ์œผ๋กœ ๋‹ค์Œ ์ง€์‹œ๋ฌธ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  <PropertyGroup>
    <CLToolExe>C:\Program Files\LLVM\bin\clang-cl.exe</CLToolExe>
  </PropertyGroup>
  • <AdditionalOptions>%(AdditionalOptions) /bigobj</AdditionalOptions> ๋ฅผ <AdditionalOptions>%(AdditionalOptions) /bigobj -Xclang -std=c++20 -mcx16</AdditionalOptions> ๋ฐ”๊พธ๊ธฐ
  • <PreprocessorDefinitions>WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions> ๋ฅผ <PreprocessorDefinitions>_SILENCE_CLANG_COROUTINE_MESSAGE;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions> ๋ฐ”๊พธ๊ธฐ
  • ๋ฐ”๋กœ ์•„๋ž˜์— <ModuleOutputFile />
  • ํ”„๋กœ์ ํŠธ ๋‹ค์‹œ ๋กœ๋“œ
  • ์ง“๋‹ค

๊ทธ๋Ÿฌ๋‚˜ ๋ช‡ ๊ฐ€์ง€ ํ•จ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ์ˆ˜์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ์ˆ˜๋ฅผ ๋ณ€๊ฒฝ/์ œ๊ฑฐํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์–ด๋–ค ์ด์œ ๋กœ Clang์€ 32๋น„ํŠธ๋กœ 64๋น„ํŠธ ๊ฐœ์ฒด ํŒŒ์ผ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. CLI์— -m32 ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • Clang์€ ์•„์ง ์ฝ”๋ฃจํ‹ด์„ ์™„์ „ํžˆ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • VS๋Š” ์ฆ๋ถ„ ๋ฐ/๋˜๋Š” ๋ณ‘๋ ฌ์ด ์•„๋‹Œ ์•ฑ์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ๋Œ๊ธฐ ์œ„ํ•ด https://github.com/microsoft/ProjectReunion ์—์„œ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@sylveon ์ด ์ง€์นจ์„ ๊ฒŒ์‹œ

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