[Android]Design Pattern

Lee Gayoungยท2022๋…„ 10์›” 6์ผ
0

UMC 3๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
9/10

๐ŸŒŸ Design Pattern์ด๋ž€?

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

๐ŸŒŸ ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๋””์ž์ธ ํŒจํ„ด

Android์—์„œ ์œ ๋ช…ํ•œ architecture์—๋Š”ย MVC, MVP, MVVM๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๐Ÿ”นMVC (Model View Controller)

MVC ํŒจํ„ด์€ Model, View, Controller๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  • Model(๋ชจ๋ธ): ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค. <๋ฐ์ดํ„ฐ + ์ƒํƒœ + ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง>์„ ๋‹ค๋ฃฌ๋‹ค.
    SQLite, File, content provider๊ฐ€ ์ด ์˜์—ญ์— ์†ํ•œ๋‹ค. View์— ์˜์กด์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • View(๋ทฐ): ํ™”๋ฉด ๊ตฌ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ์˜์—ญ์ด๋‹ค. View ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
    Model๋กœ๋ถ€ํ„ฐ data๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค.

  • Controller(์ปจํŠธ๋กค๋Ÿฌ): View์™€ Model์„ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์ œ์–ดํ•˜๋Š” ์˜์—ญ์ด๋‹ค.
    activity, service, broadcast receiver, fragment๊ฐ€ ํฌํ•จ๋œ๋‹ค.
    ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ(Action)์„ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค. Model์˜ data ๋ณ€ํ™”์— ๋”ฐ๋ผ View๋ฅผ ์„ ํƒํ•œ๋‹ค.

MVC

  • ๋™์ž‘
    (1) ์‚ฌ์šฉ์ž์˜ Action์ด Controller์— ๋“ค์–ด์˜จ๋‹ค.
    (2) Controller๋Š” ์‚ฌ์šฉ์ž์˜ Action์„ ํ™•์ธํ•˜๊ณ , Model์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
    (3) Controller๋Š” Model์„ ๋‚˜ํƒ€๋‚ด์ค„ View๋ฅผ ์„ ํƒํ•œ๋‹ค.
    (4) View๋Š” Model์„ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ํŠน์ง•
    (1) Controller๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ View๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” 1:N ๊ตฌ์กฐ์ด๋‹ค.
    (2) Controller๋Š” View๋ฅผ ์„ ํƒํ•  ๋ฟ ์ง์ ‘ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๋Š”๋‹ค.(View๋Š” Controller๋ฅผ ๋ชจ๋ฅธ๋‹ค)
    (3) View์™€ Model์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ณ , Model ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

  • ๋‹จ์ 
    (1) Controller๊ฐ€ Android API์— ์ข…์†๋˜์–ด ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต๋‹ค
    (2) View๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด Controller๋„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.
    (3) ๋งŽ์€ ์ฝ”๋“œ๋“ค์ด Controller์— ์ง‘์ค‘๋˜๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.
    (4) ๋ผ์ด๋ธŒ์™€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๋นˆ๋ฒˆํ•œ application ์ผ์ˆ˜๋ก ์น˜๋ช…์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

โ€‹

๐Ÿ”นMVP (Model View Presenter)

MVP ํŒจํ„ด์€ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ง„ ํŒจํ„ด์œผ๋กœ, Model, View, Presenter๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  • Model(๋ชจ๋ธ): ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. MVC์˜ Model๊ณผ ๋™์ผํ•˜๋‹ค.

  • View(๋ทฐ): ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Presenter๋กœ ์•Œ๋ฆฐ ํ›„ ๋ฐ˜ํ™˜๋ฐ›์€ ๊ฒƒ์— ๋”ฐ๋ผ UI๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

  • Presenter(ํ”„๋ ˆ์  ํ„ฐ): MVC์˜ Controller์˜ ์—ญํ• ์ด์ง€๋งŒ View์— ์ „ํ˜€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
    View์—์„œ ์ „๋‹ฌ๋ฐ›์€ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋‹ค์‹œ View๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    Model์— ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ํ•„์š”ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ Model์— ์š”์ฒญํ•œ ํ›„ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ View์— ์ „๋‹ฌํ•œ๋‹ค.

MVP

  • ๋™์ž‘
    (1) ์‚ฌ์šฉ์ž์˜ Action์ด View๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ๋‹ค.
    (2) View๋Š” data๋ฅผ Presenter์—๊ฒŒ ์š”์ฒญํ•œ๋‹ค.
    (3) Presenter๋Š” Model์—๊ฒŒ data๋ฅผ ์š”์ฒญํ•œ๋‹ค.
    (4) Model์€ Presenter์—๊ฒŒ ์š”์ฒญ๋ฐ›์€ data๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    (5) Presenter๋Š” View์—๊ฒŒ data๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ํŠน์ง•
    (1) Presenter๋Š” View์™€ Model์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋‘˜์„ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    (2) Presenter์™€ View๋Š” 1:1 ๊ด€๊ณ„์ด๋‹ค.
    (3) ๋‹จ์ˆœ Interface์ด๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜๊ณ  ๋ชจ๋“ˆํ™”/์œ ์—ฐ์„ฑ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

  • ๋‹จ์ 
    (1) View์™€ Presenter ๊ฐ„์˜ ์˜์กด์„ฑ์ด ๋†’๋‹ค.
    (2) Android API๋ฅผ ์ฐธ์กฐํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.(๊ถŒ์žฅ)
    (3) Controller์™€ ๊ฐ™์ด ์ฝ”๋“œ๊ฐ€ ์ง‘์ค‘๋˜๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.

