๋ชฉ์ฐจ
ํ๋ก์ ํธ ์ค Repository Pattern์ ๋ํด์ ์ ์ฉํ๊ฒ ๋์๋ค.
์ด์ ํ๋ก์ ํธ์์๋ ์ Repository์ ๊ตฌํ์ฒด์ธํฐํ์ด์ค , DataSource์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก ๋๋์ด์ ์ด 4๊ฐ์ ํ์ผ์์ ์์ ํด์ผํ ์ง ๋ช ํํ ์ดํดํ์ง ๋ชปํ๋ค. ๊ทธ๋ฅ ํ๋ฒ์ ํ ํด๋์ค์์ ์์ฑํ๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒ์ธ๊ฑฐ์ง? ํ๋ ์๊ฐ์ ๊ฐ์ง๊ณ ์์๋ค..
๋๋ ์ ์ ํ๋์ฉ ์ ๋ฆฌํด๋ณด๋ฉด Repostiory pattern์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ด๋ค ์ ์ด ๋ถํธํ์ง ์ง์ ๋๋ ์ ์๊ฒ ๋ค๊ณ ์๊ฐํ๊ณ
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ Repository Pattern์ ์ฌ์ฉํด์ผํ๋ ์ด์ ๋ฅผ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
์ฐ์ ์ง๊ธ๊น์ง Repository Pattern์ ์ฌ์ฉํ๋ฉด ํธํ๋ ์ ๊ณผ ๋ถํธํ๋ ์ ์ ๊ณต์ ํด๋ณด๋ฉด
๋ ํฌ์งํ ๋ฆฌ ํจํด์ ๋ํ ๊ฐ์ : ํธ๋ฆฌํ ์ ๊ณผ ๋ถํธํ ์
ํธ๋ฆฌํ ์
- 1. api ๊ด๋ จ ๋ณ๊ฒฝ์ฌํญ์ด ์์ผ๋ฉด data ๋๋ ํ ๋ฆฌ์์ repostiory์ datasource ๋ถ๋ถ์๋ง ๊ด์ฌ์ ๋๊ณ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ฐ์ํด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ณต์กํจ์ด ์์๋ค.
- 2. ํนํ ์ด์ ํ๋ก์ ํธ๋ ์ฝ๋ ๊ท๋ชจ๊ฐ ํฐ ํธ์ด๋ผ์ ํ ํ๋ฉด์์ ์๋ฒ์ ์ผ์ด๋๋ ์ํธ์์ฉ๋ ๋ค์ ์กด์ฌํ๋ค.
๋ง์ฝ repostiroy pattern์ ์ฌ์ฉํ์ง ์๊ณ Fragment๋ ๋ทฐ๋ชจ๋ธ์์ ๋ชจ๋ ๊ฒ์ ๊ด๋ฆฌํ๋ค๋ฉด ์ฝ๋ ๋ณต์ก๋๊ฐ ์์ฒญ๋ฌ์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ค ๐๐๐
- 3. repository pattern ๊ด๋ จ์ ์๋์ง๋ง UI๋ ์ด์ด์ ์ฝ๋๊ฐ ์ง์ค๋์์ ๋๋
ํํ์ํ ๋ก์ง์ ์์ฑํด์ผํ ์ํฉ์ ๊ตฌํํด์ผํ ๊ธฐ๋ฅ๋ ์๊ฐํ๊ณ ์ด๋์ ์ฝ๋๋ฅผ ์์ฑํ๋์ง ์ฐพ์์ผํด์ ์ ๋ง ํ๋ค์๋ค.
ํ ๋ทฐ๋ชจ๋ธ์์ ๋ณด์ฌ์ฃผ๋ ์ ๋ณด๊ฐ ๋ง์ ๊ฒฝ์ฐ + ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ ๋ด์ฉ์ด ๋ง์ ๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ง ์๊ณ ์์ ํ ์ ์ด๋จ์ง ์์ํด๋ณด์....
๋ค์ ๋์์์ ๋ ํฌ์งํ ๋ฆฌ ํจํด ์ฌ์ฉ์ผ๋ก ์ธํด ๋ฐ์ดํฐ ์ก์ธ์ค ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ๊ฒ์์ ๊ฐ์ฅ ๋จผ์ ์๋ฟ์ ์ด์ ์
1. ์ฝ๋์ ๊ฐ๋ ์ฑ
2. ๊ด๋ จ ๋ก์ง์ ์ฐพ๋ ๋ฐ๊น์ง ๋๋ ์๋์ง๋ฅผ ๊ฑฐ์ 0์ ์ํ๋ก ๋ง๋ค๊ธฐ
3. ์ฝ๋ ๋ณ๊ฒฝ ์ ๊ทธ ๋ถ๋ถ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
4. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก A์ B ํ๋ฉด์์ ์ข์์๋ฅผ ๋ฑ๋กํ๋ ๋ก์ง์ด ํ์ํ๋ค๋ฉด ์ด๋ฅผ ์ค๋ณต์ผ๋ก ์์ฑํ ํ์ ์์ด ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ณต์ ํ ์ ์๋ค๋ ์ ์ด์๋ค.
์ด์ ๋ณด๋ ์ด ์ ๋ค๋ง์ผ๋ก๋ ๊ฐ๋ฐ ์ค์ ์ด๋ ค์์ ๋ํญ ์ค์ฌ์ฃผ์๋ค๊ณ ์๊ฐํ๋ค..โญ๏ธโญ๏ธ
๋ถํธํ๋ ์
- ํ api๊ฐ ์ถ๊ฐ๋๋ฉด 4๊ฐ์ ํ์ผ์ ์ ๋ฐ์ดํธํด์ค์ผํ๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋ก์ ๋ค.
์๋ฌด๋๋ repostiroy์ datasource๋ ๊ฑฐ์ ๋น์ทํ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ด์ ์ค๋ณต์ผ๋ก ์์ฑํด์ฃผ๋๊ฒ ์กฐ๊ธ ๋ฒ๊ฑฐ๋ก์ ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฌ๋ !!
๋ช
ํํ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ์ง๊ณ ๋ ํฌ์งํ ๋ฆฌ ํจํด์ ์ ์ฉํ๋ ์ฌ๊ณ ๋ฅผ ๊ธฐ๋ฅด๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ด์ฉ์ ํ์
ํด๋ณด๋๋ก ํ์!!
๋ฐ์ดํฐ ๋ ์ด์ด ๋ถ๋ฆฌํด์ผํ๋ ์ด์
์ด์ ๋ฐ์ดํฐ ๋ ์ด์ด ์์ผ๋ก ํ๊ณ ๋ค์ด์ Repository์ Datasource, ๊ฐ๊ฐ์ ์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก ๊ตฌ๋ถํ๋์ง๋ ์์๋ณด์๋ค.
์ฐ์ ์ ์ฅ์์ ๋ฐ์ดํฐ ์์ค๋ก ๋๋๋ ์ด์ ๋ ๋ค๋ฅธ ๋ ์ด์ด์์ ๋ฐ์ดํฐ ์์ค์ ์ง์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํ๊ธฐ ์ํจ์ด๋ค
์ด๋ฅผ ์บก์ํ๋ผ๊ณ ํ๋ค. ๊ฐ ๊ณ์ธต์ ๋ค๋ฅธ ๊ณ์ธต์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์์ง ๋ชปํ ์ฑ๋ก ๋์ ์ฑ ์์ ์ง์คํ๋ ๊ฒ์ ๋งํ๋ค.
๋ง์ฝ ํ๋๊ทธ๋จผํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๋๊ฐ ํฌํจ๋์ด์์ผ๋ฉด ์ด๋ป๊ฒ ๋๋์ง ์ฝ๋๋ก ์ดํดํด๋ณด์
// UI์์ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ๋ ๊ฒฝ์ฐ
val userDao = db.userDao()
val users = userDao.getAllUsers() // SELECT id, name, email FROM users
binding.txtUserEmail.text = users.email
// ์์ ํ์
binding.txtUserEmail.text = users.userEmail
๋ง์ฝ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ email ์ด๋ฆ์ด user_email์ผ๋ก ๋ณ๊ฒฝ๋๋ค๋ฉด ??
users.email์ ์ฌ์ฉํ๋ ๋ชจ๋ UI ๊ด๋ จ ๋ก์ง๋ ๋ณ๊ฒฝํด์ฃผ์ด์ผํ๋ค ใ ใ
๊ทธ๋ฌ๋ ๋ง์ฝ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ก์ง์ UI ๋ ์ด์ด์์ ๋ถ๋ฆฌํ๋ค๋ฉด??
class DefaultUserRepository @Inject constructor(
private val userDao : UserDao) {
fun getAllUsers() : List<User> {
return userDao.getAllUsers()
}
}
// UI
val users = userRepository.getAllUsers()
for (user in users) {
binding.txtUserEmail.text = user.email
// ๋ณ๊ฒฝ ์์ด ๊ทธ๋๋ก ์ฌ์ฉํด๋ ๋๋ค
}
๋ง์ฝ ๋ฐ์ดํฐ ๋ชจ๋ธ์์ ๋ณ๊ฒฝ๋ ์ด ์ด๋ฆ์ ๋ฐ์ํด์ค๋ค๋ฉด UI์์๋ ๋ฐ์ดํฐ ๋ ์ด์์ ๋ณ๊ฒฝ์ฌํญ์ ์ํฅ์์ด ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
์ฆ ๋ฐ์ดํฐ ๋ ์ด์ด์ ๋ฐ์ ํ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๋ฐ์ดํฐ ๋ ์ด์ด ์์ ๋ณ๊ฒฝ์ด UI ๋ ์ด์ด ์์ ๋ณ๊ฒฝ๊น์ง ํ์๋ก ํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ ์ค์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ์ ์๋ค. ์ผ์ผ์ด ๋ค ์์ ํด์ค์ผํด์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ง์คํ์ง ๋ชปํ ๊ฒ์ด๋ค..๐
์ด๋ ๊ฒ UI ์์์ ๋ฐ์ดํฐ ๋ ์ด์ด ๊ด๋ จ ๋ก์ง์ ๋ถ๋ฆฌํด์ผํ๋ ์ด์ ๋ฅผ ๊ฐ๋จํ ์ฝ๋๋ก ์ดํดํด๋ณด์๋ค.
์ค์ ๋ก ํ๋ก์ ํธ ํ๋ฉด์ ์ฌ๋ฌ ๋ฒ ๊ฒช์๋ ์ํฉ์ด๋ผ์ ๊ฐ๋จํ ์ฝ๋๋ฅผ ํตํด ์์ํด๋ณด๋ฉฐ ๊ทธ๋๊ฐ ๋ ์ฌ๋ผ ๋์ฑ ์ ์๋ฟ์๋ค.. ใ ใ
์ฆ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ค๋ฅธ ๋ ์ด์ด๋ ๋ฐ์ดํฐ ์์ค์ ์ง์ ์ ๊ทผํด์๋ ์๋๊ณ ํญ์ ๋ฆฌํฌ์งํ ๋ฆฌ ํด๋์ค๋ฅผ ํตํด์ ์ง์ ํด์ผํ๋ค!!
Repository : ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด
์ด์ ๋ ์ ๊ตฌํ์ฒด์ ์ธํฐํ์ด์ค๋ก ๋๋ ์ ์์ฑํด์ค์ผํ๋์ง ์์๋ณด์.
์์์ ๋ฐ์ดํฐ ์์ค๋ ๋ค๋ฅธ ๋ ์ด์ด์์ ์ ๊ทผํ์ง ์๋๋ก ํด์ผํ๋ค๊ณ ํ๋ค.
์ด๋ฅผ ์ํด repository์ datasource๋ก ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ repository๋ฅผ interface์ ๊ตฌํ์ฒด๋ก ๋๋์ง ์๊ณ ๋ฐ๋ก ์ฌ์ฉํ๋ค๋ฉด ๋ทฐ๋ชจ๋ธ์์๋ ๊ฒฐ๊ตญ repository์ ์๋ ๋ฐ์ดํฐ ์์ค์ ๋ํ ์์กด์ฑ์ ๊ฐ์ง๊ฒ ๋๋ค. repository๋ฅผ ํตํด api ํธ์ถ์ ํ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ๋ฐ์ดํฐ ์์ค ๊ฐ์ฒด๋ ํ์ํด์ง๋ค..!!!
๊ทธ๋ผ ์ง๊ธ๊น์ง ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ด์ ธ๋ฒ๋ฆด ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ๋ทฐ๋ชจ๋ธ์ด ๊ฐ์ง๊ณ ์์ ๊ฐ์ฒด์ธ repository๋ ์ธํฐํ์ด์ค๋ก ๊ตฌํํ์ฌ ๋ฐ์ดํฐ ์์ค์ ๋ํ ์์กด์ฑ์ ๊ฐ์ง์ง ์๋๋ก ์ถ์ํํด์ฃผ๊ณ , ๊ตฌํ์ฒด์ ๋ฐ์ดํฐ ์์ค์ ํจ๊ป ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋๋ก ํ๋ค.
interface WordRepository {
suspend fun getFiveBasicWords(): Flow<List<BasicWord>>
suspend fun updateStatus(word: String)
}
class DefaultWordRepository
@Inject
constructor(
private val dataSource: WordDataSource,
) : WordRepository {
override suspend fun getFiveBasicWords(): Flow<List<BasicWord>> = dataSource.getFiveBasicWords()
override suspend fun updateStatus(word: String) = dataSource.markWordAsLearned(word)
}
Datasource : ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด
๊ทธ๋ผ ๋ทฐ๋ชจ๋ธ์ ๋ ํฌ์งํ ๋ฆฌ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์์ค์ ๋ํ ์์กด์ฑ์ ๊ฐ์ง๋ ๊ฒ์ ๋ง๊ธฐ ์ํด์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ถ์ํํด์ผํ๋ค๋ ๊ฒ์ ์ดํด๊ฐ ๋์์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด datasource๋ ์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก ๋๋ ์ค์ผํ ๊น?
์ด์ฐจํผ datasource์ ๋ํ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ repository๋ฟ์ผํ ๋ฐ....??!!!
Repository๋ Datasource์ ์ํธ์์ฉํ๋ค. ๋ฐ์ดํฐ์ ์ถ์ฒ(๋ก์ปฌ์ธ์ง ์๊ฒฉ ์๋ฒ์ธ์ง)๋ ์ค์ํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ถ๊ฐ, ์ ๋ฐ์ดํธ๋ง ํ ์ ์๋ค. ์ค์ ๋ฐ์ดํฐ ์ก์ธ์ค ๋ก์ง๋ ์ธํฐํ์ด์ค ๋ค์ ์จ๊ฒจ์ ธ์๋คใ .
์์๋ณธ ๊ฒฐ๊ณผ ํ ์คํธ ์ Datasource ์ธํฐํ์ด์ค๋ฅผ ๋ชจ์ํ ์์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ api ํธ์ถ ์์ด ์ ์ฅ์ ๋ก์ง์ ํ ์คํธํ ์์๋ค๊ณ ํ๋ค.
๋ํ ๋ ํฌ์งํ ๋ฆฌ๋ ๋ทฐ๋ชจ๋ธ์ ๋ํ ์์ ์์ด Datasource์ ๊ตฌํ์ฒด๋ฅผ ์์ ํ๋ ๊ฒ๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ก์ง์ ๋ณ๊ฒฝํ ์ ์๋ค.
์๋ฅผ ๋ค์ด SQLite์์ Room์ผ๋ก ๋ก์ง์ ์์ ํ๋ ๋ฑ์ ์์ ์ ์์ ํ ๋๋ฅผ Datasource์ ๊ตฌํ์ฒด๋ง ์์ ํด์ฃผ๋ฉด ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ ์์ ๊ฒ์ด๋ค.
๋ง๋ฌด๋ฆฌ์ด
์ค๋์ ๋ ํฌ์งํ ๋ฆฌ ํจํด์ ์ ์ฌ์ฉํ๋์ง, ์. ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก ๋๋์ด์ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋์ง ์์๋ณด์๋ค. ๊ทธ๋์์ ๋ช ํํ ๊ทผ๊ฑฐ๋ณด๋ค๋ ๋๋ฃ ๊ฐ๋ฐ์๋ถ์ด ์ด๋ ๊ฒ ์ฌ์ฉํ๊ณ ๊ณ์ ์, ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ด๋ผ๋ ์ด์ ๋ง์ผ๋ก ํ ์ ์ด ๋ง์๋๋ฐ ์ค์ ๋ก ์ ๋ฆฌํด๋ณด๋ ์์ผ๋ก๋ ๋ช ํํ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์์ง ๋ฐ์ดํฐ ์์ค์ ํ ์คํธ์ ๊ดํ ๊ฒฝํ์ด ์์ด ํ ์๋ฟ์ง๋ ์์์ง๋ง ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด ํ ์คํธ ์ฝ๋๋ ์์ฑํด๋ด์ผ๊ฒ ๋ค
'๐ค2024 ์๋๋ก์ด๋ > ๐ฟ ์ํ ํ๋ก์ ํธ ๊ฐ๋ฐ ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MVC , MVP, MVVM ๋๋์ด ์ดํดํ๋ค (0) | 2024.12.20 |
---|---|
[์๋ฒ ํธ์ถ ์ฑ๊ณต ์คํจ ์ฒ๋ฆฌ ] ๋ชจ์กฐ๋ฆฌ ์์ ํ๊ธฐ !!!! (0) | 2024.11.29 |
โบ๏ธAndroid : flow๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฌ์ฉํด๋ณด์~! (2) | 2024.11.04 |
ํ๋ก์ ํธ์ Jetpack Navigation ์ ์ฉํ๊ธฐ (8) | 2024.10.15 |
๋ฌดํ์คํฌ๋กค์ Paging3 ์ ์ฉํ๊ธฐ (9) | 2024.10.13 |