๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค2024 ์•ˆ๋“œ๋กœ์ด๋“œ/๐Ÿฟ ์˜ํ™” ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์ผ์ง€

๐Ÿ‘€ [Android Repository Pattern]์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์•Œ์•„๋ณด๊ธฐ!

by hyeonha 2024. 11. 18.

๋ชฉ์ฐจ

    ํ”„๋กœ์ ํŠธ ์ค‘ Repository Pattern์— ๋Œ€ํ•ด์„œ ์ ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

    ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์™œ Repository์˜ ๊ตฌํ˜„์ฒด์ธํ„ฐํŽ˜์ด์Šค , DataSource์˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ด 4๊ฐœ์˜ ํŒŒ์ผ์—์„œ ์ž‘์—…ํ•ด์•ผํ• ์ง€ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ƒฅ ํ•œ๋ฒˆ์— ํ•œ ํด๋ž˜์Šค์—์„œ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์ธ๊ฑฐ์ง€? ํ•˜๋Š”  ์ƒ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค..

     

    ๋Š๋‚€ ์ ์„ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•ด๋ณด๋ฉด Repostiory pattern์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ์ ์ด ๋ถˆํŽธํ•œ์ง€ ์ง์ ‘ ๋Š๋‚„ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ  

    ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ Repository Pattern์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

     

    ์šฐ์„  ์ง€๊ธˆ๊นŒ์ง€ Repository Pattern์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽธํ–ˆ๋˜ ์ ๊ณผ ๋ถˆํŽธํ–ˆ๋˜ ์ ์„ ๊ณต์œ ํ•ด๋ณด๋ฉด

    ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํŒจํ„ด์— ๋Œ€ํ•œ ๊ฐ์ƒ : ํŽธ๋ฆฌํ•œ ์ ๊ณผ ๋ถˆํŽธํ•œ ์  

    ํŽธ๋ฆฌํ•œ ์ 

    - 1. api ๊ด€๋ จ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด data ๋””๋ ‰ํ† ๋ฆฌ์—์„œ repostiory์™€ datasource ๋ถ€๋ถ„์—๋งŒ ๊ด€์‹ฌ์„ ๋‘๊ณ  ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•ด์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•จ์ด ์—†์—ˆ๋‹ค. 

    - 2. ํŠนํžˆ ์ด์ „ ํ”„๋กœ์ ํŠธ๋Š” ์ฝ”๋“œ ๊ทœ๋ชจ๊ฐ€ ํฐ ํŽธ์ด๋ผ์„œ ํ•œ ํ™”๋ฉด์—์„œ ์„œ๋ฒ„์™€ ์ผ์–ด๋‚˜๋Š” ์ƒํ˜ธ์ž‘์šฉ๋„ ๋‹ค์ˆ˜ ์กด์žฌํ–ˆ๋‹ค.

    ๋งŒ์•ฝ repostiroy pattern์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Fragment๋‚˜ ๋ทฐ๋ชจ๋ธ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๊ด€๋ฆฌํ–ˆ๋‹ค๋ฉด ์ฝ”๋“œ ๋ณต์žก๋„๊ฐ€ ์—„์ฒญ๋‚ฌ์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค ๐Ÿ˜‡๐Ÿ˜‡๐Ÿ˜‡

     

    - 3. repository pattern ๊ด€๋ จ์€ ์•„๋‹ˆ์ง€๋งŒ UI๋ ˆ์ด์–ด์— ์ฝ”๋“œ๊ฐ€ ์ง‘์ค‘๋˜์—ˆ์„ ๋•Œ๋Š” 
    ํ”„ํ•„์š”ํ•œ ๋กœ์ง์„ ์ž‘์„ฑํ•ด์•ผํ•  ์ƒํ™ฉ์— ๊ตฌํ˜„ํ•ด์•ผํ•  ๊ธฐ๋Šฅ๋„ ์ƒ๊ฐํ•˜๊ณ  ์–ด๋””์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”์ง€ ์ฐพ์•„์•ผํ•ด์„œ ์ •๋ง ํž˜๋“ค์—ˆ๋‹ค. 

    repository์™€ source ํด๋” ๋‚ด ํŒŒ์ผ๋“ค์ด๋‹นใ…Žใ…Ž

    ํ•œ ๋ทฐ๋ชจ๋ธ์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ์ •๋ณด๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ + ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋‚ด์šฉ์ด ๋งŽ์„ ๋•Œ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์ž‘์—…ํ•  ์‹œ ์–ด๋–จ์ง€ ์ƒ์ƒํ•ด๋ณด์ž....

     

    ๋‹ค์‹œ ๋Œ์•„์™€์„œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํŒจํ„ด ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ฒƒ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์™€๋‹ฟ์€ ์ด์ ์€

    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์˜ ๊ตฌํ˜„์ฒด๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•  ์žˆ์„ ๊ฒƒ์ด๋‹ค.


    ๋งˆ๋ฌด๋ฆฌ์ด

     

    ์˜ค๋Š˜์€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํŒจํ„ด์„ ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€, ์™œ. ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋Š”์ง€ ์•Œ์•„๋ณด์•˜๋‹ค. ๊ทธ๋™์•ˆ์€ ๋ช…ํ™•ํ•œ ๊ทผ๊ฑฐ๋ณด๋‹ค๋Š” ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž๋ถ„์ด ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์…”์„œ, ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ์ด์œ ๋งŒ์œผ๋กœ ํ•œ ์ ์ด ๋งŽ์•˜๋Š”๋ฐ ์‹ค์ œ๋กœ ์ •๋ฆฌํ•ด๋ณด๋‹ˆ ์•ž์œผ๋กœ๋Š” ๋ช…ํ™•ํ•œ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

     

    ์•„์ง ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ํ…Œ์ŠคํŠธ์— ๊ด€ํ•œ ๊ฒฝํ—˜์ด ์—†์–ด ํ™• ์™€๋‹ฟ์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ์ž‘์„ฑํ•ด๋ด์•ผ๊ฒ ๋‹ค

     

    728x90