์๋ ํ์ธ์, ์ ์ธ์ ๋๋ค!
์ต๊ทผ ์์ํ ์ํคํ ์ฒ ๋ฐ ๋์์ธ ์คํฐ๋์์ ์ฒซ๋ฒ์งธ๋ก ์ฃผ์ ๋ก ๋ค๋ฃจ์๋ VIPER ์ํคํ ์ฒ ํจํด์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค ํฉ๋๋ค.
๋ฐ๋ก ์์ํ๊ฒ ์ต๋๋ค๐
VIPER Pattern์ด๋?
View, Interactor, Presenter, Entity, Router์ ์ฝ์๋ฅผ ๋ฐ์์ VIPER๋ผ๋ ์ด๋ฆ์ด ๋ช ๋ช ๋ ๋จ์ผ์ฑ ์์์น ๊ธฐ๋ฐ์ ์ํคํ ์ณ์ ๋๋ค. ์์ง๋๋ ๋๊ณ ๊ฒฐํฉ๋๋ ๋ฎ์ ํํ๋ก, ์๋ฌด๋๋ ๊ฐ๊ฐ์ ๊ตฌ๋ถ์ด ๋ง์ ๋งํผ ์ญํ ๋จ์์ ๊ตฌ๋ถ์ด ๋ช ํํฉ๋๋ค. (์ด๊ฒ์ด ๋ญ๊ฐ ์ฅ์ ์ด ๋ ์๋ ๋จ์ ์ด ๋ ์๋ ์๋ ๊ฒ ๊ฐ๊ธดํฉ๋๋ค..)
์ดํด๋ฅผ ๋๊ธฐ ์ํด ๊ทธ๋ฆผ์ผ๋ก ํํํด๋ดค๋๋ฐ์, ํ๋์ฉ ์ดํด๋ด ์๋ค!
- View : ์ด๋ค ํจํด์ด๋ ์ฌ์ฉํ๋ View ์ญํ ์ ๋๋ค. ์ฃผ๋ก UIViewController, UIView๋ค์ด ์ด ์ญํ ์ ํ๊ฒ๋ฉ๋๋ค. ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์ํ๊ณ ๋ณด์ฌ์ฃผ๋ ์ญํ ์ ํ๋ฉฐ, ์ฃผ๋ก Presenter์ ์ํธ์์ฉํฉ๋๋ค.
- Presenter : UI ๊ด๋ จ ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจํฉ๋๋ค. View์ ์ก์ ์ ๋ฐ์์ Interactor๋ก ์ ๋ฌํ๊ณ Interactor๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ View์ Updateํ๋ ๋ก์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Interactor : ๋ฐ์ดํฐ ๋๋ ๋คํธ์ํฌ์ ๊ด๋ จ๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ๋จ์์ ๋๋ค. ์ฃผ๋ก API ํธ์ถ, data ๊ด๋ จ๋ ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ๋จ์์ ๋ชจ๋์ ๋๋ค. (๋ทฐ์๋ ์์ ๋ ๋ฆฝ์ ์ธ ์ญํ ์ ํ๋ ๋ชจ๋)
- Entity : ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ค์ ๋๋ค. ๋จ์ํ๊ฒ, ๋ฐ์ดํฐ ๋ชจ๋ธ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
- Router : ํ๋ฉด์ด ์ธ์ ํ์๋์ด์ผํ๋์ง ์ด๋ค ํ๋ฉด์ ๋์ธ์ง ๋ฑ Navigatoin ๋ก์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. (๋ทฐ ์ ํ ๋ด๋น)
๊ธฐ์กด MV* ํจํด๊ณผ์ ์ฐจ์ด์
ํ๋ฉด์ ์ผ๋ก ๋ณด์ด๋ ์ฐจ์ด์ ์ Interactor, Entity, Router๊ฐ ์ถ๊ฐ๋์๋ค๋ ๊ฒ์ ๋๋ค!
๊ธฐ์กด์ ๊ธฐ๋ฅ์ด ๋ ์ชผ๊ฐ์ ธ ๋ถ๋ฆฌ๋์๋ค๋ ๊ฒ์ธ๋ฐ์, ๋ฌด์์ด ๋๋์ด์ก์๊น์??๐ค
- ๊ธฐ์กด MV* ํจํด์์ ๋ฐ์ดํฐ ์ํธ์์ฉ ๋ก์ง์ ๋ด๋นํ๋ Model์ ๊ธฐ๋ฅ์ด VIPER์์๋ Interactor(๋น์ง๋์ค ๋ก์ง ๋ด๋น)์ Entities(๋ฐ์ดํฐ ๋ชจ๋ธ)๋ก ๋๋์ด์ก์ต๋๋ค.
- Router์ ์ํด ํ๋ฆฌ๋๋ก ๋์ด์๋ ์ฃผ์ ๋ค๋น๊ฒ์ด์ ์ฑ ์์ ๋ช ์์ ์ผ๋ก ๋ค๋ฃจ๋ ์ฒซ๋ฒ์งธ ํจํด์ด VIPER์ ๋๋ค. ๊ธฐ์กด MV* ํจํด์์๋ ์ ์ ํ ๋ผ์ฐํ (ํ๋ฉด ์ ํ) ๋ฐฉ์์ ๋ํ ์ด์๋ฅผ ๋ค๋ฃจ์ง ์์์ต๋๋ค.
- Presenter์ ์ญํ ๋ ๊ธฐ์กด๊ณผ ์ฐจ์ด๊ฐ ์์ต๋๋ค. MVP์์๋ Presenter๊ฐ ๋ชจ๋ ๋ก์ง์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ์์ต๋๋ค. View์์ ์์ฒญํ ์ ๋ณด(UI, ๋ฐ์ดํฐ๊ด๋ จ ๋ชจ๋) ๋ฅผ Model๋ก๋ถํฐ ๊ฐ๊ณตํ์ฌ View๋ก ๋ค์ ์ ๋ฌํ์๋๋ฐ, VIPER์์๋ UI์ ๊ด๋ จ๋ ์ฒ๋ฆฌ๋ง์ ๋งก์ต๋๋ค. ๋ฐ์ดํฐ ๋๋ ๋คํธ์ํฌ์ ๊ดํ ์ฒ๋ฆฌ๋ Interactor๊ฐ ๋ด๋นํฉ๋๋ค.
VIPER์ ์ฅ์ ๊ณผ ๋จ์
์ข์ ์ํคํ ์ฒ์ 3๊ฐ์ง ํน์ง์ธ Distribution, Testability, Easy of use๋ฅผ ๊ธฐ๋ฐ์ผ๋ก VIPER์ ์ฅ์ ๊ณผ ๋จ์ ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค!
- Distribution - ๊ฐ๊ฐ์ ์ญํ ๊ตฌ๋ถ์ด ์ ๋ง ๋ช ํํ๊ธฐ ๋๋ฌธ์ ์ฑ ์ ๋ถ๋ฐฐ ๋ฉด์์๋ ์ ๋ง ํฐ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Testability - ์ฑ ์ ๋ถ๋ฐฐ์ ๋ช ํ์ฑ(๋ ๋ฆฝ์ฑ)์ ๋ ์ข์ testability๋ฅผ ๋ง๋ญ๋๋ค.
- Easy of Use - ์์์๋ ์ธ๊ธํ๋ฏ, ์ญํ ๋จ์์ ๊ตฌ๋ถ์ด ๋ช ํํ ๊ฒ์ด ์ฅ์ ์ด์ ๋จ์ ์ด๋ผ๊ณ ํ ์ ์์ ๊ฒ ๊ฐ์๋ฐ์, ๋งค์ฐ ์์ ์ญํ ์ ๊ฐ์ง๋ ํด๋์ค๋ค์ ์ํด ์์ฒญ๋๊ฒ ๋ง์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ง์ ์ ์ง๋ณด์ ๋น์ฉ์ด ๋ ๋ค๋ ๊ฒ์ด ๋จ์ ์ ๋๋ค.
์คํฐ๋์๋ค๊ณผ ํจ๊ป ์์ ์ฝ๋๋ ๋ณด๋ฉฐ VIPER์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ๋๋ ๊ฒฐ๊ณผ..
VIPER..๋์ฒด ์ ์ฐ๋๊ฑฐ์ง..? ๋ผ๋ ์ด์ผ๊ธฐ๊ฐ ๋์ฌ ์ ๋๋ก ์ฅ์ ๋ณด๋ค ๋จ์ ์ด ๋ ๋ง์ ํจํด์ด๋ผ๋ ์๊ฐ์ด ๋ค์๋๋ฐ์ (ํนํ ์ ์ง๋ณด์ ๋ฉด์์)
๋ค์ ํฌ์คํ ์์ VIPER์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋ฑ์ฅํ RIBs์ ๋ํด ํ๋ฒ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค๐
[์ฐธ๊ณ ์๋ฃ]
'๐ iOS > Architecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS/Architecture] UseCase ํ์ฉ๊ธฐ (0) | 2024.08.28 |
---|---|
[Architecture] Clean Architecture (1) | 2024.01.03 |
[Architecture] MVC, MVP, MVVM ์ํคํ ์ฒ ํจํด (2) | 2022.03.25 |