๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ‘ฉ‍๐Ÿ’ป TECH

[TECH] ์•ˆ๋“œ๋กœ์ด๋“œ ๋‹ค์–‘ํ•œ ์•„ํ‚คํ…์ณ ํŒจํ„ด(MVC, MVP, MVVM)

by ๋ณด๋ฆฌ ์ฝง๊ตฌ๋ฉ 2023. 10. 19.

[ํ‹ฐ๋Œ] ํ‹ฐ๋Œ Android ์˜ ๋‹ค์–‘ํ•œ ๋””์ž์ธ ํŒจํ„ด


์•ˆ๋…•ํ•˜์„ธ์š” ํ‹ฐํ”Œ์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž ์ •์ฑ„ํ˜„์ž…๋‹ˆ๋‹ค๐Ÿ˜†๐Ÿ˜†๐Ÿ˜†๐Ÿ˜†๐Ÿ˜†

์˜ค๋Š˜์€ ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๋‹ค์–‘ํ•œ ์•„ํ‚คํ…์ณ ํŒจํ„ด์ธ MVC, MVP, MVVM์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ’จ


๐Ÿ‘ฉ‍๐Ÿ’ป ๋””์ž์ธ ํŒจํ„ด

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

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

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

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด์„œ ๊ฐ ํŒจํ„ด์˜ ํŠน์ง•์„ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ๊ฐ ํŒจํ„ด์„ ์š”์•ฝํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

  • MVC (Model View Controller): MVC๋Š” ๋ชจ๋ธ(Model), ๋ทฐ(View), ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, UI์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š”๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ทฐ๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๋“ฑ์˜ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • MVP (Model View Presenter): MVP๋Š” MVC์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๊ณ , ๋ทฐ๋Š” ํ™”๋ฉด ํ‘œํ˜„์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ํ”„๋ ˆ์  ํ„ฐ(Presenter)๋Š” ๋ทฐ์™€ ๋ชจ๋ธ ๊ฐ„์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. MVP๋Š” ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ด๊ณ , ๋ทฐ์™€ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • MVVM (Model View ViewModel): MVVM์€ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ์™€ ๋ทฐ๋ชจ๋ธ(ViewModel)์„ ์—ฐ๊ฒฐํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ทฐ๋ชจ๋ธ์€ ๋ชจ๋ธ์˜ ๋ž˜ํผ๋กœ์„œ ๋ทฐ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์™€ ์ƒํƒœ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋ทฐ๋Š” ๋ทฐ๋ชจ๋ธ์˜ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ UI ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ , ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ด๋Š”๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

์•„๋ž˜ ๊ธ€์„ ํ†ตํ•ด ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ๐Ÿ’จ


๐Ÿ‘ฉ‍๐Ÿ’ป ๋ชจ๋ธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ(Model View Controller, MVC) ํŒจํ„ด

MVC

  • ๋ชจ๋ธ(Model)

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

 

  • ๋ทฐ(View)

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

 

  • ์ปจํŠธ๋กค๋Ÿฌ(Controller)

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

 

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

 

 


๐Ÿ‘ฉ‍๐Ÿ’ป ๋ชจ๋ธ ๋ทฐ ํ”„๋ฆฌ์  ํ„ฐ(Model View Presenter, MVP) ํŒจํ„ด

MVP

MVP (Model View Presenter) ํŒจํ„ด์€ MVC ํŒจํ„ด์˜ ์ผ๋ถ€ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋” ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“  ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

 

  • ๋ชจ๋ธ(Model)

MVP์—์„œ์˜ ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด ์—ญํ• ์€ MVC์˜ ๋ชจ๋ธ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

  • ๋ทฐ(View)

๋ทฐ๋Š” Activity๋‚˜ Fragment์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋Œ€์‹ , View ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ Presenter์™€ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

 

    • ํ”„๋ฆฌ์  ํ„ฐ(Presenter)

MVP์˜ ํ•ต์‹ฌ์€ Presenter์ž…๋‹ˆ๋‹ค. ์ด๋Š” MVC์˜ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ํ•˜์ง€๋งŒ View์™€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  Presenter ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฐ ๋ทฐ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ ๋ชจ๋“ˆ์„ฑ, ์œ ์—ฐ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

MVP ํŒจํ„ด์€ MVC์™€ ๋‹ฌ๋ฆฌ View์™€ Presenter ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์ด๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ Presenter๋กœ ์ด๋™ํ•จ์œผ๋กœ์จ Controller์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Presenter๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๊ณ , ์ถ”๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜์šฉํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ MVP ํŒจํ„ด์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋” ๊ตฌ์กฐ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. Presenter๋ฅผ ํ†ตํ•ด ๋ทฐ์™€ ๋ชจ๋ธ์„ ๋” ์ž˜ ๋ถ„๋ฆฌํ•˜๊ณ , ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

 


