๋ถ๋ฅ:์ํํธ์จ์ด
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. ๊ฐ์[ํธ์ง]
C#๊ณผ .NET Framework๋ฅผ ๋ฆฌ๋
์ค์์๋ ์ธ ์ ์๊ฒ ํด์ฃผ๋ Mono ํ๋ก์ ํธ์์ ์์๋ ํ๋ ์์ํฌ์ด๋ ํ์ฌ Xamarin์ ๋ฆฌ๋
์ค๋ฅผ ๊ณต์ ์ง์ํ๊ณ ์์ง ์๋ค. ํ๊ตญ์ด๋ก๋ ๋์ถฉ ์๋ง๋ฆฐ์ด๋ผ๊ณ ์ฝ๊ณ ์ฐ๋ฉด ์ด์ง๊ฐํ๋ฉด ๋ป์ด ํตํ๋ค. ์ค์ ๋ฐ์์ ์ฆ์ ๋งใน๋ฆฐ์ ๊ฐ๊น์ด ํธ.
์๋๋ก์ด๋๊ฐ ๋ฆฌ๋ ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ๊ณ๋ฅผ ์ง๋ฐฐํ๊ณ ์๋์ฐํฐ์ด ์ฃฝ์ ์ค์ ๋ง์์์๋ ์ด์ ๋์ํ์ฌ .NET Framework์ C#์ผ๋ก ์๋๋ก์ด๋์ ์์ดํฐ์ ๊ฐ๋ฐํ๊ณ ์ ํ๋ ์๋ ์ฐจ์์์ Xamarin์ด ๋ฑ์ฅํ์๋ค.
์๋๋ก์ด๋์ iOS์ API๊ฐ ์ค๋น๋์ด ์๊ธฐ ๋๋ฌธ์ ํฌ๋ก์ค ํ๋ซํผ ์ถ์ ์ฝ๊ฐ ๋ฃ์์ ์๋ ์ ๋๋ค. ํ๋ฒ ์์ฑํ ํผ๊ณผ ๋ก์ง์ด ์๋๋ก์ด๋์ ์์ดํฐ์์ ์ ์ฌํ๊ฒ ์๋ํ๊ณ ๋์์ ์ ์ง๋ณด์๊ฐ ๊ฐ๋ฅํ๋ค.
Mono๋ฅผ ์ฃผ๋ํด์จ ๋ฉ์์ฝ๊ณ ๋ ํ๋ฆฌ๋๋จผ๊ณผ ๋ฏธ๊ตฌ์ ๋ฐ ์ด์นด์ฌ(CTO)๊ฐ ์ค๋ฆฝํ์์ผ๋ฉฐ 2016๋ 2์ 24์ผ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ์ธ์, 2016๋ 3์ 31์ผ ์์ค๋ฅผ ๊ณต๊ฐํ์๋ค.
2020๋ ํ๋ฐ๊ธฐ์ ๋ฐ๋ก ๋ถ๋ฆฌ๋์ด ์๋ .NET ํ๋ซํผ๋ค์ด ํ๋๋ก ํฉ์ณ์ง๋ ๊ณผ์ ์ ์ด์์ธ .NET 5๊ฐ 2020๋ ํ๋ฐ๊ธฐ์ ์ถ์ํ ํ ์ผ๋ง ์ง๋์ง ์์ ์ดํ ๋ฒ์ ์ธ .NET 6 ์ถ์์ ๋ง์ถฐ Xamarin ํ๋ ์์ํฌ์ ๋ณํ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ณ ๋์๋ค. # ํ์ฌ ์ด ํ๋ก์ ํธ๋ .NET MAUI(Multi platform App UI)๋ผ๊ณ ๋ฐํ๋์์ผ๋ฉฐ ์ธ๊ธฐ์๋ ์๋ง๋ฆฐ์ ๋ฆฌ๋ธ๋๋ฉํ ์ ๋๋ก ๋ณผ ์ ์๋ค.
์๋๋ก์ด๋๊ฐ ๋ฆฌ๋ ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ๊ณ๋ฅผ ์ง๋ฐฐํ๊ณ ์๋์ฐํฐ์ด ์ฃฝ์ ์ค์ ๋ง์์์๋ ์ด์ ๋์ํ์ฌ .NET Framework์ C#์ผ๋ก ์๋๋ก์ด๋์ ์์ดํฐ์ ๊ฐ๋ฐํ๊ณ ์ ํ๋ ์๋ ์ฐจ์์์ Xamarin์ด ๋ฑ์ฅํ์๋ค.
์๋๋ก์ด๋์ iOS์ API๊ฐ ์ค๋น๋์ด ์๊ธฐ ๋๋ฌธ์ ํฌ๋ก์ค ํ๋ซํผ ์ถ์ ์ฝ๊ฐ ๋ฃ์์ ์๋ ์ ๋๋ค. ํ๋ฒ ์์ฑํ ํผ๊ณผ ๋ก์ง์ด ์๋๋ก์ด๋์ ์์ดํฐ์์ ์ ์ฌํ๊ฒ ์๋ํ๊ณ ๋์์ ์ ์ง๋ณด์๊ฐ ๊ฐ๋ฅํ๋ค.
Mono๋ฅผ ์ฃผ๋ํด์จ ๋ฉ์์ฝ๊ณ ๋ ํ๋ฆฌ๋๋จผ๊ณผ ๋ฏธ๊ตฌ์ ๋ฐ ์ด์นด์ฌ(CTO)๊ฐ ์ค๋ฆฝํ์์ผ๋ฉฐ 2016๋ 2์ 24์ผ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ์ธ์, 2016๋ 3์ 31์ผ ์์ค๋ฅผ ๊ณต๊ฐํ์๋ค.
2020๋ ํ๋ฐ๊ธฐ์ ๋ฐ๋ก ๋ถ๋ฆฌ๋์ด ์๋ .NET ํ๋ซํผ๋ค์ด ํ๋๋ก ํฉ์ณ์ง๋ ๊ณผ์ ์ ์ด์์ธ .NET 5๊ฐ 2020๋ ํ๋ฐ๊ธฐ์ ์ถ์ํ ํ ์ผ๋ง ์ง๋์ง ์์ ์ดํ ๋ฒ์ ์ธ .NET 6 ์ถ์์ ๋ง์ถฐ Xamarin ํ๋ ์์ํฌ์ ๋ณํ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ณ ๋์๋ค. # ํ์ฌ ์ด ํ๋ก์ ํธ๋ .NET MAUI(Multi platform App UI)๋ผ๊ณ ๋ฐํ๋์์ผ๋ฉฐ ์ธ๊ธฐ์๋ ์๋ง๋ฆฐ์ ๋ฆฌ๋ธ๋๋ฉํ ์ ๋๋ก ๋ณผ ์ ์๋ค.
2. ์ธ๋ถ์ฌํญ[ํธ์ง]
2.1. Xamarin.Android[ํธ์ง]
Mono for Android ์์ ๊ฐ๋ช
๋์๋ค. ์๋๋ก์ด๋์ API๋ฅผ C# ์คํ์ผ์ API๋ก ๋ฐ๊พธ์ด ๊ตฌํํ์๋ค.
์ดํ 2021๋ 11์์ ๊ณต์ ๋ฆด๋ฆฌ์ฆ ์์ ์ธ .NET 6์ .NET for Android๋ ๋ช ์นญ์ผ๋ก ๋ฐ๋์ด ํฌํจ๋ ์์ ์ด๋ค.
์ดํ 2021๋ 11์์ ๊ณต์ ๋ฆด๋ฆฌ์ฆ ์์ ์ธ .NET 6์ .NET for Android๋ ๋ช ์นญ์ผ๋ก ๋ฐ๋์ด ํฌํจ๋ ์์ ์ด๋ค.
2.2. Xamarin.iOS[ํธ์ง]
MonoTouch ์์ ๊ฐ๋ช
๋์๋ค. iOS์ API๋ฅผ C# ์คํ์ผ์ API๋ก ๋ฐ๊พธ์ด ๊ตฌํํ์๋ค.
์ดํ 2021๋ 11์์ ๊ณต์ ๋ฆด๋ฆฌ์ฆ ์์ ์ธ .NET 6์ .NET for iOS๋ ๋ช ์นญ์ผ๋ก ๋ฐ๋์ด ํฌํจ๋ ์์ ์ด๋ค.
์ดํ 2021๋ 11์์ ๊ณต์ ๋ฆด๋ฆฌ์ฆ ์์ ์ธ .NET 6์ .NET for iOS๋ ๋ช ์นญ์ผ๋ก ๋ฐ๋์ด ํฌํจ๋ ์์ ์ด๋ค.
2.3. Xamarin.Mac[ํธ์ง]
MacOS ์ํฌํธ ๋ฒ์ . ํด์ธ์์ ์ด๋ฅผ ์ด์ฉํ ์ ๋ฃ์ฑ๋ ์ถ์๋์ด ์๋ค.
2.4. Xamarin.Forms[ํธ์ง]
2014๋
๋ค๋ฆ๊ฒ ์ถ์๋ Xamarin.Forms ๋ ์ถ์๋น์์๋ ๊ฐ๋ฐ์๋ค์ ํธ์์ ์ป์์ผ๋ฉฐ Cross-Platform ๊ฐ๋ฐ์ด ์ด๋ฃจ์ด์ก๋ค. MS์ WPF์ C#๊ณผ XAML๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ณตํต์ ์ ์์ผ๋ WPF์ Xamain/MAUI์ widget๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์์ด ์ธ๋ถ์ ์ธ ์ฐจ์ด์ ์ด ์์ด ๊ฑฐ์ ๋ค๋ฅธ ํ๋์์ํฌ๋ผ ํ ์ ์์ด ํ์ต๋์ด ์ฆ๊ฐํ๋ค๋ ๋จ์ ์ด์๋ค.
new Label() ํ๋ฉด Android iOSWindowsPhone WPF UWP macOS Tizen ์ผ๋ก ๋ชจ๋ ๋ฒ์ญํด์ค๋ค. ์จ์ฐจ๋ค ๋ค์ํ nuget ํจํค์ง๋ค๊ณผ ํจ๊ป ์ด์ฉํ๋ฉด 90% ์ด์์ ์ฝ๋๋ฅผ ๊ณต์ ํ ์ ์์ผ๋ฉฐ 10%์ดํ์ OS ๋ณ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ฌ๋ฌ OS ์ฉ ๋ค์ดํฐ๋ธ ์ฑ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค. WPF ์ ๋ง์ฐฌ๊ฐ์ง๋ก Code ์คํ์ผ๊ณผ Xaml (์ฌ๋ฏ) ์คํ์ผ์ด ์๋ค. ์ฅ๋จ์ ์ด ์์ผ๋ฉฐ ๊ฐ๋ฐํ๊ฒฝ/์ทจํฅ์ ๋ฐ๋ผ ์ ํํ๋ฉด ๋๋ค.
new Label() ํ๋ฉด Android iOS
๊ทธ๋ฌ๋, ์์ ์ด์ผ๊ธฐ๋ ์์ชฝ ํ๋ซํผ์ ์์ ๋กญ๊ฒ ๋ค๋ฃฐ ์ธ๋ ฅ์ด ์๋ ๊ฐ๋ฐ์ฌ์ ํด๋นํ๊ณ , iOS/Android ๊ฐ๋ฐ ์ธ๋ ฅ๊ณผ ๊ธฐํ์๊ฐ ๊ฐ์ถฐ์ ธ์๋ ํ์ ๊ฒฝ์ฐ ์์ง๊น์ง๋ ๊ธฐ์กด์ ๋ค์ดํฐ๋ธ๋ก ํ๋ ๊ฒ์ด ๋น ๋ฅผ ์ ์๋ค. ๊ฒ์์ ๊ฒฝ์ฐ ๊ธฐ์กด ๋ค์ดํฐ๋ธ์์ ์ ๊ณต๋๋ UI๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์๊ณ , ์์ ํด๋น ๊ฒ์์ ๋ง๋ UI ๋ฅผ ๋ฐ๋ฅ๋ถํฐ ๊ฐ๋ฐํ๋๊ฒ์ด ๋๋ถ๋ถ์ด๊ธฐ์ ์ ๋ํฐ ๊ฐ์ Cross-Platform ๊ฐ๋ฐ์ด ์ ๋ฆฌํ์ง๋ง, ๊ฒ์ ์ธ์ ์ฑ๋ค์ ๋ค์ดํฐ๋ธ์์ ์ ๊ณตํ๋ UI๋ฅผ ์ฌ์ฉํด์ผ ํ๊ธฐ์ ์คํ๋ ค ์์
์ด ๋์ด๋๋ ๊ฒฝ์ฐ๋ ์๋ค.
์๋ฅผ๋ค์ด, ๋ฒํผ ํ๋์ ์ด๋ฏธ์ง๋ฅผ ์ ํ๋ ์์ ๋ง ๋ณด๋๋ผ๋, ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ฝ๋๋ ๊ณต์ ํ์ง๋ง ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ ๋๋ถ๋ถ ์๋ฒ์ฐ๋์ด๋ ํ์ด์ง ์ ํ์ด๊ธฐ ๋๋ฌธ์ ์ ์ด์ ๋ช ์ค ์ ์ฝ๋์ง๋ ์์ผ๋ฉฐ, ๋ฐ๋ฉด์ ์๋๋ก์ด๋์ ํด๋น ๋ฒํผ์ ํฌํจํ๊ณ ์๋ ํ์ด์ง์ layout ํ์ผ ์์ , ํด๋น ๋ฒํผ์ ์ํ๋ณ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ค selector ํ์ผ ์์ , iOS ์ ํด๋น ๋ฒํผ์ ์ํ๋ณ ์ด๋ฏธ์ง ์ ์ด ์ฝ๋์์ ์ ํด์ผํ๋๋ฐ, ์ด๋ ๊ฒ ์์ ํ๊ณ ๋ ๊ธฐ์กด์ ๋ค์ดํฐ๋ธ UI์ ์ธ๋ถ์ ์ธ ์ค์ ์ 100% ๊ตฌํํ์ง ๋ชปํ๋ ๋ถ๋ถ๋ค์ด ์์ผ๋ฉฐ, ๋ฒํผ ํ๋ ํ๋ ๋ง๋ค ์ด๋ ๊ฒ C# style, Android style, iOS style ์ ์๋ค๊ฐ๋ค ํ๋ฉด์ ์์ ํด์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ดํฐ๋ธ SDK์ ๊ธฐ๋ณธ์ด๋ผ ํ ์ ์๋ WYSIWYG ๋ฐฉ์์ ๊ฐ๋ฐ๋ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ๋ค.
๋ฟ๋ง์๋๋ผ, ์ฑ์ ํฌ๊ธฐ์ ์์ด์๋ ๊ธฐ์กด์ ๋ค์ดํฐ๋ธ๋ก ๋ง๋ค๋ฉด ๋ช KB๋ก ๋๋๋ HelloWorld ์ ๋๋ง ๊ตฌํํด๋ ์์คํ iPhone ์ฉ๋์ 60MB ๋ ์ฐจ์งํด๋ฒ๋ฆฌ๋ฉฐ, ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด ์๋ฐฑMB ๋ฅผ ์ฐจ์งํ๋๋ฐ... ๊ธฐ์กด ๋ฐฉ์์ผ๋ก๋ ๋ช์ญMB ๋ก ๋๋ ๋ด์ฉ์ด๋ค. ๊ฒฐ๊ตญ ๊ฒ์๋ ์๋ ์ฑ์ด ๊ฒ์์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ก ๋ค์ด๋๋ ๋ต์๋ ์ํฉ์ผ๋ก ์ด์ด์ง๊ธฐ ์ฝ๋ค.[1]๊ทธ๋ฐ๊ฑด ํฌ์ผ๋ชฌ ๊ณ ๋ก ์ถฉ๋ถํด
๊ฒฐ์ ์ ์ผ๋ก ๋ ํผ๋ฐ์ค๊ฐ ๋๋ฌด๋๋ ๋ถ์กฑํ๋ค. ๋น์ฅ '๋ฒํผ ์ด๋ฏธ์ง ์ธํ ํ๊ณ ํฌ๊ธฐ ๋ฐ๊พธ๋ ๋ฒ'์ ์ฐพ์๋ณด๋ฉด ๊นจ๋ซ๊ฒ ๋๋ค. ๊ตญ๋ด ๋์๋ ์ ๋ฌดํ๋ฉฐ, ๊ณต์ ํํ์ด์ง ์๋ฃ๋ ์ ํ์ด๋ ๊ตฌ๊ธ์ ๊ณต์ ์๋ฃ์ ๋นํด ๋๋ฌด๋๋ ๋ถ์คํ๊ธฐ์ ๊ตฌ๊ธ๊ฐ์ ์์ค์ ๋ ํผ๋ฐ์ค๋ฅผ ๊ธฐ๋ํ๊ณ ๊ฐ๋ฐํ๋ค๊ฐ... Stack Overflow์์กฐ์ฐจ๋ ์ ๋๋ก ๋ ์ค๋ช ์ด ์์ด์, ์ค๋ฅ๊ฐ ํ๋ ์๊ธธ ๋๋ง๋ค Xamarin ๊ฐ๋ฐ์ง๊ณผ ์์ด๋ก ์ํต์ ํด๊ฐ๋ฉฐ ๊ฐ๋ฐํ๋ ๊ฐ์ฒ์์ ๊ธฐ๋ถ์ ๋๋ ์ ์์ผ๋ฏ๋ก ํ์ฌ์ ํ๋ก์ ํธ์ ๋์ ์ ํ๊ธฐ ์ ์ ์ถฉ๋ถํ ์ฐ๊ตฌ๊ฐ ํ์ํ๋ค. ์ฑ ์ด ํ๋๊ฐ ๋์ค๊ณ ์ต์ ํ๊ฐ ์ด๋ ์ ๋ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์. [2]
์๋ฅผ๋ค์ด, ๋ฒํผ ํ๋์ ์ด๋ฏธ์ง๋ฅผ ์ ํ๋ ์์ ๋ง ๋ณด๋๋ผ๋, ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ฝ๋๋ ๊ณต์ ํ์ง๋ง ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ ๋๋ถ๋ถ ์๋ฒ์ฐ๋์ด๋ ํ์ด์ง ์ ํ์ด๊ธฐ ๋๋ฌธ์ ์ ์ด์ ๋ช ์ค ์ ์ฝ๋์ง๋ ์์ผ๋ฉฐ, ๋ฐ๋ฉด์ ์๋๋ก์ด๋์ ํด๋น ๋ฒํผ์ ํฌํจํ๊ณ ์๋ ํ์ด์ง์ layout ํ์ผ ์์ , ํด๋น ๋ฒํผ์ ์ํ๋ณ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ค selector ํ์ผ ์์ , iOS ์ ํด๋น ๋ฒํผ์ ์ํ๋ณ ์ด๋ฏธ์ง ์ ์ด ์ฝ๋์์ ์ ํด์ผํ๋๋ฐ, ์ด๋ ๊ฒ ์์ ํ๊ณ ๋ ๊ธฐ์กด์ ๋ค์ดํฐ๋ธ UI์ ์ธ๋ถ์ ์ธ ์ค์ ์ 100% ๊ตฌํํ์ง ๋ชปํ๋ ๋ถ๋ถ๋ค์ด ์์ผ๋ฉฐ, ๋ฒํผ ํ๋ ํ๋ ๋ง๋ค ์ด๋ ๊ฒ C# style, Android style, iOS style ์ ์๋ค๊ฐ๋ค ํ๋ฉด์ ์์ ํด์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ดํฐ๋ธ SDK์ ๊ธฐ๋ณธ์ด๋ผ ํ ์ ์๋ WYSIWYG ๋ฐฉ์์ ๊ฐ๋ฐ๋ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ๋ค.
๋ฟ๋ง์๋๋ผ, ์ฑ์ ํฌ๊ธฐ์ ์์ด์๋ ๊ธฐ์กด์ ๋ค์ดํฐ๋ธ๋ก ๋ง๋ค๋ฉด ๋ช KB๋ก ๋๋๋ HelloWorld ์ ๋๋ง ๊ตฌํํด๋ ์์คํ iPhone ์ฉ๋์ 60MB ๋ ์ฐจ์งํด๋ฒ๋ฆฌ๋ฉฐ, ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด ์๋ฐฑMB ๋ฅผ ์ฐจ์งํ๋๋ฐ... ๊ธฐ์กด ๋ฐฉ์์ผ๋ก๋ ๋ช์ญMB ๋ก ๋๋ ๋ด์ฉ์ด๋ค. ๊ฒฐ๊ตญ ๊ฒ์๋ ์๋ ์ฑ์ด ๊ฒ์์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ก ๋ค์ด๋๋ ๋ต์๋ ์ํฉ์ผ๋ก ์ด์ด์ง๊ธฐ ์ฝ๋ค.[1]
๊ฒฐ์ ์ ์ผ๋ก ๋ ํผ๋ฐ์ค๊ฐ ๋๋ฌด๋๋ ๋ถ์กฑํ๋ค. ๋น์ฅ '๋ฒํผ ์ด๋ฏธ์ง ์ธํ ํ๊ณ ํฌ๊ธฐ ๋ฐ๊พธ๋ ๋ฒ'์ ์ฐพ์๋ณด๋ฉด ๊นจ๋ซ๊ฒ ๋๋ค. ๊ตญ๋ด ๋์๋ ์ ๋ฌดํ๋ฉฐ, ๊ณต์ ํํ์ด์ง ์๋ฃ๋ ์ ํ์ด๋ ๊ตฌ๊ธ์ ๊ณต์ ์๋ฃ์ ๋นํด ๋๋ฌด๋๋ ๋ถ์คํ๊ธฐ์ ๊ตฌ๊ธ๊ฐ์ ์์ค์ ๋ ํผ๋ฐ์ค๋ฅผ ๊ธฐ๋ํ๊ณ ๊ฐ๋ฐํ๋ค๊ฐ... Stack Overflow์์กฐ์ฐจ๋ ์ ๋๋ก ๋ ์ค๋ช ์ด ์์ด์, ์ค๋ฅ๊ฐ ํ๋ ์๊ธธ ๋๋ง๋ค Xamarin ๊ฐ๋ฐ์ง๊ณผ ์์ด๋ก ์ํต์ ํด๊ฐ๋ฉฐ ๊ฐ๋ฐํ๋ ๊ฐ์ฒ์์ ๊ธฐ๋ถ์ ๋๋ ์ ์์ผ๋ฏ๋ก ํ์ฌ์ ํ๋ก์ ํธ์ ๋์ ์ ํ๊ธฐ ์ ์ ์ถฉ๋ถํ ์ฐ๊ตฌ๊ฐ ํ์ํ๋ค. ์ฑ ์ด ํ๋๊ฐ ๋์ค๊ณ ์ต์ ํ๊ฐ ์ด๋ ์ ๋ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์. [2]
์ ๋ฐ๋ก ์ ๋ฆฌ๋ชจ๋ฆญ์ค ๊ฐ๋ฐ ์ด์ผ๊ธฐ ์ ์ํตํ๋ ์ด์ผ๊ธฐ๋ก Xamarin.Android ์ Xamarin.iOS ๋ฅผ ์ฌ์ฉํ์ฌ 5๋ง๊ฑด์ด์์ (2017.2 ๊ธฐ์ค) ๋ค์ด๋ก๋๋ฅผ ๊ธฐ๋กํ ์ฑ๊ณต์ ์ธ ์ฑ์ ๋ง๋ ๋ ธํ์ฐ์ ์ํ์ฐฉ์ค๊ฐ ๋ค์ด์๋ ๊ธ์ด๋ค. ํ์ง๋ง Xamarin.Forms ๋ฅผ ์ ๊ทน ๋์ ํ์ง ์์๊ธฐ์ ์๋ง๋ฆฐ์ ์ฅ์ ์ ๊ทน๋ํํ๋ค๊ณ ํ ์์๋ค.(๊ฐ๋ฐ์์์์ ์ XF๊ฐ ์์๋๊ฒ์ผ๋ก ๋ณด์) ๋ํ ๊ธฐ์กด axml ๊ณผ storyboard ๊ฐ์ UI ๊ตฌ์ฑ์ง์์ด ์์ด์ผ ์คํ๋ ค XF ๋ฅผ ์ ๊ทน ๋์ ํ๊ฒ ๋๋ฉฐ ์ฝ๊ฐ์ custom renderer ์ฝ๋๋ง ์ถ๊ฐํ๋ฉด ๋ชป๋ง๋ค UI ๊ฐ ์๋ค. new StackLayout().to ๋ผ๊ณ ์น๋ฉด ๊ฐ์ข ์ ๋๋ฉ์ด์ ๊ด๋ จ ๋ฉ์๋๋ค์ด ๋์จ๋ค.
apk์ ipa์ ๊ธฐ๋ณธ์ฉ๋์ 10~20MB์ด๋ฉฐ ๊ณง ๋์ฌ XF 2.4์ 2.5[3] ์์ ์๋๋ก์ด๋ ๊ด๋ จ ์ต์ ํ๊ฐ ๋์ฑ ์ด๋ฃจ์ด์ง ์์ ์ด๋ค. ๊ตฌ๊ธ์์ ์๋ฌธ๊ฒ์์ผ๋ก ์๋ฃ๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ถ๋ถ์ ๋ฌธ์ ๋ค์ด ์ด๋ฏธ ๋ ผ์๋์ด ์๋ค.
Xamarin Forms๋ ๊ฐ๋ฐ์ง ์ธก์์๋ ํ๋ซํผ ์์กด๋๊ฐ ์ ๊ณ ์ปค์คํ UI์ ์ค์๋๊ฐ ์ ์ ๊ณณ์ ์ ํฉํ๋ฉฐ(์ด๋ฆ๋ถํฐ๊ฐ ํผ ํ์์ ์ ํฉํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ๊ณ ์๋ค) ๋ฐ๋๋ก ํ๋ซํผ ๊ณ ์ API ์งํฅ์ ์ด๋ฉฐ ๋์์ธ ๋ UI๋ฅผ ์ค์ํ๋ ๊ฒฝ์ฐ(์ฌ์ดํธ์ ๊ทธ๋ฆผ์ผ๋ก ์์ํ๋ ๊ฒ๋ค์ ๊ฒ์ ๋ฏธ๋์ด ํ๋ ์ด์ด, ๊ฒ์, ์ง๋ ์ฑ)์๋ Xamarin Native(Android, iOS)๋ฅผ ๊ถ์ฅํ๊ณ ์๋ค. Xamarin Forms๋ UI ๋ ์ด์์๊ณผ ํ์ด์ง ๋ก์ง์ ์ฝ๋๊น์ง ํ๋๋ก ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋ค์ค ํ๋ซํผ ๊ฐ๋ฐ์ ์์ด์ ๊ฐ๊ฐ ๋ชจ๋ ๋ฐ๋ก ์ฝ๋ฉํด์ผ ํ๋ ๋ค์ดํฐ๋ธ์ ๋นํด ํ์คํ๊ณ ๋ถ๋ช ํ ๊ฐ์ ์ด ์์ผ๋ ๊ทธ๋งํผ์ ์ ์ฝ๊ณผ ์ค๋ฒํค๋๋๋ ๋จ์ ๋ค๊ณผ์ ํํ์ด ํ์ํ๋ค. ํนํ ์๋๋ก์ด๋ ์ชฝ์ ์์์๋ ์ธ๊ธ๋ ๋ฉ๋ชจ๋ฆฌ ์ด์ ๋ฐ ๊ธฐ๋ณธ์ผ๋ก ์์ฑ๋๋ 'Welcome to Xamarin Forms!' ๋ง์ ๋ ์คํํ๋๋ฐ ๋ค์ดํฐ๋ธ์ ๋นํด ๊ธฐ๊ธฐ์ ๋ฐ๋ผ 2~3์ด ์ ๋์ฉ ๋ ์์๋๋ฉฐ ์์ง์ ๊ตฌํ์ด ๋ ๋๊ฑฐ๋ ๋ฒ๊ทธ์ฑ API๋ค๋ ์๋ค. ์ ์ฝ์ด ๋๋ ๋ถ๋ถ๋ค์ ์ธํฐํ์ด์ค ์์ฑํ ๋ค DependencyService๋ฅผ ํตํด ํ๋ซํผ ๋ณ๋ก ๊ตฌํํ๊ณ ์ปค์คํ UI๋ Custom Renderer ์จ์ ํ๋ซํผ๋ณ๋ก ๊ตฌํํ๋ฉด ๋ค์ดํฐ๋ธ์ ๋ค๋ฅผ๊ฒ ์๋ค์ง๋ง ๊ทธ๋ด๊ฑฐ๋ฉด ๊ทธ๋ฅ ๋ค์ดํฐ๋ธ๋ก ์์ฑํ๋ ๊ฒ์ ๋นํด ๋ฉ๋ฆฌํธ๊ฐ ํฌ๊ฒ ์์๋๋...... ๋ค๋ง ์ ์ ์ธ๋ ฅ์ผ๋ก ๋น ๋ฅธ ์๊ฐ์์ ๋ฉํฐํ๋ซํผ ๊ฐ๋ฐ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ถฉ๋ถํ ๊ณ ๋ คํด ๋ณผ ๋งํ ๊ฐ์น๊ฐ ์์ผ๋ฉฐ ๊ฐ๋ฐ์ง ์ธก์์๋ ํฌ๋ผ์ ํตํด ์ต์ ํ์ ํ์ฐ๊ณ ์๋ค๊ณ ํ๋ ์์ผ๋ก๋ฅผ ๊ธฐ๋ํด ๋ณด๋๋ก ํ์.
Xamarin.Forms 3.0 ์ด ์ถ์๋์๋ค. (2018.5)
FlexLayout[4] ์ด ์ถ๊ฐ๋์๊ณ CSS ๊น์ง ์ง์ํ๋ค. WPF ๋ ๊ณต์ ์ง์ํ๋ค.
.NET 5๊ฐ 2020๋ ํ๋ฐ๊ธฐ์ ์ถ์๋ ํ ์์ผ๋ก์ ๋ก๋๋งต์ด ๊ณต๊ฐ๋์๋๋ฐ Xamarin.Forms๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ .NET MAUI๋ก ์ ์ฐจ ์ด์ ๋๋ค๊ณ ํ๋ค.
๋ค๋ง, ์ด์ ์์ ์ด ์ด๋ฃจ์ด์ง๊ณ .NET MAUI ๊ณต์ ๋ฆด๋ฆฌ์ฆ ์ดํ์๋ ๊ณ์ ์ง์์ ํ๋ฉฐ 2022๋ ํ๋ฐ๊ธฐ๊น์ง ์ ๋ฐ์ดํธ๊ฐ ์์ ๋์ด ์๋ค๊ณ ํ๋ค.
.NET ๊ณต์ ๋ธ๋ก๊ทธ - .NET MAUI
Xamarin.Forms Roadmap
2.5. Xamarin Test Cloud[ํธ์ง]
์ฑ ๋์์์๋ฅผ ์
๋ ฅํด๋์ผ๋ฉด 2000์ฌ๊ฐ์ ์ค๊ธฐ๊ธฐ์์ ์๋์ผ๋ก ํ
์คํธํด์ฃผ๊ณ ๋ก๊น
ํด์ค๋ค.(์ ๋ฃ)
2.6. Xamarin Insights[ํธ์ง]
์ฑ ๋ด๋ถ์์ ์ผ์ด๋๋ ํฌ๋์๋ ๊ธฐํ ์ ๋ณด๋ฅผ ์๋ฒ๋ก ์ ๋ฌํ์ฌ ๋ก๊น
ํด์ค๋ค. HockeyApp๊ณผ ํตํฉ๋์๋ค.
2.7. Xamarin.Essentials[ํธ์ง]
๋ชจ๋ ๊ธฐ์ข
์์ ๊ณต์ ํ๋ ํ๋์จ์ด์ ์ ๊ทผ์ฌํญ์ ๋ํ API, ํฐ์ ์ผ์๋ ๊ธฐ๋ณธ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๋ถ์ผ์ ๋ํด์ ํตํฉ๋ ๊ฒฝํ์ ์ ๊ณตํ๋ค.
3. ๊ฒฝ์์๋[ํธ์ง]
- Flutter(ํ๋ ์์ํฌ) - ๊ตฌ๊ธ์ด ๋ฐ์ด์ฃผ๋ ํ๋ ์์ํฌ. ๋ค์ดํฐ๋ธ ๋ณํ ์์ด ๋ณ๋์ ๋ ๋๋ง ์์ง์ผ๋ก UI๋ฅผ ๊ตฌํํด์ฃผ๊ธฐ ๋๋ฌธ์ ์์คํ ์ ๋ณ๊ฒฝ์ด๋[5] ํผํฌ๋จผ์ค ๋ฌธ์ ์์ ์์ ๋กญ๋ค๋๊ฑธ[6] ๊ฐ์ ์ผ๋ก ๋ฐ์ด์ฃผ๊ณ ์์ผ๋ฉฐ ์ด๋๋ฌธ์ธ์ง ์๋ง๋ฆฐ ์ชฝ์์ ํ๋ฌํฐ์ ๋ ๋๋ง ๋ ์ง์ธ ์คํค์๋ฅผ ์๋ง๋ฆฐ ํ๊ฒฝ์์ ์ฐ๊ฒ ํด์ฃผ๋ SkiaSharp๊ฐ ๋์ค๊ธฐ๋ ํ๋ค. 2020๋ 9์ํ์ฌ Xamarin/MAUI๋ Flutter๋ฅผ ๋น๋กฏํ์ฌ react native์๋ ๋ฐ๋ฆฌ๊ณ ionic์๋ ๋ฐ๋ ค ํฌ๋ก์คํ๋ซํผ ํ๋๋ฆผ์ํฌ ์์ฅ์์ ์์ฅ์ ์ ์จ์ด ๋ฐ๋ฅ์ ๊ธฐ๊ณ ์๋ ์ํ์ด๋ค.
4. ์ธ๋ถ ๋งํฌ[ํธ์ง]
๊ณต์ํํ์ด์ง
์คํ์์ค
ํ๊ธ MSDN๋ฐ๋ฒ์ญ์ฃผ์
Weekly Xamarin
๊ตญ๋ด ์ปค๋ฎค๋ํฐ ๋ค์ด๋ฒ ์นดํ
๊ตญ๋ด ์ปค๋ฎค๋ํฐ ํ์ด์ค๋ถ ๊ณต๊ฐ๊ทธ๋ฃน
์คํ์์ค
ํ๊ธ MSDN
Weekly Xamarin
๊ตญ๋ด ์ปค๋ฎค๋ํฐ ๋ค์ด๋ฒ ์นดํ
๊ตญ๋ด ์ปค๋ฎค๋ํฐ ํ์ด์ค๋ถ ๊ณต๊ฐ๊ทธ๋ฃน
[1] ๋ฌผ๋ก ์ด๋ฌธ์ ๋ ์๋ง๋ฆฐ ๋ฟ๋ง ์๋๋ผ ํ๋ฌํฐ๋ฑ์ ๋ค๋ฅธ ํฌ๋ก์ค ํ๋ซํผ ๊ฐ๋ฐ ํ๋ ์์ํฌ์ ๋ค ํด๋น๋๋ ๋ฌธ์ ๋ค. ๊ฐ์ ํฌ๋ก์คํ๋ซํผ ๊ฐ๋ฐ ํ๋ ์์ํฌ๋ผ๋ฆฌ ๋น๊ตํ๋ฉด ๋ฐ์ดํธ์ฝ๋๊ฐ ์กฐ๊ธ์ด๋ผ๋ ๋ ์์ ์๋ง๋ฆฐ์ด ์ข๋ ์๊ฒ ๋์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ฌผ๋ก ํฐ ์ฐจ์ด๋ ์๋๋ค.
[2] ๋ฌผ๋ก ์ด๊ฑด ๊ตญ๋ด ํ์ ์ด๊ณ ์ค์ ๋ก๋ ์๋ง๋ฆฐ์ด ํฌ๋ก์คํ๋ซํผ ํ๋ ์์ํฌ์ค ์ผ์ฐ ๋์จ ํธ์ ์ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ฐ๋ฐ ํ๋ซํผ ๋นํด ๋ง๋ค๊ณ ํ๊ฐ๋๋ค.
[3] ์ถ์๋์๋ค.
[4] css์ flexbox์ ์ ์ฌํ๋ค.
[5] ์๋ง๋ฆฐ ๋ค์ดํฐ๋ธ๋ ์๋ง๋ฆฐ ํผ์ฆ๋ ํด๋น ํ๋ซํผ์ ๋ง์ถฐ์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ฐ๊ฟ์ฃผ๋ ์์ผ๋ก ๊ตฌํ๋๊ธฐ ๋๋ฌธ์ ์์คํ
์ ์ผ๋ก UI๊ด๋ จ ๊ตฌ์ฑ์์๊ฐ ๋ฐ๋๊ฒฝ์ฐ ๊ฐ์ด ๋ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ณด๊ณ ๋๋ ๊ฒฝ์ฐ๊ฐ ์์๋ค.