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

์ฝ”๋“œ ์งˆ๋ฌธ & ๋‹ต๋ณ€ ์ •๋ฆฌ

by hyeonha 2024. 6. 24.

๋ชฉ์ฐจ

    ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

    ๋•Œ๋Š” 6์›” 22์ผ ์ฃผ๋ง ์ €๋…์— 

    ํ•จ๊ป˜ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ถ„๊ณผ ๋ฏธํŠธ๋กœ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ๋‚˜๋ˆ„๋Š” ์†Œ์ค‘ํ•œ ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. 

    ๋‹ต๋ณ€์œผ๋กœ ๋“ค์—ˆ๋˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋‘๊ณ  ๊ณต๋ถ€ํ•ด๋ณด๋ ค ํ•œ๋‹ค!! 

     

    event์™€ effect์˜ ์ฐจ์ด

    ์ง€๋‚œ ๋ฒˆ pr์„ ํ†ตํ•ด ์งˆ๋ฌธ์„ ๋“œ๋ฆฐ ์ ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์™„์ „ํžˆ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์งˆ๋ฌธ์„ ๋“œ๋ ธ๋‹ค.

    ๋‹ต๋ณ€์€ ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค.

     

    event๋Š” ์‚ฌ์šฉ์ž ์š”์ฒญ, ์‚ฌ์šฉ์ž ํ–‰์œ„์™€ ๊ด€๋ จ๋œ ๊ฒƒ

    effect๋Š” ์ด๋ฒคํŠธ ๋Œ€์ƒ์œผ๋กœ ๋ฐœ์ƒ๋œ ๊ฒƒ์œผ๋กœ, ์ด๋ฒคํŠธ์˜ ๊ฒฐ๊ณผ๋กœ์„œ ui์˜ ์ƒํƒœ ๋ณ€ํ™” ๋“ฑ์ด ํฌํ•จ๋œ๋‹ค.

     

    ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด click event -> click listener -> effect (์ด๋ฒคํŠธ ๊ฒฐ๊ณผ)

    ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋ฉด -> handle event -> ui ์ƒํƒœ ๋ณ€ํ™˜

     

    side effect !! 

    ๋‚ด๊ฐ€ ์˜ˆ์ƒํ–ˆ๋˜/์›ํ–ˆ๋˜ ๊ฒฐ๊ณผ์™€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํ™ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

     

    ํ•ญ์ƒ effect๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ์—†์„ ๋•Œ๋„ ์žˆ๋‹ค.

    effect o -> ์•กํ‹ฐ๋น„ํ‹ฐ(ui)์—์„œ ํ•ด์•ผํ•  ์ผ์ด ์žˆ์„ ๋•Œ (๋ทฐ๋ชจ๋ธ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์„ ๋•Œ) effect๋ฅผ ๋ณด๋‚ธ๋‹ค.

    effect x -> ๊ทธ๋ƒฅ ๋ฐฐ๊ฒฝ์ƒ‰์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ


    Result ์ฒ˜๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข‹์„๊นŒ์š”?

    result๋ฅผ ์„ฑ๊ณต/์‹คํŒจ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ์žˆ๊ธด ํ•œ๋ฐ ์–ด๋–ค ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ• ์ง€ ๊ธฐ์ค€์ด ์—†์–ด์„œ ์–ด๋ ค์› ๋‹ค ใ… ..ใ… 

     

    ๋‹ต๋ณ€ ๋‚ด์šฉ !! 

    ๋ทฐ๋ชจ๋ธ์—์„œ๋Š” result๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ํ•˜์…จ๋‹ค.

    result์˜ ์ฒ˜๋ฆฌ๋Š” usecase๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋„๋ก ํ•œ๋‹ค.

    ์ด ๋•Œ flow๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. flow๋กœ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

     

    ๋˜ํ•œ getOrNulls( ) ๊ฒฐ๊ณผ ์‹œ ์‹คํŒจํ–ˆ์œผ๋ฉด ์–ด์ฐจํ”ผ null ๊ฐ’์ด ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด๋ฌธ์œผ๋กœ null์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ™•์ธํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

     

    Flow๋กœ ๊ผญ ๊ตฌ์„ฑํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋ถ„๊ป˜์„œ๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ + ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์ž๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•ดใ…œ๋”˜๋‹ค๊ณ  ํ•˜์…จ๋‹ค.

     

    ๊ฐœ๋ฐœ์ž๋‹˜์€ ์–ธ์ œ Flow๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ ์ถ”๊ฐ€ ์งˆ๋ฌธ์„ ๋“œ๋ ธ์„ ๋•Œ ๋‹ค ์จ์ฃผ์‹ ๋‹ค๊ณ  ํ•˜์…จ๋‹ค !! 


    ใ€ฐ๏ธflow 

    flow๋Š” ์™œ ์‚ฌ์šฉํ• ๊นŒ? ๋ผ๋Š” ์งˆ๋ฌธ์— 

    ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ์ผ๊นŒ์š” ... ? ๋ผ๊ณ ๋ฐ–์— ๋Œ€๋‹ต์„ ๋ชปํ–ˆ๋‹ค ๐Ÿฅน 

    ํ‰์†Œ flow์— ๋Œ€ํ•ด ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ–ˆ๋‹ค. ์ด ๊ธฐํšŒ์— ์ œ๋Œ€๋กœ ๊ณต๋ถ€๋ฅผ ํ•ด๋ด์•ผ๊ฒ ๋‹ค ! 

     

    ๊ฐœ๋ฐœ์ž๋‹˜์€ ์ด๋Ÿฐ ์งˆ๋ฌธ์„ ๋˜์ ธ์ฃผ์…จ๋‹ค.

    return์€ 1๋ฒˆ๋งŒ ๋˜๋Š”๋ฐ ๋งŒ์•ฝ return์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

     

    ๊ทธ๋Ÿด ๋•Œ flow๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋Š” ๊ฑด๊ฐ€์š” .!!!?? 

     

    ๋„ค Flow๋ฅผ ์‚ฌ์šฉํ•ด์„œ emit์„ 2๋ฒˆํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. 

    ์šฐ๋ฆฌ๋Š” flow๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•œ๋‹ค. data streaming programming์ด ๋ชฉ์ ์ด๋‹ค.

     

    flow ๊ณต๋ถ€๋ฅผ ์œ„ํ•œ ๋งํฌ 

     

    https://developer.android.com/kotlin/flow?hl=ko

     

    Android์—์„œ์˜ Kotlin ํ๋ฆ„  |  Android Developers

    ์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Android์—์„œ์˜ Kotlin ํ๋ฆ„ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ์ฝ”๋ฃจํ‹ด์—์„œ ํ๋ฆ„์€ ๋‹จ์ผ ๊ฐ’๋งŒ

    developer.android.com

    https://developer.android.com/codelabs/advanced-kotlin-coroutines?hl=ko#0

     

    Kotlin Flow ๋ฐ LiveData๋ฅผ ์‚ฌ์šฉํ•œ ๊ณ ๊ธ‰ ์ฝ”๋ฃจํ‹ด ์•Œ์•„๋ณด๊ธฐ  |  Android Developers

    ์ด Codelab์—์„œ๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ์™€ Room ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ”๋ฃจํ‹ด ๊ธฐ๋ฐ˜ Android ์•ฑ์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

    developer.android.com

    https://medium.com/hongbeomi-dev/%EC%A0%95%EB%A6%AC-%EC%BD%94%ED%8B%80%EB%A6%B0-flow-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-android-dev-summit-2021-3606429f3c5f

     

    [์ •๋ฆฌ]โ€Š—โ€Š์ฝ”ํ‹€๋ฆฐ Flow ์‚ฌ์šฉํ•˜๊ธฐ (Android Dev Summit 2021)

    Android Dev Summit 2021

    medium.com

     


    ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ(๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ + ์ข‹์•„์š” + ๋ถ๋งˆํฌ)๋ฅผ ํ˜ผํ•ฉํ•ด์„œ ํ•˜๋‚˜์˜ ์•„์ดํ…œ์œผ๋กœ ๋ณด์—ฌ์ค˜์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋‹ค.

    ์ด ๋•Œ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•  ์ง€ ์–ด๋ ค์› ๋‹ค ใ… ใ… 

     

    ์ด๋ถ€๋ถ„์— ๋Œ€ํ•ด ์งˆ๋ฌธ์„ ๋“œ๋ ธ๋‹ค.

    ์ด๋ฅผ ํ†ตํ•ด flow +combine & map( ) ์„ ํ†ตํ•ด ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

    ํ™”์ดํ‹ฐํ‹ฐ์ด์ด์ž‰

     

    ์ด์ œ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์„ ์•Œ์•˜์œผ๋‹ˆ ๊ณต๋ถ€ํ•˜๊ณ  ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•ด๋ณด์ž !! 

    728x90