- SDK Version Min 26
- Target 33
- https://unsplash.com/developers ์ฌ๊ธฐ์ 'Register as a developer'๋ก API ACCESS_KEY๋ฅผ ๋ฐฐ์ ๋ฐ์ผ์ ํ, local.properties์ ACCESSKEY = YOUR_ACCESS_KEY๋ก ์ ๋ ฅ
-
์ด๋ฏธ์ง๋ฅผ ๊ฒ์ํด์ ๋ถ๋งํฌ๋ก ์์งํ๋ Unsplash ํด๋ก ์ฑ
-
์ด๋ฏธ์ง ๊ฒ์ API (https://api.unsplash.com/search/photos)์ results ํ๋
-
UI๋ (Search, Detail, Bookmark)3๊ฐ์ Screen์ ์ฌ์ฉ
* ์ฒซ ๋ฒ์งธ Screen : ๊ฒ์ ๊ฒฐ๊ณผ
- ๊ฒ์์ด๋ฅผ ์
๋ ฅํ ์ ์๋ค.
- ๊ฒ์๋ ์ด๋ฏธ์ง ๋ฆฌ์คํธ๊ฐ ๊ทธ๋ฆฌ๋๋ก ๋ํ๋๋ค. ์ด๋, ๋ถ๋งํฌ๊ฐ ๋ ์์ดํ
์ ๊ฒฝ์ฐ, ๋ถ๋งํฌ ์์ด์ฝ๊ณผ ํจ๊ป ํ์
- ์คํฌ๋กค์ ํตํด ๋ค์ ํ์ด์ง๋ฅผ ๋ถ๋ฌ์จ๋ค.
- ๋ฆฌ์คํธ์์ ํน์ ์ด๋ฏธ์ง๋ฅผ ์ ํํ์ฌ Detail Screen์ผ๋ก ์ด๋ํ ์ ์๋ค.
* ๋ ๋ฒ์งธ Screen : ์์ธ ํ๋ฉด
- ์ ํํ ์ด๋ฏธ์ง์ ์์ธ ์ ๋ณด(id, author, width*height, create at)๋ฅผ ๋ณด์ฌ์ค๋ค.
- ์ด๋ฏธ์ง๋ฅผ ๋ถ๋งํฌ๋ก ์ ์ฅํ๊ฑฐ๋ ์ ์ฅ๋ ๊ฒ์ ์ ๊ฑฐํ ์ ์๋ค.
* ์ธ ๋ฒ์งธ Screen : ๋ถ๋งํฌ ๋ฆฌ์คํธ
- ๋ถ๋งํฌ๋ก ์ ์ฅ๋ ์ด๋ฏธ์ง๋ค์ ๋ณด์ฌ์ค๋ค.
- ์ด๋ฏธ์ง๋ฅผ ์ ํํ์ฌ Detail Screen์ผ๋ก ์ด๋ํ ์ ์๋ค.
- Jetpack Compose (UI)
- Kotlin DSL (Gradle)
- Retrofit2 (API ํต์ )
- Room (SQLite DB)
- Paging3 (ํ์ด์ง ์ฒ๋ฆฌ)
- Hilt (DI)
- Moshi (JSON ํ์ฑ)
- Glide for Compose (์ด๋ฏธ์ง ํ์)
- Timber (๋ก๊ทธ)
F 1) ViewModel -> Repository ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ๊ฐ์ฌ ๋๋ฉ์ธ ๋ก์ง์ด VM ์์ ์ฒ๋ฆฌ๋๊ธฐ์, ๋ถ๋งํฌ ํ์๋ฅผ ์ํ ๋ณ๋์ ๋ก์ง์ ๊ฐ VM ๋ง๋ค ์์ฑํด์ผํ ๊ฒ๋ค์ ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
A: ๋ถ๋งํฌ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ๋ Detail Screen ํ๊ณณ์์๋ง ๊ฐ๋ฅํ๋ค. ์ด ํผ๋๋ฐฑ์ ์ด๋ค ๋ถ๋ถ์ ๋ํ ๋ด์ฉ์ธ์ง ์ดํด๊ฐ ์ ์๊ฐ๋ค.
๋ถ๋งํฌ๊ฐ ์ฌ์ง ์ฐ์ธก ์๋จ์ ํ์๋๋ ๊ฑฐ๋ผ๋ฉด, DTO์ ์กด์ฌํ๋ ๊ฐ์ ์ํด ํ์๋๋ ๊ฒ์ด์ง VM์์ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๊ธฐ ์ํด ์ํ๋๋ ๋ณ๋์ ๋ก์ง์ ์๋ค.
์๋๋ฉด ์ด๊ฒ๋ Screen State๋ก ์ฒ๋ฆฌํ๋๊ฒ ํจ์จ์ ์ผ ์ ์๋ค๋ ๊ฒ์ผ๊น? ๊ทธ๋ผ ์คํ๋ ค ๋ถํ์ํ state๊ฐ ๋ ๋์ด๋์ง ์์๊น๋ผ๋ ์๊ฐ์ด ๋ ๋ค. ์ด ๋ถ๋ถ์ MVI ์ํคํ
์ณ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ฒ์ฏค ๊ณ ๋ คํด ๋ณผ๋งํ ์์์ด๊ธด ํ๋ค. ์ข๋ ์๊ฐํด ๋ณด๊ฒ ๋ค.
F 2) PhotoSearchRepo ์ ์ค๊ณ๊ฐ Photo search ๋ฟ ์๋๋ผ bookmark ์ฒ๋ฆฌ ๋ฑ ๋ง์ ์ญํ ์ ๋ด๋นํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ํ์ํ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์กฐ๊ธ๋ ์ธ๋ถํ ํ๋ ๊ฒ๋ ๊ณ ๋ คํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
A: ์ด๊ฒ๋ ๋๋ ์๋ ์์ง๋ง, ์ฃผ์ ๊ธฐ๋ฅ์ด 2๊ฐ๋ฟ์ธ ๋จ์ํ ์ฑ์์ ๋๋๋ ๊ฒ์ ํ์ผ ์๋ง ์ฆ๊ฐ์ํฌ ๋ฟ์ด๋ผ๋ ์๊ฐ์ ๋๋์ง ์์๋ค. ๋ฌผ๋ก ํ์ฅ์ฑ์ ๊ณ ๋ คํ๋ฉด ๋๋๋ ๊ฒ์ด ๋ง๋ค.
F 3) ๋ชจ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ํตํฉํ์ฌ ์ฌ์ฉํ๊ณ ์์ด, API ๋ฐ DB ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ๊ฐ์ ๊ณผ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ/์ญ์ ํ๋๋ถ๋ถ๋ ๊ณ ๋ฏผํด๋ณผ ํฌ์ธํธ ๊ฐ๋ค.
A: ๊ฒฐ๊ตญ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ id, Author, width, height, url, bookmark ์ฌ๋ถ๋ก 6๊ฐ ๋ฟ์ด๋ค. ์ฑ์์ ๋ฐ๋์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ์ด๋ ๋ถ๋ถ์์ ๊ณผ๋ํ๊ฒ ๋๊ปด์ง๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
F 4) DI ๋ฅผ Object ์์ ๊ตฌํํ๋ฉด DI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์๋ฏธ๊ฐ ๋ง์ด ์์ด๋ณด์ธ๋ค.
A: ์ด ํผ๋๋ฐฑ์ Hilt/Dagger์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํ๋ค๊ณ ์๊ฐ๋๋ค.
๊ณต์๋ฌธ์ ์์ ํ์ธ ๊ฐ๋ฅํ ๊ตฌ๊ธ์ด ๊ถ์ฅํ๋ ๋ฐฉ์
๊ฐ์ด ๋ณด๋ฉด ์ข์ CodeLabs์ ์ค์ต ์์: https://developer.android.com/codelabs/android-hilt?hl=ko#6
A: Screen 3๊ฐ์๋ ํ๋ก์ ํธ์์ ๋ถํ์ํ๊ฒ UI๋ฅผ ๊ตฌ๋ถ์ง๋ ๊ฒ์ ์คํ๋ ค ๋ถํ์ํ๊ฒ ์๊ฐํ๋ค. ๋์ฌ ์ ์๋ ํผ๋๋ฐฑ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ์ด๊ฑด ๊ฐ์ธ์ ์คํ์ผ ์ฐจ์ด๋ผ๊ณ ์๊ฐ๋๋ค.