[ TIL ] ์ํคํ ์ฒ(Architecture)์ ๋์์ธ ํจํด / 24๋ 4์ 30์ผ

์ค๋์ ์ํคํ ์ฒ์ ๋์์ธํจํด์ ๋ํด์ ํ์ตํด ๋ณด์์ต๋๋ค.
ํ์์ ์ํคํ ์ฒ์ ๋์์ธํจํด ์ฉ์ด์ ๋ํ ๋ช ํํ ๊ฐ๋ ์ด ์กํ์์ง ์์๋ ๊ฑฐ ๊ฐ์๋ฐ,
์ค๋ ๋น๋ก์ ๋ ๊ฐ์ง์ ๊ฐ๋ ์ ๋ช ํํ ์ดํดํ๋ฉด์ ๊ตฌ๋ถํ ์ ์๊ฒ ๋์์ด์!โจ
์ํคํ ์ฒ
์ ๊ฐ ์ดํดํ ์ํคํ ์ฒ๋ ์์คํ ์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ(๋ชจ์ต)๋ฅผ ์ ํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๋ ๋จ๊ณ์์ ์์คํ ์์ ์ปดํฌ๋ํธ๋ค์ด ์ด๋ค ์์ผ๋ก ์ํธ์์ฉํ๊ณ ์์นํ ๊ฒ์ธ์ง, ๋ฐ์ดํฐ ํ๋ฆ์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ ธ ์์ ๊ฒ์ธ์ง๋ฅผ ์ ํ ๋ ์ง์นจ์ด ๋๋ ๊ฒ ๊ฐ์์. ์ฌ๊ธฐ์ ๋ ๋์๊ฐ ์์คํ ์ ๊ธฐ๋ฅ์ด๋ ์ฑ๋ฅ, ๋ณด์, ํ์ฅ์ฑ, ์ ์ง๋ณด์์ฑ๊ณผ ๊ฐ์ ํด๊ฒฐ์ฑ ๊น์ง ์ ๊ณตํด ์ค ์ ์๋ค๊ณ ํฉ๋๋ค.
์ ๋ ์ด๋๊น์ง MVCํจํด์ ์ํคํ ์ฒ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํด์ ์ฑ์ ๊ฐ๋ฐํด ์๋ ๊ฒ ๊ฐ์์! ์ค๋์ MVVM ์ํคํ ์ฒ๊น์ง ๋ฐฐ์๋ณด์์ต๋๋ค.
๊ทธ๋ผ ์ ๊ฐ ์๊ณ ์๋ ๋ ๊ฐ์ง ์ํคํ ์ฒ์ ๋ํด์ ์์๋ด ์๋ค.
MVC ์ํคํ ์ฒ
MVC ์ํคํ ์ฒ๋ Model, View, Controller์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ์ํคํ ์ฒ์์. Controller๊ฐ Model๊ณผ View์ ์ค๊ฐ๋ค๋ฆฌ ์ญํ ์ ํด์ฃผ๋ฉด์ Model๊ณผ์ ์ํธ์์ฉ์ ํ๊ณ , View์์ ์ํธ์์ฉ์ ํฉ๋๋ค. ๊ฐ๊ฐ์ ์ญํ ๋ค์ ๋ํด์ ๋ด ์๋ค.
Model
Model์ ๋ฐ์ดํฐ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง์ ๋ด๋นํ๊ณ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ ์ฃผ๋ก ๊ตฌ์กฐ์ฒด๋ ํด๋์ค ๊ตฌ์กฐ๋ก ๋ํ๋ด์ด์ง๊ณ , ์ฝ์ด๋ฐ์ดํฐ๋ API ํต์ ์ ํตํด์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ์์ฉ์ ํ ๋๋ ์ด Model์ด ๊ด์ฌํฉ๋๋ค.
View
View๋ UI๋ฅผ ๋ด๋นํ๊ณ ์์ต๋๋ค. UI ์ปดํฌ๋ํธ๋ค์ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ์ฌ์ฉ์์๊ฒ input์ ๋ฐ์์ Controller์๊ฒ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
Controller
Controller๋ ์์์ ์ค๋ช ํ ๋๋ก Model๊ณผ View์์ ์ง๊ฒ๋ค๋ฆฌ ์ญํ ์ ํ๋ฉด์ ๋ ๊ตฌ์กฐ ๊ฐ์ ์ํธ์์ฉ์ ๋ด๋นํ๊ณ ์์ต๋๋ค. ์์ Controller์๊ฒ ๋ฐ์ input๊ฐ์ Model์๊ฒ ์ ๋ฌํด ์ฃผ๋ ์ญํ ์ ํด์! Swift์์๋ ViewController๊ฐ ์ด Controller์ ์ญํ ์ ํ๊ณ ์์ต๋๋ค.
MVC ํจํด์ ์ฅ์ ๊ณผ ๋จ์
์ฐ์ ์ฅ์ ์ Cocoa ํ๋ ์ ์ํฌ์์ ์ฌ์ฉํ๊ณ ์์ด์ ํธํ์ฑ์ด ์ข๋ค๊ณ ํ๋๋ผ๊ณ ์! ๋ํ ์ง๊ด์ ์ด๊ณ ๊ฐ๋จํ ๊ตฌ์กฐ๋ผ ์ฒ์ ์ ํ๊ธฐ์๋ ์ดํดํ๊ธฐ๊ฐ ์ฝ๋ค๋ ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋จ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ปค์ง์๋ก ViewController๊ฐ ๋ง์ด ๋ฌด๊ฑฐ์์ง๋๋ค. View๋ Model์ ๋นํด ViewController์ ์ญํ ์ด ๋ง์์ ธ์ ๋ณต์กํด์ง๊ณ , ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋๋ค.
MVVM ์ํคํ ์ฒ
MVVM ์ํคํ ์ฒ๋ Model View ViewModel๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ์ฌ์ค MVVM ์ํคํ ์ฒ๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ ๊น์ง๋ MVVM์ด๋ผ์ 4๊ฐ์ ๊ตฌ์กฐ๋ก ๋ถ๋ฆฌ๊ฐ ๋ ์ํคํ ์ฒ์ธ์ค ์์์ด์!ใ ใ ํ์ง๋ง ์ค๋ VM์ด ํ๋์ ๊ตฌ์กฐ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. UI์ ๋ก์ง์ ๋ถ๋ฆฌํ ๊ตฌ์กฐ์ด๋๋ผ๊ณ ์! ์ฒ์์ ์ดํด๊ฐ ์ ๋์ง ์์๋๋ฐ, ๋ณดํต UILabel์ ํ ์คํธ๋ฅผ ์ง์ ํ๋ค๋ฉด, ํด๋น ViewController์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ ( ํ ์คํธ์ ๋ค์ด๊ฐ ๊ฐ์ ๊ณ์ฐํ๋ค๋์ง, ๋ค๋ฅธ ๋ฐ์ดํฐ์์ ํด๋น ๊ฐ์ ๋นผ์จ๋ค๋์ง ) ํด๋น ๊ฐ์ ์ถ๋ ฅํ๋๋ฐ ( ๊ทธ ๊ฐ์ Label์ text์ ์ง์ )์ด ๋น์ฆ๋์ค ๋ก์ง ์์ฒด๋ฅผ ๋ค๋ฅธ ๊ตฌ์กฐ์ฒด๋ ํด๋์ค๋ก ๋ผ์ด๋ด์ ๋ถ๋ฆฌ์ํค๋ ๊ตฌ์กฐ์ ๋๋ค.
Model
๋ชจ๋ธ์ ์์ MVC ํจํด์ Model๊ณผ ๊ฐ์ ์ญํ ์ ๋๋ค.
ViewModel
ViewModel์ Model๊ณผ View์ ์ค๊ฐ ์ง๊ฒ๋ค๋ฆฌ ์ญํ ๋ก View์์ ์ถ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. MVC์์๋ View๊ฐ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์ Controller์๊ฒ ์ ๋ฌํด ์ฃผ์๋ค๋ฉด, MVVM์์๋ ์ด ViewModel์ด ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅด ๋ฐ์์ Model์๊ฒ ์ ๋ฌํด ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค. View์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ธ์ ์์ฑํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
View
View๋ ์คํ ๋ฆฌ๋ณด๋์ ์ฝ๋๋ฅผ ๋ชจ๋ ์ง์นญํฉ๋๋ค! ViewModel์์ ์ด๋ฏธ ๋ง๋ค์ด์ง ํจ์๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
MVVM์ ์ฅ์ ๊ณผ ๋จ์
MVVM์ ์ฅ์ ์ ์์ง ์ฌ์ฉํด๋ณด์ง๋ ์์์ง๋ง, View์ View๋ฅผ ์ถ๋ ฅํ๋๋ฐ ํ์ํ ๋น์ง๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ๋ค ๋ณด๋ ์ญํ ์ด ๋ช ํํด์ง๊ณ , ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋๋ค. ๋ํ ์ฝ๋๋ฅผ ์์ ํ๋ ๊ฒ์ด ํธํฉ๋๋ค. MVC์๋ ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ํ ์คํธํ๊ธฐ๊ฐ ์ข์ต๋๋ค. UI๋ฅผ ๊ทธ๋ฆฌ๋ ๋น์ฆ๋์ค ๋ก์ง์ด UI์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌํ๋์ด ์์ด์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๊ฐ ํธํฉ๋๋ค.
๋จ์ ์ ์ดํดํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. MVC ํจํด์ ์ง๊ด์ ์ด๋ผ ์~ ์ด๊ฒ Model, View, Controller์ด๊ตฌ๋ ์ด๋ ๊ฒ ๋ถ๋ฆฌํ๋ฉด ๋๋๊ตฌ๋!๋ผ๊ณ ์๊ฐ์ด ๋๋๋ฐ, ์ง์ ์ ์ผ๋ก ๊ตฌํํด ๋ณด๊ธฐ ์ ๊น์ง๋ ๋ช ํํ๊ฒ ๊ตฌ๋ถ์ง์ด์ ์ดํดํ๊ธฐ๊ฐ ์ด๋ ค์ ์ต๋๋ค. ์คํ๋ ค ์์ ํ๋ก์ ํธ์์ ViewModel์ ์ฌ์ฉํ์ฌ ๊ตฌํ์ ํ๋ฉด ์คํ๋ ค ๋ก์ง์ด ๋ณต์กํด์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๊ณ ํ๋๋ฐ, ์ด๋ฅผ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ๊ฐ ๋ฐ์ํ๋ค๊ณ ํ๋๋ผ๊ณ ์!
๋์์ธ ํจํด
๋์์ธ ํจํด์ ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ๋์์ธํ๋ ํจํด์ผ๋ก ๋ชจ๋์ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์ค๋ ๋ฐฐ์ด ๋์์ธ ํจํด์ผ๋ก๋ Delegate Pattern, Observer Pattern, Singleton Pattern ๋ฑ์ด ์์ต๋๋ค.
์ ์ฒ๊ธฐ ์ํ์น ๋ ์ธ์ ๋ ๋์์ธ ํจํด..ใ ใ ๊ทธ๋๋ ์ ๋ง ์ฉ์ด๋ ์ด๋ค ๊ตฌ์กฐ์ธ์ง๋ง ๋ฌ๋ฌ ์ธ์ ๋๋ฐ, ์ด๋ ๊ฒ ์ง์ ์จ๋ณด๋ฉด์ Swift๋ฅผ ๊ณต๋ถํ๋๊น ํ! ์๋ฟ๋๋ผ๊ณ ์~! ์๊ตฌํ/์ถ๋นํฉํ์ฑ/์ด๋ธ์ปด๋ฐํผํํ ์ด๋ ๊ฒ ์ธ์ ์๋๋ฐ..ใ ใ ใ ใ
์์ธํ ๋์์ธ ํจํด ํฌ์คํ ์ ํด๋น ์์๋ค์ ์ง์ ์จ๋ณด๊ณ ๊ณต๋ถํ๋ฉด์ ์ข ๋ ๊น๊ฒ ๊ณต๋ถํ๊ณ ๋ค์ ํฌ์คํ ํ๊ฒ ์ต๋๋ค.
์ํคํ ์ฒ์ ๋์์ธํจํด์ ์ฐจ์ด
์ํคํ ์ฒ | ๋์์ธ ํจํด | |
๊ท๋ชจ | ์์คํ ์ ์ฒด์ ๊ตฌ์กฐ์ ๋ ์ด์์์ ๋ค๋ฃธ๋๊ท๋ชจ์ ์์คํ ์ ์ ์ฉ | ํด๋์ค๋ ๊ฐ์ฒด์ ์์ ๊ท๋ชจ์ ๋์์ธ ๋ฌธ์ |
์ ์ฉ ๋ฒ์ | ์์คํ ์ ์ฃผ์ ๊ตฌ์ฑ ์์์ ์ด๋ค ๊ฐ์ ๊ด๊ณ๋ฐ์ดํฐ ํ๋ฆ / ์ฑ๋ฅ ์ต์ ํ / ๋ณด์ ์ ์ฑ ์ ์ํจ | ๊ฐ๋ณ ์ปดํฌ๋ํธ์ ์ ์ฉ๋ชจ๋ ๋ด์ ์์ธํ ๊ตฌ์กฐ์ ์ํธ์์ฉ |
์ ์ ์์ | ์ค๊ณ ๋จ๊ณ | ๊ตฌํ ๋จ๊ณ |
๋ชฉ์ | ์์คํ ์ ์ ์ฒด์ ์ธ ๋ชจ์ต์ ๊ด๋ฆฌ์์คํ ์ ์ฑ๋ฅ, ํ์ฅ์ฑ, ์ ์ง๋ณด์์ฑ์ ๋ณด์ฅ | ํด๋์ค๋ ๊ฐ์ฒด ๊ฐ์ ์ํธ์์ฉ์ ๊ตฌ์กฐํํ์ฌ ์ฌ์ฌ์ฉ๊ฐ๋ฅํ ์๋ฃจ์ ์ ์ ๊ณตํจ |