- ํ์ฌ ์์์ค์ธ ์ํ ์ดํด๋ณด๊ธฐ.
- ํ์ฌ ์์์ค์ธ ์ํ ๋ฆฌ์คํธ ๊ฐ์ ธ์ค๊ธฐ API ๋ฐ ์์ธ ์ํ ๊ฐ์ ธ์ค๊ธฐ API๋ฅผ ํตํด ๋คํธ์ํฌ ํต์ .
- ์ ์ ๊ฐ ์ฑ์ ํค๋ฉด, ์์์ค์ธ ์ํ ๋ฆฌ์คํธ๊ฐ ๋์ด.
- ๋ฆฌ์คํธ์ ์ํ๋ฅผ ์ ํํ๋ฉด ์์ธ์ ๋ณด๊ฐ ๋์ด.
- ํญ๋ฐ์ '์ ์ฅ'๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅ ๋๊ณ , ๋ณด๊ดํจ ํ๋ฉด์์ ์ ์ฅ๋ ์ํ ์ ๋ณด ๋ฆฌ์คํธ๊ฐ ๋์ด.
- ํ์ด์ง ์ฒ๋ฆฌ ๋ฐ Swipe๋ฅผ ํตํ ๋ทฐ ์๋ก๊ณ ์นจ.
- ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์๋ ๊ฒฝ์ฐ ์บ์ฑ๋ ์์ ์ค์ธ ์ํ ์ ๋ณด ๋ฆฌ์คํธ ๋ ธ์ถ.
- MVVM
- CleanArchitecture
- Repository pattern ( Remote / Local )
- Dependency injection ( Swinject )
- DataBinding( RxSwift )
- Local Database ( RxCoreData )
- MVVM ํจํด์ ์ ์ฉํ์ฌ ๊ฐ๋ฐํ๋ค.
- CleanrArchitecture ๋ฆฌํฉํ ๋ง ํ๋ค.
๐ก MVVM (MVVM branch)
- ํ๋ฉด ๋ฐ์ดํฐ ์ ์ถ๋ ฅ ๋ฐ ์ฌ์ฉ์ ์ธํฐ๋ ์ ์ ๋ด๋นํฉ๋๋ค.
- ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ๋ ViewModel์๊ฒ ์์ํฉ๋๋ค.
- RxSwift๋ฅผ ์ด์ฉํ์ฌ ViewModel์ ๊ตฌ๋ ํ๊ณ ViewModel ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ์ ์ ๋ฌ๋ฐ์ ํ๋ฉด์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํด์ค๋๋ค.
- ์ฑ์ ๋น์ฆ๋์ค๋ก์ง ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ฉฐ View์์ ์์กด์ฑ์ด ์ ํ ์์ต๋๋ค.
- RxSwift๋ฅผ ์ด์ฉํ์ฌ ViewModel์ ๊ตฌ๋ ํ View์๊ฒ ๋น์ฆ๋์ค๋ก์ง ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๊ฐ์ Notify ํด์ค๋๋ค.
- Remote / ์์์ฑ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ์์ ์ ๊ฐ๊ฐ RemoteDataSource / LocalDataSource์๊ฒ ์์ํฉ๋๋ค.
- ์ธํฐํ์ด์ค์ธ RemoteDataSource / LocalDataSource๋ฅผ ์์กดํ๊ฒ ํ๊ฒ ํ๊ณ Main์์ ๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ตฌ์ฒด ํด๋์ค(RemoteDataSourceImpl, LocalDataSourceImpl)๋ฅผ ์ฃผ์ ํด์ค์ผ๋ก์จ DIP(์์กด์ฑ ์ญ์ ์์น)์ ๊ตฌํํ์์ต๋๋ค.
- Remote / ์์์ฑ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
- RxSwift๋ฅผ ์ด์ฉํ์ฌ ์์ ์ ๊ตฌ๋ ํ๊ณ ์๋ ViewModel์๊ฒ ์ฐ์ฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ Notify ํด์ค๋๋ค.
๐ก CleanArchitecture (CleanArchitectrue branch)
- ๋ณํ๊ฐ ๋ง์ ํ์ ์ปดํฌ๋ํธ์ธ Prersentation Layer์ Data Layer์ ์์กด์ฑ์ด ์์ ์ปดํฌ๋ํธ์ธ Domain Layer๋ฅผ ํฅํฉ๋๋ค.
- ์ค์ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ์ปดํฌ๋ํธ๋ค์ ๋ชจ์๋์ ๋ ์ด์ด ์ ๋๋ค.
- ๋ทฐ์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ Domain Layer์ ์ ๋ฌํ๊ณ , Domain Layer๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ญํ ์ ์งํํฉ๋๋ค.
- ViewModel์ MVVM์์ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ์์ผ๋, CleanArchitecture์์๋ Domain Layer์๊ฒ ๋จ์ํ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ฑฐ๋, Domain Layer์์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ View์ ํ์ํ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํด์ฃผ๋ ์ญํ ๋ง ๋ด๋นํฉ๋๋ค.
- CleanArchitecture์์ Presentation Layer์ Domain Layer๊ฐ ๋ฐ์ดํฐ ํต์ ์ Controller์ Presentation์ ํตํด ์ด๋ฃจ์ด์ง์ง๋ง ํธ์์ ๋ ๊ฐ๋ ์ ํฉ์น ViewModel๋ก ๊ตฌํํ์์ต๋๋ค.
- ViewModel์ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ๋ฅผ Domain Layer์ UseCase์๊ฒ ์์ํฉ๋๋ค.
- DIP๊ตฌํ์ ์ํด ์ธํฐํ์ด์ค์ธ UseCase๋ฅผ ์์กดํ๊ณ Main์์ UseCaseImpl์ ์ฃผ์ ํ์ฌ ๋์จํ ๊ด๊ณ๋ฅผ ๋ง๋ค์์ต๋๋ค.
- ๋ฐ์ดํฐ ํต์ ์ UseCase๊ฐ ์ฐธ์กฐํ๋ Request Model๊ณผ Response Model์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
- ์ํฐํฐ์ ์ ์ฆ์ผ์ด์ค๋ฅผ ์ ์ ํด ๋์ ์ปดํฌ๋ํธ๋ค์ ๋ชจ์๋์ ๋ ์ด์ด ์ ๋๋ค.
- Presentation Layer๋ก ๋ถํฐ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ Data Layer์ ์ ๋ฌํ๊ณ , Data Layer๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ Presentation Layer๋ก ์ ๋ฌํ๋ ์ญํ ์ ์งํํฉ๋๋ค.
- Repository๋ฅผ ํตํด Data Layer์ ์ํตํ๊ณ , UseCase๋ฅผ ํตํด Presentation Layer์ ์ํตํฉ๋๋ค.
- ๋น์ฆ๋์ค ์
๋ฌด ๊ท์น์ ๋ด๋นํ๋ ์ต์์ ์ปดํฌ๋ํธ์ธ Domain Layer์์๋ ์ด๋ ํ ํ์ ์ปดํฌ๋ํธ์ ์์กดํด์๋ ์๋ฉ๋๋ค.
- ๋ฐ๋ผ์ Domain Layer์์๋ Data Layer์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ผ๋ Remote/Local์์ ๊ฐ์ง๊ณ ์ค๋์ง ์ฌ๋ถ๋ฅผ ์๋ฉด ์๋๊ธฐ ๋๋ฌธ์ Repository ํจํด์ ์ ์ฉํ์์ต๋๋ค.
- ์ค์ ๋น์ฆ๋์ค ๋ก์ง๋ค์ ์ฒ๋ฆฌํ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ชจ์๋์ ๋ ์ด์ด ์ ๋๋ค.
- ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋, ์ ์ฅํ๋ ์ญํ ์ ์งํํฉ๋๋ค.