โ€‹

๐Ÿ”นMVVM (Model View ViewModel)

MVVM ํŒจํ„ด์€ Model, View, ViewModel๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  • Model(๋ชจ๋ธ): ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ViewModel์„ ๊ฑฐ์ณ์„œ View๋กœ ์ „๋‹ฌ๋œ๋‹ค.
    ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” LiveData๋‚˜ RxJava ๋“ฑ์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • View(๋ทฐ): ํ™”๋ฉด์— ํ‘œํ˜„๋˜๋Š” ๋ ˆ์ด์•„์›ƒ์„ ๊ด€๋ฆฌํ•œ๋‹ค.
    View๋Š” Model์€ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ViewModel์„ ์˜ต์ €๋น™ํ•˜๊ณ , ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ํ™”๋ฉด์„ ๊ฐฑ์‹ ํ•ด์•ผ ํ•œ๋‹ค.
    Data Binding์„ ์œ„ํ•ด gradle๊ณผ xml์„ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค. View๋Š” ViewModel์— ์˜ํ•ด Model๊ณผ ์œ ์—ฐํ•œ binding์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

  • ViewModel(๋ทฐ๋ชจ๋ธ): View์— ์—ฐ๊ฒฐํ•  ๋ฐ์ดํ„ฐ์™€ ๋ช…๋ น์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ณ€๊ฒฝ ์•Œ๋ฆผ์„ ํ†ตํ•ด View์—๊ฒŒ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ViewModel์€ Model์€ ์•Œ์ง€๋งŒ View๋Š” ์•Œ์ง€ ๋ชปํ•œ๋‹ค. (๊ธฐ๋ณธ์ ์œผ๋กœ View์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค.)
    View๊ฐ€ Model์— Event๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก Hook(BindingAdapter)์„ ์ค€๋น„ํ•œ๋‹ค.

MVVM

  • ๋™์ž‘
    (1) ์‚ฌ์šฉ์ž์˜ Action๋“ค์€ View๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.
    (2) Command pattern์œผ๋กœ ViewModel์— Action์„ ์ „๋‹ฌํ•œ๋‹ค.
    (3) ViewModel์€ Model์—๊ฒŒ data๋ฅผ ์š”์ฒญํ•œ๋‹ค.
    (4) ViewModel์€ ์‘๋‹ต๋ฐ›์€ data๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.
    (5) View๋Š” ViewModel๊ณผ Data Bindingํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ํŠน์ง•
    (1) Command Pattern๊ณผ Data Binding์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.
    (2) View์™€ Model ์‚ฌ์ด์˜ ์˜์กด์„ฑ์ด ์—†๋‹ค.
    (3) View์™€ ViewModel ์‚ฌ์ด์˜ ์˜์กด์„ฑ๋„ ์—†๋‹ค.
    (4) ์œ„์ฒ˜๋Ÿผ ๋ชจ๋“  ๋ถ€๋ถ„์ด ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ ๋ชจ๋“ˆํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋‹จ์ 
    (1) ViewModel์˜ ์„ค๊ณ„๊ฐ€ ์–ด๋ ต๋‹ค.(๋‹น์—ฐํ•œ..)
    (2) View๊ฐ€ ๋ณ€์ˆ˜์™€ ํ‘œํ˜„์‹ ๋ชจ๋‘์— Binding๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐˆ์ˆ˜๋ก presentation logic์ด ๋Š˜์–ด๋‚˜ XML์ด ๋ฐฉ๋Œ€ํ•ด์ง„๋‹ค. ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ํ•ญ์ƒ ViewModel์—์„œ ์ง์ ‘ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

โ€‹

๐ŸŒฑ ์ฐธ๊ณ  ์ž๋ฃŒ

  1. [Android] ๋””์ž์ธ ํŒจํ„ด, ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด
  2. [์•ˆ๋“œ๋กœ์ด๋“œ] ๋””์ž์ธ ํŒจํ„ด(MVC, MVP, MVVM)
  3. [Android] ๋””์ž์ธ ํŒจํ„ด (MVC, MVP, MVVM)
  4. [Android] ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด - MVC, MVP, MVVM

0๊ฐœ์˜ ๋Œ“๊ธ€