๐Ÿ‘ฉ‍๐Ÿ’ป ๋ชจ๋ธ ๋ทฐ ๋ทฐ๋ชจ๋ธ(Model View ViewModelMVVM) ํŒจํ„ด

MVVM

MVVM (Model View ViewModel) ํŒจํ„ด์€ Android ์•ฑ ๊ฐœ๋ฐœ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด ์‰ฌ์šด ํ…Œ์ŠคํŠธ์™€ ๋ชจ๋“ˆํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ๋ทฐ(View)์™€ ๋ชจ๋ธ(Model)์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

 

  • ๋ชจ๋ธ(Model)

MVVM์—์„œ์˜ ๋ชจ๋ธ์€ MVC์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํฌํ•จํ•˜๋ฉฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

  • ๋ทฐ(View)

๋ทฐ๋Š” ViewModel์— ์˜ํ•ด ๋…ธ์ถœ๋˜๋Š” ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜ ๋ฐ ์ž‘์—…์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ ๋ทฐ๋Š” ViewModel์˜ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

 

  • ๋ทฐ๋ชจ๋ธ(ViewModel)

ViewModel์€ Model์„ ๋ž˜ํ•‘ํ•˜๊ณ  ๋ทฐ์—์„œ ํ•„์š”ํ•œ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ทฐ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชจ๋ธ์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋‚˜ hooks๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ViewModel์€ ๋ทฐ์™€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

MVVM ํŒจํ„ด์€ ์˜ต์„œ๋ฒ„ ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ์˜ต์„œ๋ฒ„ ์—ญํ• ์€ ViewModel์ด ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ์™€ ViewModel ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ž๋™ํ™”ํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

MVVM์˜ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ํ™œ์šฉํ•˜์—ฌ ๋ทฐ์™€ ViewModel ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋กœ์จ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์˜ coroutine๊ณผ live data๋ฅผ ํ™œ์šฉํ•˜์—ฌ UI ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ MVVM ํŒจํ„ด์˜ ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋ทฐ์™€ ๋ณ€์ˆ˜ ๋˜๋Š” ํ‘œํ˜„์‹ ๋ชจ๋‘์— ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์™ธ๋ถ€์˜ Presentation ๋…ผ๋ฆฌ๊ฐ€ XML์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ViewModel์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋ฉฐ, ๋ทฐ ๋ฐ”์ธ๋”ฉ ํ‘œํ˜„์‹์—์„œ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ฑฐ๋‚˜ ํŒŒ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 


๐Ÿ‘ฉ‍๐Ÿ’ป ๋งˆ์น˜๋ฉฐ

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

 

MVC๋Š” ์ž‘์€ ๊ทœ๋ชจ์˜ ์•ฑ ๋˜๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•ฑ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ฑฐ๋‚˜ ๋ผ์ด๋ธŒํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, MVC์˜ ๊ฒฐํ•ฉ๋„ ๋ฌธ์ œ์™€ ์œ ์ง€๋ณด์ˆ˜์˜ ์–ด๋ ค์›€์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

 

๊ทธ๋Ÿฌ๋‚˜ ์ค‘์š”ํ•œ ์ ์€ ์–ด๋–ค ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ์„ ํƒํ•˜๋“ ์ง€, ํ˜„์žฌ ๊ฐœ๋ฐœํ•˜๋Š” ์•ฑ์˜ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ํŠน์„ฑ์— ๋งž๊ฒŒ ํŒจํ„ด์„ ์กฐ์ •ํ•˜๊ณ  ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์กฐ๊ฑด MVP ๋˜๋Š” MVVM์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ตœ์ ์˜ ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•˜๊ณ ์ž ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ„ด์€ ๋„๊ตฌ์ผ ๋ฟ์ด๋ฉฐ, ๊ทธ ๋„๊ตฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋А๋ƒ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

๋‹ค์Œ ์ด์•ผ๊ธฐ๋Š” ํ‹ฐ๋Œ์˜ MVVM Clean Architecture์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ณผ์ •์„ ๋‹ด์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!๐Ÿ˜†

๋‹ค์Œ ๊ธ€๋„ ๊ธฐ๋Œ€ ๋ถ€ํƒ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค:)๐Ÿค—

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

 

โฌ‡๏ธ ์ง€๊ธˆ ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด ์Šคํ† ์–ด์—์„œ ํ‹ฐ๋Œ ๋‹ค์šด ๋ฐ›๊ธฐ
https://play.google.com/store/apps/details?id=com.team7.tikkle&hl=ko-KR

๐Ÿ“ฉ Contact : wjdcogus6@gmail.com
๐Ÿ“ฒ SNS : https://www.instagram.com/chaeehyuny/