{"id":46040,"date":"2022-04-11T16:55:38","date_gmt":"2022-04-11T07:55:38","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=46040"},"modified":"2022-04-11T16:55:39","modified_gmt":"2022-04-11T07:55:39","slug":"%ec%bd%9c%eb%93%9c-%ec%8a%a4%ed%8a%b8%eb%a6%bc%ec%9d%84-%ed%95%ab-%ec%8a%a4%ed%8a%b8%eb%a6%bc%ec%9c%bc%eb%a1%9c-%eb%b3%80%ea%b2%bd%ed%95%98%ea%b8%b0-sharein-statein","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=46040","title":{"rendered":"\ucf5c\ub4dc \uc2a4\ud2b8\ub9bc\uc744 \ud56b \uc2a4\ud2b8\ub9bc\uc73c\ub85c \ubcc0\uacbd\ud558\uae30 (shareIn, stateIn)"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"328\" height=\"611\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2022\/04\/www.charlezz.com-sharein-statein-sharin.png\" alt=\"\" class=\"wp-image-46041\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2022\/04\/www.charlezz.com-sharein-statein-sharin.png 328w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2022\/04\/www.charlezz.com-sharein-statein-sharin-161x300.png 161w\" sizes=\"(max-width: 328px) 100vw, 328px\" \/><\/figure><\/div>\n\n\n\n<p>MutableSharedFlow\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac12\uc744 \ubc1c\ud589\ud558\uace0 \ub2e4\ub978 \ud55c\ud3b8\uc5d0\uc11c\ub294 \uc774\ub97c \uc218\uc9d1\ud560 \uc218 \uc788\ub294 \uc218\ub2e8\uc744 \uc81c\uacf5\ud55c\ub2e4. \uadf8\ub7ec\ub098 \ub2e4\ub978 \ucf54\ub4dc\uc5d0 \uc788\ub294 \ucf5c\ub4dc \ud50c\ub85c\uc6b0\ub97c \uac00\uc838\uc640\uc11c \uc774 \uc5c5\uc2a4\ud2b8\ub9bc\uc744 \uc218\uc9d1\ud558\uace0 SharedFlow\ub85c \ub0b4\ubcf4\ub0bc \uc218 \uc788\ub294 \ud3b8\ub9ac\ud55c \ubc29\ubc95\ub3c4 \uc788\ub2e4. \ubc14\ub85c ShareIn \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ShareIn \uc5f0\uc0b0\uc790<\/h2>\n\n\n\n<p>shareIn \uc5f0\uc0b0\uc790\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc0dd\uacbc\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun &lt;T> Flow&lt;T>.shareIn(\n    scope: CoroutineScope,\n    started: SharingStarted,\n    replay: Int = 0,\n): SharedFlow&lt;T><\/code><\/pre>\n\n\n\n<p>\uc774 \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud558\uba74, Flow(\ucf5c\ub4dc\uc2a4\ud2b8\ub9bc)\ub97c \uc8fc\uc5b4\uc9c4 \ucf54\ub8e8\ud2f4 \uc2a4\ucf54\ud504(<meta charset=\"utf-8\">scope) \ub0b4\uc5d0\uc11c \uc2dc\uc791\ub418\ub294 SharedFlow(\ud56b\uc2a4\ud2b8\ub9bc)\ub85c \ubcc0\uacbd\ud55c\ub2e4. \ub2e8\uc77c\ub85c \uc2e4\ud589\ub418\ub294 <strong>\uc5c5\uc2a4\ud2b8\ub9bc \ud50c\ub85c\uc6b0\uc5d0\uc11c \ubc1c\ud589\ub418\ub294 \ub370\uc774\ud130\ub97c \uc5ec\ub7ec\uac1c\uc758 \ub2e4\uc6b4\uc2a4\ud2b8\ub9bc \uad6c\ub3c5\uc790\ub4e4\uc774 \uacf5\uc720\ud558\ub294 \ud615\ud0dc<\/strong>\uc774\uace0, \uc8fc\uc5b4\uc9c4 replay \uac12\uc5d0 \ub530\ub77c \uc0c8\ub85c\uc6b4 \uad6c\ub3c5\uc790\ub4e4\uc5d0\uac8c \uac12\uc744 \ub2e4\uc2dc \ubc1c\ud589(replay)\ud558\uac8c \ub41c\ub2e4.\u00a0<\/p>\n\n\n\n<p>\uacf5\uc720\ud558\ub294 \ucf54\ub8e8\ud2f4\uc758 \uc2dc\uc791\uc740 started \ub9e4\uac1c\ubcc0\uc218\uc5d0 \uc758\ud574 \uc81c\uc5b4\ub418\uba70, \ub2e4\uc74c\uacfc \uac19\uc740 \uc635\uc158\uc744 \uc9c0\uc6d0\ud55c\ub2e4.<\/p>\n\n\n\n<ul><li>Eagerly : \uccab\ubc88\uc9f8 \uad6c\ub3c5\uc790\uac00 \uc0dd\uae30\uae30\ub3c4 \uc804\uc5d0 \uc5c5\uc2a4\ud2b8\ub9bc\uc774 \uc2dc\uc791\ub41c\ub2e4. \uc774 \uacbd\uc6b0 replay \ub9e4\uac1c\ubcc0\uc218\uc5d0 \uc9c0\uc815\ub41c \ub300\ub85c \uac00\uc7a5 \ucd5c\uadfc \uac12\uc744 \ucd08\uacfc\ud558\uc5ec \uc5c5\uc2a4\ud2b8\ub9bc\uc5d0\uc11c \ubc29\ucd9c\ub41c \ubaa8\ub4e0 \uac12\uc774 \uc989\uc2dc \uc0ad\uc81c\ub41c\ub2e4.<br><\/li><li>Lazily : \uccab\ubc88\uc9f8 \uad6c\ub3c5\uc790\uac00 \uc0dd\uae34 \ud6c4\uc5d0 \uc5c5\uc2a4\ud2b8\ub9bc \ud50c\ub85c\uc6b0\uac00 \uc2dc\uc791\ub41c\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \uccab\ubc88\uc9f8 \uad6c\ub3c5\uc790\ub294 \ubc1c\ud589\ub418\ub294 \ubaa8\ub4e0 \uac12\uc744 \uc5bb\uc744 \uc218 \uc788\ub2e4\ub294 \uc810\uc744 \ubcf4\uc7a5\ud55c\ub2e4. \uc774\ud6c4\uc758 \uad6c\ub3c5\uc790\ub4e4\uc740 \ub2e8\uc9c0 \ucd5c\uadfc\uc5d0 \ubc1c\ud589 \ub610\ub294 replay\ub418\ub294 \uac12\ub9cc \uc5bb\uac8c \ub41c\ub2e4. \uc5c5\uc2a4\ud2b8\ub9bc \ud50c\ub85c\uc6b0\ub294 \uad6c\ub3c5\uc790\uac00 \uc2ec\uc9c0\uc5b4 \uc0ac\ub77c\uc9c0\ub354\ub77c\ub3c4 \uacc4\uc18d\ud574\uc11c \ud65c\uc131\ud654\ub418\uc9c0\ub9cc, \uad6c\ub3c5\uc790 \uc5c6\uc774 \uac00\uc7a5 \ucd5c\uadfc\uc758 \ub9ac\ud50c\ub808\uc774\ub41c \uac12\ub9cc \uce90\uc2dc\ub41c\ub2e4.<br><\/li><li>WhileSubscribed() : \uccab\ubc88\uc9f8 \uad6c\ub3c5\uc790\uac00 \uc0dd\uae34 \ud6c4\uc5d0 \uc5c5\uc2a4\ud2b8\ub9bc\uc774 \uc2dc\uc791\ub41c\ub2e4. \ub9c8\uc9c0\ub9c9 \uad6c\ub3c5\uc790\uac00 \uc0ac\ub77c\uc9c0\uba74 \uc989\uc2dc \uba48\ucd94\uac8c \ub418\uba70, replay \ub41c \uce90\uc2dc\ub97c \uc601\uc6d0\ud788 \ubcf4\uc874\ud558\uac8c \ub41c\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc740 \ucd94\uac00\uc801\uc778 \ub9e4\uac1c\ubcc0\uc218\ub97c \uc120\ud0dd\uc801\uc73c\ub85c \uc9c0\uc815\ud560 \uc218 \uc788\ub2e4.<br>stopTimeoutMillis : \ub9c8\uc9c0\ub9c9 \uad6c\ub3c5\uc790\uac00 \uc0ac\ub77c\uc9c0\ub294 \uc2dc\uc810\uacfc \uacf5\uc720 \ucf54\ub8e8\ud2f4\uc774 \uc911\ub2e8\ub418\ub294 \uc2dc\uc810 \uc0ac\uc774\uc758 \uc9c0\uc5f0\uc2dc\uac04\uc744 \uc9c0\uc815\ud55c\ub2e4. \uae30\ubcf8\uac12\uc740 0\uc73c\ub85c \uc989\uc2dc \uc911\ub2e8\ub41c\ub2e4.<br>replayExpirationMillis : \uacf5\uc720 \ucf54\ub8e8\ud2f4\uc774 \uc911\ub2e8\ub418\ub294 \uc2dc\uc810\uacfc \ub9ac\ud50c\ub808\uc774 \uce90\uc2dc\uac00 \ub9ac\uc14b\ub418\ub294 \uc2dc\uc810 \uc0ac\uc774\uc758 \uc9c0\uc5f0\uc2dc\uac04\uc744 \uc9c0\uc815\ud55c\ub2e4. \uae30\ubcf8\uac12\uc740 Long.MAX_VALUE\uc774\ub2e4. 0\uc73c\ub85c \uc9c0\uc815\ud558\uba74 \uce90\uc2dc\ub97c \uc989\uc2dc \ub9cc\ub8cc \uc2dc\ud0a4\uac8c \ub41c\ub2e4.<br>stopTimeoutMillis \ubc0f replayExpirationMillis\ub97c \uc74c\uc218\ub85c \uc9c0\uc815\ud558\ub294 \uacbd\uc6b0 IllegalArguementException\uc774 \ubc1c\uc0dd\ud55c\ub2e4.<\/li><\/ul>\n\n\n\n<p>shareIn \uc5f0\uc0b0\uc790\ub294 \uc0dd\uc131 \ubc0f \uc720\uc9c0 \uad00\ub9ac \ube44\uc6a9\uc774 \ub9ce\uc774 \ub4dc\ub294 \ucf5c\ub4dc \ud50c\ub85c\uc6b0\uc778\ub370 \uad6c\ub3c5\uc790\uac00 \uc5ec\ub7ec\uac1c\uc778 \uc0c1\ud669\uc5d0\uc11c \uc720\uc6a9\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\ub2e4\uc74c\uc758 \uc608\uc81c\ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc790.\u00a0<\/p>\n\n\n<pre class=\"kotlin-code\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nimport kotlinx.coroutines.*\nimport kotlinx.coroutines.flow.*\n\nprivate suspend fun initHeavyLogic() {\n    delay(1000)\n    println(&quot;initHeavyLogic&quot;)\n}\n\nval coroutineScope = CoroutineScope(Dispatchers.IO)\nval counter: Flow&lt;Int&gt; = flow&lt;Int&gt; {\n    initHeavyLogic()\n    var count = 0\n    while(true) {\n        emit(count++)\n        delay(200)\n    }\n}\n    .shareIn(\n        scope = coroutineScope,\n        started = SharingStarted.Eagerly\n    )\n\nfun main(args: Array&lt;String&gt;) {\n    println(&quot;Started&quot;)\n    runBlocking {\n        launch {\n            println(&quot;#1 Launched&quot;)\n            counter\n                .take(10)\n                .collect {\n                    println(&quot;#1:$it&quot;)\n                }\n        }\n        launch {\n            delay(2000)\n            println(&quot;#2 Launched&quot;)\n            counter\n                .take(10)\n                .collect {\n                    println(&quot;#2:$it&quot;)\n                }\n        }\n    }\n    println(&quot;Finished&quot;)\n}\n<\/pre>\n\n\n\n<p>\uacb0\uacfc:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Started\n#1 Launched\ninitHeavyLogic\n#1:0\n#1:1\n#1:2\n#1:3\n#1:4\n#2 Launched\n#1:5\n#2:5\n#1:6\n#2:6\n#1:7\n#2:7\n#1:8\n#2:8\n#1:9\n#2:9\n#2:10\n#2:11\n#2:12\n#2:13\n#2:14\nFinished<\/code><\/pre>\n\n\n\n<ul><li>shareIn \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\uc73c\ub85c initHeavyLogic\uc774 \uc5ec\ub7ec\ubc88 \ud638\ucd9c\ub418\uc9c0 \uc54a\uace0 \ud55c\ubc88\ub9cc \ud638\ucd9c\ub41c\ub2e4. <\/li><li>shareIn \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud558\uc5ec Cold Flow\ub97c Hot Flow\ub85c \ubcc0\uacbd\ud55c\ub2e4. #2\uac00 \ucd9c\ub825\ub420 \ub54c 0\uc774\uc544\ub2cc 5\ubd80\ud130 \ucd9c\ub825\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">StateIn \uc5f0\uc0b0\uc790<\/h2>\n\n\n\n<p>StateFlow\ub294 SharedFlow\ub97c \ud655\uc7a5\ud558\ub294 \ud2b9\uc218\ud55c \ubc84\uc804\uc73c\ub85c stateIn \uc5f0\uc0b0\uc790 \ub610\ud55c shareIn \uc5f0\uc0b0\uc790\uc758 \ud2b9\uc218\ud55c \ubc84\uc804\uc73c\ub85c \uc0dd\uac01\ud558\uba74 \ub41c\ub2e4. replay \ub9e4\uac1c\ubcc0\uc218\uac00 \uc5c6\uace0(StateFlow\uc758 \uacbd\uc6b0 \ud56d\uc0c1 1\uc774\ub2e4), \ud544\uc218\ub85c \uc9c0\uc815\ud574\uc57c\ud558\ub294 initialValue\uac00 \uc788\ub2e4. stateIn \uc5f0\uc0b0\uc790\uc758 \ud615\ud0dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun &lt;T> Flow&lt;T>.stateIn(\n    scope: CoroutineScope,\n    started: SharingStarted,\n    initialValue: T\n): StateFlow&lt;T><\/code><\/pre>\n\n\n\n<p>\uc774 \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud558\uba74, Flow(\ucf5c\ub4dc\uc2a4\ud2b8\ub9bc)\ub97c \uc8fc\uc5b4\uc9c4 \ucf54\ub8e8\ud2f4 \uc2a4\ucf54\ud504\uc5d0\uc11c \uc2dc\uc791\ub418\ub294 StateFlow(\ud56b\uc2a4\ud2b8\ub9bc)\ub85c \ubcc0\uacbd\ud55c\ub2e4. \ub2e8\uc77c\ub85c \uc2e4\ud589\ub418\ub294 \uc5c5\uc2a4\ud2b8\ub9bc \ud50c\ub85c\uc6b0\uc5d0\uc11c <strong>\uac00\uc7a5 \ucd5c\uadfc\uc5d0 \ub0b4\ubcf4\ub0b8 \uac12\uc744 \uc5ec\ub7ec \ub2e4\uc6b4\uc2a4\ud2b8\ub9bc \uad6c\ub3c5\uc790\ub4e4\uc774 \uacf5\uc720\ud558\ub294 \ud615\ud0dc\ub2e4<\/strong>.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>MutableSharedFlow\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac12\uc744 \ubc1c\ud589\ud558\uace0 \ub2e4\ub978 \ud55c\ud3b8\uc5d0\uc11c\ub294 \uc774\ub97c \uc218\uc9d1\ud560 \uc218 \uc788\ub294 \uc218\ub2e8\uc744 \uc81c\uacf5\ud55c\ub2e4. \uadf8\ub7ec\ub098 \ub2e4\ub978 \ucf54\ub4dc\uc5d0 \uc788\ub294 \ucf5c\ub4dc \ud50c\ub85c\uc6b0\ub97c \uac00\uc838\uc640\uc11c \uc774 \uc5c5\uc2a4\ud2b8\ub9bc\uc744 \uc218\uc9d1\ud558\uace0 SharedFlow\ub85c \ub0b4\ubcf4\ub0bc \uc218 \uc788\ub294 \ud3b8\ub9ac\ud55c \ubc29\ubc95\ub3c4 \uc788\ub2e4. \ubc14\ub85c ShareIn \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774\ub2e4. ShareIn \uc5f0\uc0b0\uc790 shareIn \uc5f0\uc0b0\uc790\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc0dd\uacbc\ub2e4. \uc774 \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud558\uba74, Flow(\ucf5c\ub4dc\uc2a4\ud2b8\ub9bc)\ub97c \uc8fc\uc5b4\uc9c4 \ucf54\ub8e8\ud2f4 \uc2a4\ucf54\ud504(scope) \ub0b4\uc5d0\uc11c \uc2dc\uc791\ub418\ub294 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[5],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/46040"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=46040"}],"version-history":[{"count":2,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/46040\/revisions"}],"predecessor-version":[{"id":46043,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/46040\/revisions\/46043"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=46040"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=46040"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=46040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}