๋ชฉ์ฐจ
๋ค์ด๊ฐ๊ธฐ ์ ์
ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ MVVM์ผ๋ก ์กํ์์๊ณ ์ด์ ๋ง์ถ์ด์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ๋๋์ฑ MVVM์ ๋ํ ์ดํด๋ฅผ ๋์ฌ์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๋ฐ๋ผ์ ์ฐ์ ๊ฐ layer๊ฐ ์ด๋ค ์ญํ ์ ํ๊ณ ์ด๋ค ๋ก์ง์ ํฌํจํ๋์ง์ ๋ํด์๋ถํฐ ๊ณต๋ถ๋ฅผ ํด๋ณด์!
๊ฐ ๋ ์ด์ด์ ์ญํ
1๏ธโฃUI ๋ ์ด์ด๋ ํ๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํด์ค๋ค.
2๏ธโฃ๋ฐ์ดํฐ ๋ ์ด์ด๋ ์ฑ์ ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ ธ์ถํด์ค๋ค.
3๏ธโฃ๋๋ฉ์ธ ๋ ์ด์ด๋ UI์ ๋ฐ์ดํฐ ๋ ์ด์ด ๊ฐ์ ์ํธ์์ฉ์ ๊ฐ์ํํ๊ณ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
์ ๋ค์ด์ด๊ทธ๋จ์ ์๋๋ก์ด๋ ์ฑ ์ํคํ ์ณ๋ฅผ ๋ํ๋ด๊ณ ์๋ค. ํ์ดํ๋ ํด๋์ค ๊ฐ์ ์ข ์์ฑ์ ๋ํ๋ด๋๋ฐ ๋๋ฉ์ธ ๋ ์ด์ด๋ ๋ฐ์ดํฐ ๋ ์ด์ด ํด๋์ค์ ์ข ์๋๋ค.
di๋ก ์๊ฐํ๋ฉด ๋ฐ์ดํฐ ๋ ์ด์ด ํด๋์ค์ ๋๋ฉ์ธ ๋ ์ด์ด์ ๊ฐ์ฒด๊ฐ ์ฝ์ ๋๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค.
์ด์ ๊ฐ๊ฐ์ ๋ ์ด์ด์ ๋ํด์ ๋ ๊น์ ์ดํดํด๋ณด์
UI ๋ ์ด์ด
UI ๋ ์ด์ด๋ ์์์ ๋งํ๋ฏ์ด ํ๋ฉด์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ์ญํ ์ ๊ฐ์ง๋ค. ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ํธ์์ฉ, ๋คํธ์ํฌ ์๋ต๊ณผ ๊ฐ์ ์ธ๋ถ ์ ๋ ฅ์ผ๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ๋ณํ ๋๋ง๋ค ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋๋ก UI๊ฐ ์ ๋ฐ์ดํธ ๋์ด์ผํ๋ค.
UI ๋ ์ด์ด๋ ๋ ๊ฐ์ง๋ก ๊ตฌ์ฑ๋๋ค.
1๏ธโฃ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ๋ UI ์์
--> ์ด ์์๋ ๋ทฐ ๋๋ ์ปดํฌ์ฆ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ํ ์ ์๋ค.
2๏ธโฃ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ๊ณ ์ด๋ฅผ UI์ ๋ ธ์ถํ๋ฉฐ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ํ ํ๋
--> ๋ทฐ ๋ชจ๋ธ ํด๋์ค๊ฐ ์ด๋ฌํ ์ํ ํ๋์ ํด๋นํ๋ค.
๋ฐ์ดํฐ ๋ ์ด์ด
์ฑ์ ๋ฐ์ดํฐ ๋ ์ด์ด์๋ ๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋๋ค. ์ฌ๊ธฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฑ์ ๋ฐ์ดํฐ ์์ฑ, ์ ์ฅ, ๋ณ๊ฒฝ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ ๊ท์น์ผ๋ก ๊ตฌ์ฑ๋๋ค.
๋ฐ์ดํฐ ๋ ์ด์ด๋ 0๊ฐ๋ถํฐ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ฐ๊ฐ ํฌํจํ ์ ์๋ ์ ์ฅ์, Repository๋ก ๊ตฌ์ฑ๋๋ค. ์ฑ์์๋ ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ, ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ฐ์ดํฐ๋ณ๋ก ์ ์ฅ์ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผํ๋ค. ์๋ฅผ ๋ค์ด ๋ก๊ทธ์ธ ๊ด๋ จ ๋ฐ์ดํฐ์๋ AuthRepository ํด๋์ค๊ฐ ํ์ํ๊ณ , ์ํ ๊ด๋ จ ๋ฐ์ดํฐ์๋ MoviesRepository๊ฐ ํ์ํ๋ค.
๊ทธ๋ฌ๋ฉด ๋ก๊ทธ์ธ ๊ด๋ จ ๋ฐ์ดํฐ๋ ๋ก๊ทธ์ธ ์ ์ฅ์ ํด๋์ค์ ์ ์ํด์ผํ๋ค๋ ๊ฒ์ ์์๋๋ฐ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ์์ ์ด ํฌํจ๋์ด์ผํ ์ง๋ ์์ง ๋ชจ๋ฅด๊ฒ ๋ค. ์ด์ ์ ์ฅ์ ํด๋์ค์์ ๋ด๋นํ๋ ์์ ์ ์์๋ณด์.
๐ซ ์ ์ฅ์ ํด๋์ค์์ ๋ด๋นํ๋ ์์
1๏ธโฃ์ฑ์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ฐ์ดํฐ ๋ ธ์ถ
2๏ธโฃ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ฌํญ์ ํ ๊ณณ์ ์ง์ค
3๏ธโฃ์ฌ๋ฌ ๋ฐ์ดํฐ ์์ค ๊ฐ์ ์ถฉ๋ ํด๊ฒฐ
4๏ธโฃ์ฑ์ ๋๋จธ์ง ๋ถ๋ถ์์ ๋ฐ์ดํฐ ์์ค ์ถ์์
5๏ธโฃ๋น์ฆ๋์ค ๋ก์ง ํฌํจ
๊ฐ ๋ฐ์ดํฐ ์์ค ํด๋์ค๋ ํ์ผ, ๋คํธ์ํฌ ์์ค, ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ํ๋์ ๋ฐ์ดํฐ ์์ค๋ง ์ฌ์ฉํด์ผํ๋ค. ๋ฐ์ดํฐ ์์ค ํด๋์ค๋ ๋ฐ์ดํฐ ์์ ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์์คํ ๊ฐ์ ๋ค๋ฆฌ ์ญํ ์ ํด์ค๋ค.
โ ๏ธ์ฃผ์์ฌํญ
1๏ธโฃ๊ณ์ธต ๊ตฌ์กฐ์ ๋ค๋ฅธ ๋ ์ด์ด๋ ๋ฐ์ดํฐ ์์ค์ ์ง์ ์ ๊ทผํ๋ฉด ์๋๋ค. ๋ฐ์ดํฐ ๋ ์ด์ด์ ์ง์ ์ ์ ํญ์ Repository ํด๋์ค์ฌ์ผํ๋ค. ๋ทฐ ๋ชจ๋ธ์ด๋ ์ฌ์ฉ ์ฌ๋ก ํด๋์ค์์๋ ๋ฐ์ดํฐ ์์ค๊ฐ ์ข ์ ํญ๋ชฉ์ผ๋ก ์์ผ๋ฉด ์๋๋ค.
2๏ธโฃ์ด ๋ ์ด์ด์์ ๋ ธ์ถ๋ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํด์ผํ๋ค. ๊ทธ๋์ผ ๊ฐ์ ์ผ๊ด๋์ง ์์ ์ํ๋ก ๋ง๋ค ์ํ์ ๋น ์ง์ง ์๋๋ค!
๋ํ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ํ๋ ์ฌ๋ฌ ์ค๋ ๋์์ ์์ ํ๊ฒ ์ฒ๋ฆฌ๋ ์ ์๋๋ก ํด์ค๋ค.
๐API ๋ ธ์ถ
๋๋ฉ์ธ ๋ ์ด์ด
์ด์ ๋ง์ง๋ง์ผ๋ก ๋๋ฉ์ธ ๋ ์ด์ด์ ๋ํด ์ดํดํด๋ณผ ์ฐจ๋ก์ด๋ค.
๋๋ฉ์ธ ๋ ์ด์ด๋ UI ๋ ์ด์์ ๋ฐ์ดํฐ ๋ ์ด์ด ์ฌ์ด์ ์๋ ์ ํ์ ๋ ์ด์ด์ด๋ค. ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ์ฌ๋ฌ ๋ทฐ ๋ชจ๋ธ์์ ์ฌ์ฌ์ฉ๋๋ ๊ฐ๋จํ ๋น์ฆ๋์ค ๋ก์ง์ ์บก์ํ๋ฅผ ๋ด๋นํ๋ค.
์ด ๋๋ฉ์ธ ๋ ์ด์ด์ ํด๋์ค๋ ์ฌ์ฉ์ฌ๋ก๋๋ ์ํธ์์ฉ์๋ผ๊ณ ํ๋ค. Use Case ๊ฐ๋ ์ด ์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ค. ์ด ๋ ๊ฐ ์ฌ์ฉ ์ฌ๋ก๋ ํ๋์ ๊ธฐ๋ฅ์ ๋ด๋นํด์ผํ๋ค.
์๋ฅผ ๋ค์ด ์ฌ๋ฌ ๋ทฐ ๋ชจ๋ธ์์ ์๊ฐ๋๋ฅผ ์ฌ์ํ์ฌ ํ๋ฉด์ ์ ์ ํ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ๊ฒฝ์ฐ ์ฑ์๋ GetTimeZoneUseCase ํด๋์ค๊ฐ ์์ ์ ์๊ณ , ์ฐ๋ฆฌ ํ๋ก์ ํธ์์ ์ ๊ณตํ๋ ์นด์นด์ค, ๋ค์ด๋ฒ, ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ์์ฒญ ์์ ์ด ํ์ํ๋ค. ์ด ๋์๋ MakeLoginRequestUseCase ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.