3๏ธโฃ ์ธ ๋ฒ์งธ '์งง์'์ ์์ํ๋ฉฐ
'์งง์' ์นดํ
๊ณ ๋ฆฌ๋ฅผ ์์ํ ์ด์ ๊ฐ ์๋ก ๋ฐฐ์ด ๋ด์ฉ์ด ์์ง๋ง ์๊ฐ ์์ ์ด์ ๋ก ์ ๋ฆฌํ์ง ๋ชปํ๋ ์ํฉ์ด ์์ฌ์์ ์ธ๋ฐ, ๋ ๋ฒ์งธ ๊ธ ์ดํ ๋ฐ๋น ์ ๋๋ ๋ค๋ฅธ ๊ธ์ ์ฐ๋๋ผ ๋ ๋ฌ์ด ์ง๋๋๋ก ์ธ ๋ฒ์งธ ๊ธ์ ์ฐ์ง ๋ชปํ๋ค๐ฉ
๊ทธ๋์ '์งง์' ์นดํ
๊ณ ๋ฆฌ์ ์์ญ์ ํ์ฅํด, ์์ผ๋ก ์ ๋ฆฌํ ์ฃผ์ ์ ๋ํ ๊ณ๊ธฐ์ ์์ง๋ฅผ ์ ์ด๋ณด๊ณ ์ ํ๋ค!
๐ญ MVC์์ ๊ธฐ์ต
์ํคํ ์ฒ ํจํด์ ์ ์ง๋ณด์, ๋ฌธ์ ๋ฐ์ ๋ฐฉ์ง, ๋์ ์ฌ์ฌ์ฉ์ฑ ๋ฑ์ ์ด์ ๋ก ํ๋ก์ ํธ์ ์ ์ฉ๋๋ฉฐ, ์ ๋ช ํ ํจํด์ผ๋ก๋ MVC, MVVM์ด ์๋ค. ์ํคํ ์ณ์ ๊ด๋ จํด ๊ฐ๋ฐ์๋ผ๋ฉด ํ ๋ฒ์ฏค ๋ค์ด๋ณธ ์๊ธฐ๊ฐ ์๋ค.
MVC์ M์ 'masive'๋ผ๋ ์๋ฏธ๊ฐ ์๋๊น ํ๋ ์ ๋๋ก view controller๋ง ๋น๋ํด์ง๋ฉฐ ์ด๋ ๋นํจ์จ์ ์ธ ํจํด์ด๋ค.
๊ทธ๋ฌ๋ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํจ์จ์ ์ธ MVVM์ ์ฐ์.
MVC๋ผ๋ ๋ง์ ๋ฃ๊ณ ์ด๊ฒ ๋ญ๊น ํ๋ ๋ง์์ ๊ตฌ๊ธ์ ๊ฒ์ํ๋ ๊ธฐ์ต์ด ๋๋ค. MVC๋ฅผ ๊ฒ์ํ์๋ง์ ์ค๋ช
๊ณผ ๋จ์ , ๊ทธ๋ฆฌ๊ณ MVVM ์๊ธฐ๊ฐ ๋ฐ๋ก ์ด์ด ๋์๋ค. ๋๋ ์ด ๋ง์ ๋ณด๊ณ '์ค MVVM์ ๊ณต๋ถํ์' ์๊ฐ์ด ๋ค์๊ณ , ์ดํ ์ด๋ ์ ๋ iOS ๊ฐ๋ฐ์ ํ๊ฒ ๋ ์ค ์๊ฒ ๋์ MVVM์ ์ ์ฉํ Rx ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค.
๐ ๊ทธ๋์ MVVM์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์ ํ์ด?
์ง๋ฌธ์ ๋ตํ๊ธฐ ์ MVVM์ ์ ์ฉ ๊ณ๊ธฐ๋ถํฐ ์๊ธฐํ์๋ฉด, ์๋ก ์์ํ๋ ํ๋ก์ ํธ์์ ํ๋ก ํด๋ผ์ด์ธํธ๋ฅผ ๋งก๊ฒ ๋๋ฉฐ ๋์ ์ ์ธ ์์๊ฐ ์์ ๊ฒ ๊ฐ์ "Rx๋ฅผ ํด๋ณผ๊น?" ์๊ฐํ๊ฒ ๋์๋ค. ๋ง์นจ ์ต๊ทผ iOS ๊ฐ์ ์ค Rx ํํธ๋ฅผ ์๊ฐํ์๊ณ ๊ณต๋ถ๋ ์ค๋นํ๊ธฐ๋ณด๋ค๋ ์์ํด์ผ ๋๊ธฐ ๋๋ฌธ์, Rx ๊ทธ๋ฆฌ๊ณ ํญ์ ํจ๊ป ์ฌ์ฉ๋๋ MVVM์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ํ๋ค.
Rx์ ๋ํด์๋ ํ๊ณ ์ถ์ ๋ง์ด ๋ง์ง๋ง ๊ทธ๊ฑด ๋ค์์ผ๋ก ๋ฏธ๋ฃจ๊ฒ ๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก Rx๋ฅผ ์ด์ ๋ค๋ฃฐ ์ค ์๋ค! ๋ฌผ๋ก ์ด๋ก ์ ์ผ๋ก ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ ๊ฒ๋ค์ด ์ฐ๋๋ฏธ๊ฐ์ด ์์ง๋ง, ํ๋ก์ ํธ๋ฅผ ์ฝ 6๊ฐ์๋์ ํ๋ ํ ์ค์ ์๊ฒ ๋์๋ค๐คฃ
MVVM์ ๋ํ ๋๋ต์ผ๋ก๋ '๊ธ์..'๋ผ๊ณ ํ๊ณ ์ถ๋ค. ์ผ๋จ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ MVVM์ ๋ํด model, view model, view ๋ง ์๊ณ ์์ํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ MVVM ๊ตฌ์กฐ๋ฅผ ๊ฐ์์์ ๋ณด์ฌ์ค ๊ฑธ ๊ทธ๋๋ก ํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ์ํคํ
์ฒ๊ฐ ์ ์ ์ฌ๋ผ์ง๋ ๊ฒ ๊ฐ์๋ค. ๊ทธ๋์ ํ๋ก์ ํธ ์ค๋ฐ๋ถ๋๋ถํฐ ์ํคํ
์ณ๋ ๋ญ๊น, model์ ๋ญ๊น, MVC๊ฐ ์ ๋ง ์ ์ข์ ๊ฑธ๊น ๋ฑ ๋จธ๋ฆฟ์์ ๋ง์ ์ง๋ฌธ๋ค์ด ์์์ก๋ค.
๊ทธ๋์ ์ค๊ฐ์ค๊ฐ ๊ณต๋ถํ๊ธฐ๋ ํ๊ณ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด๊ธฐ๋ ํ๋ฉฐ ๊ณ์ ๋
ธ๋ ฅํ๋ค. ๋
ธ๋ ฅ ์ค ํ๋๋ก๋ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ์ ํ๋ค. View๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ์ด์ฌํ ๋ถ๋ฆฌํ๊ณ , extension์ ์ฌ์ฉํด ๊ธฐ๋ฅ์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์์ฑํ๋ค.
๐ค ๋๋ MVC๋ฅผ ์ ์ฉํด๋ณธ ์ ์๋?
์ง๋ 8์ ์ํฐ๋ ํ๋ฆฌ์จ๋ณด๋ฉ ์ฑ๋ฆฐ์ง์ ์ฐธ์ฌํ๋ฉฐ ์ผ๊ณฐ๋์ SwiftUI๋ฅผ ๋ค์๋ค. SwiftUI์ ๋ํด ๋ฐฐ์ฐ๋ ์๋ฆฌ์๊ธฐ์ MVVM ์๊ธฐ๊ฐ ๋น ์ง ์ ์์๋ค. ๊ทธ๋ ๊ฒ ์ํคํ ์ฒ์ ๋ํด ์๊ธฐ๋ฅผ ํ๋๋ฐ ์ผ๊ณฐ๋์ด ํ ๊ฐ์ง ์ง๋ฌธ์ ํ์ จ๋ค.(๊ธฐ์ต์ด ์ ๋์ง ์์ ๋ฌธ์ฅ์ด ์ ํํ์ง ์์ต๋๋คหแตห)
MVC๋ฅผ ์ ๋๋ก ์ฌ์ฉํด ๋ณด์ ์ ์๋์?
์ด ์ง๋ฌธ์ ๋ฐ๊ณ ์ ๋ง ๋ง์ ์๊ฐ์ด ๋ค์๋ค. ์ผ๋จ MVC๋ฅผ ์ฌ์ฉํด ๋ณธ ์ ์ด ์๋๊ฐ? ๋๋ ์ผ๋จ ์๋ค. view controller๋ก ์์
๋ ํ๋ดค๊ณ view๋ ๋ง๋ค์ด ๋ดค๊ณ model๋ ๋ง๋ค์ด๋ดค์ง๋ง, MVC ์ํคํ
์ฒ ํจํด์ ์ ์ฉํด๋ณด์ง๋ ์์๋ค. MVVM์ ์ ์ฌ์ฉํ๋๊ฐ? Rx๋ฅผ ์ฌ์ฉํ๋๋ฐ MVVM์ ์ฌ์ฉํ๋ค๊ณ ํด์.
+ SwiftUI์ ๋ํด์ ์ ๊น ์๊ธฐํ์๋ฉด, ์ผ๊ณฐ๋์ ๋ค๋ค SwiftUI์ MVVM์ ํจ๊ป ์๊ธฐํ์ง๋ง, Apple์์ SwiftUI๊ฐ MVVM์ ์ฌ์ฉํ๋ค๋ ๋ง์ ํ์ง๋ ์์๋ค๊ณ ์ง์ด์ฃผ์ จ๋ค. ์ด๊ฒ๋ ์ฐธ ๋ค์ํ ์๊ฐ์ด ๋ค๊ฒ ํ๋ค.
๋ค์ ํ๋ก์ ํธ ์ค๋ฐ๋ถ๋ ์ํคํ
์ณ์ ๋ํด ๊ตฌ๊ธ๋ง์ ์ด์ฌํ ํ์ ๋๋ก ๋์๊ฐ๋ณด์. ์์ฒญ ์ด์ฌํ MVC, MVP, MVVM ๋ฑ์ ๊ฒ์ํ๋ฉด์ ๋๋์ฒด ์ด๊ฒ๋ค์ ๋ฌด์์ธ๊ฐ, view์ model์ ๋ฌด์์ธ๊ฐ ๊ฒ์ํ๊ณ ์ฝ์ด๋ณด์๋ค. ๊ทธ๋ฌ๋ฉด์ model์ ์ญํ ์ด ๊ฝค ํฌ๋ค๋ ๊ฑธ ์๊ฒ ๋์๊ณ , ์ฌ๋ฌ ๋ด์ฉ๋ค์ ๋ณด๊ฒ ๋์๋ค. ๊ทธ ์ค ๊ฐ์ฅ ์ธ์ ๊น์๋ ๊ฑด ์๋ ๋ฌธ์ฅ์ด์๋ค. (์ด๊ฒ๋ ๊ธฐ์ต์ด ์ ๋์ง ์์ ๋ฌธ์ฅ์ด ์ ํํ์ง ์์ต๋๋คหแตห)
๋ชจ๋ ์ํคํ ์ฒ์ ๊ธฐ๋ณธ์ View์ ๋ถ๋ฆฌ์ด๋ค.
์ ํํ๊ฒ ๊ธฐ์ต์ ์ ๋์ง๋ง, '์ด๋ค ์ํคํ
์ฒ๋ฅผ ์ธ์ง ๊ณ ๋ฏผํ๊ธฐ ์ ์ View ๋ถ๋ฆฌ๋ถํฐ ํ๋ผ', '๊ธฐ๋ณธ์ View์ ๋ถ๋ฆฌ'๋ผ๋ ์๊ธฐ์๋ค. ์ด ๋ถ์ ๊ธ์ ์ฝ๊ณ , View ๋ถ๋ฆฌ๋ฅผ ์ ๋๋ก ํด๋ณธ ์ ์ด ์๋์ง ์๊ฐํด ๋ณด์๋ค. <๊ฒ์ผ๋ฅธ์ฟ ํค>, <์ผ๊ธฐ>, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋น์ ํ๊ณ ์๋ ์ ํ๋ก์ ํธ <์ํ>๋ View๋ฅผ ๊ทธ๋ค์ง ๋ถ๋ฆฌํ์ง ์์๋ค. ์ ๊ทธ๋ฌ๋ ์๊ฐํด๋ณด๋, ์ปค์คํ
๋ทฐ๋ฅผ ๋ง๋๋๊ฒ ํท๊ฐ๋ ธ๊ณ , ๊ธฐ๋ฅ์ ๊ตฌํํ๋๊ฒ ์ด๋ ค์ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํด์ผํ ์ง ๋ชฐ๋๋ค. ์ด๋ ํ ๊ฐ์ง ๋ค์ง์ ํ๋ค. ๋ด๊ฐ ์ํคํ
์ฒ๋ ์ ๋ชจ๋ฅผ ์ง๋ผ๋ View๋ ๋ถ๋ฆฌํ๋ค!
๐ซ MVC ๋์ฅ๋ผ ๊ฑฐ์ผ
View๋ฅผ ๋ถ๋ฆฌํ๊ฒ ๋ค๋ ๋ค์ง ์ดํ๋ก <์ํ> ์ค๊ฐ์ค๊ฐ ๋ฆฌํฉํ ๋ง๋ ์งํํ๋ฉฐ ์๊ฐ๊ณผ ์ญ๋์ด ๋ฟ๋ ํ View๋ฅผ ๋ถ๋ฆฌํ๋ค. ๋ํด์ ๊ธฐ๋ฅ๋ ๋ถ๋ฆฌํ๋ ค ๋
ธ๋ ฅํ๋ค. ์ด๋ฌํ ๋
ธ๋ ฅ์ ํ๋ ๋ถ๋ฆฌ๊ฐ ์ด๋ ต์ง ์์์ก๊ณ , ์ด๋ป๊ฒ ํ๋ฉด ๋ ํจ์จ์ ์ผ๋ก ๋ง๋ค ์ ์์๊น ๊ณ ๋ฏผํ๋ค. ๋ ๋์๊ฐ ์ ๋ง ์ ๋๋ก MVC๋ฅผ ์ ์ฉํด๋ณด๋ฉด ์ด๋จ์ง ๊ถ๊ธํด์ก๋ค.
iOS๋ฅผ ์์ํ์ง ์ฝ 3-4๊ฐ์์ฏค ๋์๋ ๋ง๋ <๊ฒ์ผ๋ฅธ์ฟ ํค>๋ผ๋ ์ฑ์ด ์๋ค. ์ ๋ง ๊ทธ๋ ๊ธฐํ, ๋์์ธ, ๊ฐ๋ฐ๊น์ง ํผ์ ๋ค ํ๋ฉด์ ๋๋ฌด ์ด๋ ต๊ณ ํ๋ค์๋ค. ๊ทธ๋ ๊ฒ ์๊ณ ์์คํ ์ฑ์ ๋ง๋ค์ด ์ฑ์คํ ์ด์ ๋ฐฐํฌ๊น์ง ํด์ ์ ๋ง ํ๋ณตํ๋ค. ๊ทธ ์ฑ์ ํ์ด๋จธ ์ฑ์ธ๋ฐ ์ฌ์ค ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ๋์๊ฐ์ง ์์ ๊ฐ์ ์ด ํ์ํ ์๋น์ค์ด๋ค. ํ์ง๋ง ๊ณ์ ํ์
, ๋์ธํ๋, iOS ๊ณต๋ถ ๋ฑ์ ํ๋ค ๋ณด๋ ํ ๋ฒ๋ ์
๋ฐ์ดํธ๋ฅผ ํ์ง ๋ชปํ๋ค. ๊ทธ๋์ ์ด๋ฒ์ ์ด ์ฑ์ ์๋กญ๊ฒ ๋ง๋ค๋ฉฐ MVC๋ฅผ ์ ๋๋ก ์ ์ฉํด๋ณด๊ณ ์ ํ๋ค. ๋๋ถ์ด ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ, SnapKit๋ฅผ ์ฌ์ฉํ์ง ์๋ Code-based UI, Observer ๋ฑ ๋ชจ๋ ๊ฑธ built-in๋๊ณ Swift์์ ์งํฅํ๋ ๊ฒ๋ค๋ก๋ง ๋ง๋ค ์์ ์ด๋ค.
์ง๊ธ๊น์ง SnapKit, Rx, AlamoFire, Kingfisher ๋ฑ์ ์ฌ์ฉํ๋ฉฐ ํญ์ ์ ์ฌ์ฉํ๋ ๊ฑธ๊น ๊ถ๊ธํ๋ค. ๊ทธ๋์ ํ ๋ฒ์ฏค์ ์๋์ ๊ฒ์ ์ฌ์ฉํด๋ณด์ ์๊ฐํ๋๋ฐ, ๊ฐ์ฅ ์ฒ์์ ๋ง๋ <๊ฒ์ผ๋ฅธ์ฟ ํค>๊ฐ ์ ํฉํ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ ๊ธฐํ์ Swift์ iOS์ ๋ํด ์์ ํ ์์๊ฐ๊ณ ์ถ๋ค.
โ ๊ณต๋ถ ์์
'์งง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ์งง์ ] 6 - iOS ๊ฐ๋ฐ์๋ ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์๊ฒฉ์ฆ์ด ํ์ํ ๊น (1) | 2024.06.19 |
---|---|
[ ์งง์ ] 5 - ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๋ ์ดํด ํ๋ ค๋ค (1) | 2024.03.29 |
[ ์งง์ ] 4 - '์ผ๊ธฐ' ๋ฆฌํฉํ ๋ง ์์! (1) | 2024.01.29 |
[ ์งง์ ] 2 - UIAlertContoroller ์๋ธํด๋์ฑํ๊ธฐ (0) | 2023.08.16 |
[ ์งง์ ] 1 - PHPhotoViewController (0) | 2023.08.10 |