WPF Prism vs CommunityToolkit

์•ˆ๋…•ํ•˜์„ธ์š” ๊ฐ€๋”์‹ WPF ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋Š” ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค.
WPF๋Š” Prism ์„ ์ฃผ๋กœ ์“ฐ๋Š”๋ฐ ์ฒ˜์Œ์—๋Š” ๋งŽ์ด ํ—ค๋งธ์ง€๋งŒ
์ด์ œ ์–ด๋Š์ •๋„ ๋‹ค๋ฃฐ์ค„ ์•Œ๊ณ  ๊ฑฐ์˜ ์ด๊ฒƒ๋งŒ์„ ์“ฐ๋‹ค๊ฐ€
๋‹ท๋„ท๋ฐ๋ธŒ์—์„œ Community Toolkit ์„ ์•Œ๊ฒŒ๋์Šต๋‹ˆ๋‹ค.
๊ทธ์ „์—๋„ ๊ฒ€์ƒ‰ํ•˜๋‹ค๊ฐ€ ๋ณด๊ณ  ๋ญ”๊ฐ€ ํ–ˆ๋Š”๋ฐ ๋น„์Šทํ•œ
Fw์ธ๊ฐ€ ๋ณธ๋ฐ ? ์šฐ์—ด์„ ๊ฐ€๋ฆฌ๊ธฐ ํž˜๋“ค์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ
์ฃผ๋กœ C/T ๋ฅผ ๋งŽ์ด์“ฐ๋‚˜์š”?? ์™ ์ง€ Prism ํฐ ์–ธ๊ธ‰์ด ์—†๋Š”๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๋„ค์š”
Prism ์„ ์“ธ๋•Œ View๊ด€๋ฆฌ๊ฐ€ ํŽธ๋ฆฌํ•˜๊ณ  life cycle ๊ด€๋ฆฌ๊ฐ€ ์•„๋ฌด๋ž˜๋„ wpf์—
์ตœ์ ํ™”๋œ fw ๋ผ ๊ฐœ๋…์„ ์•Œ๋ฉด ํŽธ๋ฆฌํ–ˆ๋Š”๋ฐ ๋ฐ˜๋ฉด C/T ๊ฐ€ ๋‹ค๋ฅธ ์žฅ์ ์ด ์žˆ์„๊นŒ ๊ถ๊ธˆํ•˜๋„ค์š”?
C/T๋ฅผ ๋Œ€๋žต์ ์œผ๋กœ ๋ดค์„๋•Œ IOC ์„ฑํ–ฅ์ด ๊ฐ•ํ•œ FW๊ฐ™์€๋ฐ Prism ์˜ Resion ๊ฐ™์€๊ฒƒ๋„ ์žˆ๋‚˜์š”?

4๊ฐœ์˜ ์ข‹์•„์š”

๊ฐœ์ธ์ ์œผ๋กœ

Prism ๊ณผ .NET Community Toolkit ์˜ ๋น„๊ต ์ž์ฒด๋Š” ๋งž์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š”

.NET Community Toolkit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” WPF์—์„œ MVVM ์„ค๊ณ„๋ฅผ ์œ„ํ•œ MVVM ์ „์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฉฐ,

Prism์€ CAB(Composite UI Application Block) ์„ค๊ณ„๋ฅผ ๋ชฉํ‘œ๋ฅผ ํ•œ ํ•˜๋‚˜์˜ ์ž‘์€ ํ”„๋ ˆ์ž„์›Œํฌ์— ํ•ด๋‹น ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ๋งŒํผ Prism์€ ์—„์ฒญ ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์€ ์ง€์›ํ•˜๊ณ  ์žˆ๊ณ , MVVM ๊ด€๋ จ ๊ธฐ๋Šฅ๋„ Prism์˜ ๋งŽ์€ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ ์ œ๊ณต ๋˜๋Š” ๋ถ€๋ถ„ ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ์„ฑ๊ฒฉ์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จ ๋ฉ๋‹ˆ๋‹ค.

.NET Community Toolkit :

์ค‘.์†Œ ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ๋กœ ํ™”๋ฉด์ด ๋งŽ์ง€ ์•Š๊ณ  ํ™”๋ฉด ๋‚ด UI๊ฐ€ ๋ณต์žกํ•˜์ง€ ์•Š์€ ํ”„๋กœ์ ํŠธ์—์„œ MVVM ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋กœ ๊ฐœ๋ฐœ๋˜๋Š” ํ”„๋กœ์ ํŠธ์— ๋”ฑ ๋งž ์Šต๋‹ˆ๋‹ค.

Prism :

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


.NET Community Toolkit ์€
๋ทฐ๋ชจ๋ธ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฉ”์‹ ์ €
์˜์กด์„ฑ ์ฃผ์ž… ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ IoC์ง€์›
ํŽธ๋ฆฌํ•œ ์ฝ”๋“œ ์ œ๋„ˆ๋ ˆ์ดํŠธ ๊ธฐ๋Šฅ (NotifyPropertyChanged ์†์„ฑ ์ž๋™ ๊ตฌํ˜„ ๋“ฑ) ๋“ฑ
MVVM ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์— ๊ผญ ํ•„์š”ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ ์œ„์ฃผ๋กœ ์ง€์› ๋˜๊ณ  ์žˆ๊ณ ,
(๋•Œ๋ฌธ์— Prism์˜ Regions ๊ฐ™์€ ๊ธฐ๋Šฅ์€ ์—†์Šต๋‹ˆ๋‹ค.)

Prism ์€
์œ„ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ํฌํ•จํ•˜๊ณ  ๋”๋ถˆ์–ด CAB ๊ตฌ์กฐ ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

10๊ฐœ์˜ ์ข‹์•„์š”

์ฒจ์–ธ์„ ๋” ๋“œ๋ฆฌ์ž๋ฉด, ์„ž์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Prism์€ ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜ CommunityToolkit์˜ ์†Œ์Šค ์ œ๋„ค๋ ˆ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ๊ฐ€ ๊ฐ„์†Œํ™”๋˜๋Š” ๋ถ€๋ถ„์€ Prism๊ณผ ์„ž์–ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”

์•„ ์ถ”๊ฐ€๋กœ, .NET Community Toolkit ์—์„œ

์ด ๋ถ€๋ถ„ Prism ์˜ Regions ๋Š”

ContentControl ์— DataType์„ ๋งคํ•‘ํ•ด์„œ ๊ฐ™์€ ์šฉ๋„๋กœ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

@aroooong, @Vincent ๋ง์”€์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค~
์ €๋„ ๊ทธ๋Ÿฐ ์ด์œ ๋“ค๋กœ ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ์ค‘์ž…๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”