๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ ๊ธฐ๋ก/๊ธฐ์ˆ™์‚ฌ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ก

Compose์—์„œ ๊ตฌ์„ฑ๋ณ€๊ฒฝ ์‹œ ์ €์žฅ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

by hyeonha 2024. 1. 21.

๋ฌธ์ œ ์•Œ์•„๋ณด๊ธฐ

๋ฌธ์ œ

์ง€๋‚œ ๋ฒˆ์— ๋‚จ์€ ๊ธˆ์•ก์ด ์ €์žฅ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

์›์ธ

var chargedMoney by mutableIntStateOf(0) private set  

mutableStateOf๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ์‹์ด์ง€๋งŒ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‹œ์—๋Š” ์ดˆ๊ธฐํ™”๊ฐ€ ๋œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด์ „์— ์ €์žฅํ•œ ๋‚จ์€ ๊ฐ’์ด ์†์‹ค๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด์—ˆ๋‹ค.

 

ํ•ด๊ฒฐ

ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” mutableStateOf ๋Œ€์‹  DataStore ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฝ๊ณ  ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‹œ์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฒฐ๊ณผ

 

 

์ฝ”๋“œ๋กœ ์•Œ์•„๋ณด๊ธฐ

์ด์ „์ฝ”๋“œ

   private suspend fun saveChargedMoney(value:Int) {
        dataStore.edit { preferences ->
            preferences[PreferencesKeys.CHARGED_MONEY] = value  }

    }

    var chargedMoney by  mutableIntStateOf(0)
        private set

    fun updateChargedMoney(input: Int) {
        viewModelScope.launch {
            chargedMoney += input
            saveChargedMoney(chargedMoney)
        }
    }

 

์ˆ˜์ •๋œ ์ฝ”๋“œ

 fun updateChargedMoney(input: Int) {
        viewModelScope.launch {
            dataStore.edit { preferences ->
                val currentChargedMoney = preferences[PreferencesKeys.CHARGED_MONEY] ?: 0
                val newChargedMoney = currentChargedMoney + input
                preferences[PreferencesKeys.CHARGED_MONEY] = newChargedMoney
            }
        }
    }

 

๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„ : chargedMoney ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹

 

์›๋ž˜ ์ฝ”๋“œ

 mutableIntStateOf๋ฅผ ํ†ตํ•ด chargedMoney๋ฅผ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด์—ˆ๋‹ค. mutableState๋Š” ui ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์•ฑ์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ƒํƒœ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๊ณ  ์žฌ์„ค์ •๋œ๋‹ค.

์ด๋กœ ์ธํ•ด ๋‚จ์€ ๊ธˆ์•ก์ด ๋‹ค์‹œ ์ดˆ๊ธฐํ™”๋œ ํ›„ ์ฑ„์›Œ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด์—ˆ๋‹ค. 

 

์ˆ˜์ •๋œ ์ฝ”๋“œ 

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” mutableState์ธ chargedMoney๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  DataStore์—์„œ ๊ฐ’์„ ์ฝ์–ด์™€ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋‚จ์€ ๊ธˆ์•ก์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๊ณ  ์ฑ„์›Œ์ง„ ๊ธˆ์•ก์ธ input์„  ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

dataStore.edit ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋žœ์žญ์…˜ ๋ฐฉ์‹์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

1๏ธโƒฃ ํ˜„์žฌ dataStore์— ์ €์žฅ๋œ ๋‚จ์€ ๊ธˆ์•ก ๊ฐ’์„ ๊ฐ€์ ธ์™€ currentCHargedMoney ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.

2๏ธโƒฃ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ ์ฑ„์šด ๊ธˆ์•ก ๊ฐ’์ธ input์„ ๋”ํ•œ ํ›„ newChargedMoney ๋ณ€์ˆ˜์— ๋„ฃ์–ด์ค€๋‹ค. 

3๏ธโƒฃ dataStore์— newChargedMoney๊ฐ’์„ ์ €์žฅํ•ด์ค€๋‹ค.

 

 

728x90