{"id":189,"date":"2018-04-13T13:50:31","date_gmt":"2018-04-13T04:50:31","guid":{"rendered":"http:\/\/www.charlezz.com\/?p=189"},"modified":"2019-11-15T08:25:02","modified_gmt":"2019-11-14T23:25:02","slug":"reactive-programing1-%eb%a6%ac%ec%95%a1%ed%8b%b0%eb%b8%8c-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%98%eb%b0%8d-%ea%b0%9c%eb%85%90%ec%9e%a1%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=189","title":{"rendered":"Reactive Programing(1) &#8211; \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \uac1c\ub150\uc7a1\uae30"},"content":{"rendered":"<h1>Reactive Programinng(Rx Java)<\/h1>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1000\/1*NkhhBPaaZXD9NSYC_xQ0LA.png\" width=\"1000\" height=\"562\" \/><\/p>\n<hr \/>\n<p>Reactive Programing(1) &#8211; \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \uac1c\ub150\uc7a1\uae30<br \/>\n<a class=\"row-title\" href=\"https:\/\/www.charlezz.com\/?p=242\" aria-label=\"\u201cReactive Programing(2) \u2013 Reactive Operator\u201d (\ud3b8\uc9d1)\">Reactive Programing(2) \u2013 Reactive Operator<\/a><br \/>\n<a class=\"row-title\" href=\"https:\/\/www.charlezz.com\/?p=264\" aria-label=\"\u201cReactive Programing(3) \u2013 Reactive Operator\u201d (\ud3b8\uc9d1)\">Reactive Programing(3) \u2013 Reactive Operator<\/a><br \/>\n<a class=\"row-title\" href=\"https:\/\/www.charlezz.com\/?p=283\" aria-label=\"\u201cReactive Programing(4) \u2013 Scheduler\u201d (\ud3b8\uc9d1)\">Reactive Programing(4) \u2013 Scheduler<\/a><br \/>\n<a class=\"row-title\" href=\"https:\/\/www.charlezz.com\/?p=299\" aria-label=\"\u201cReactive Programing(5) \u2013 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c\uc758 RxJava \ud65c\uc6a9\u201d (\ud3b8\uc9d1)\">Reactive Programing(5) \u2013 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c\uc758 RxJava \ud65c\uc6a9<\/a><\/p>\n<hr \/>\n<h2>\ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d\uc774\ub780?<\/h2>\n<p>-&gt; \ub370\uc774\ud130\uc758 \ud750\ub984\uacfc \uc804\ub2ec\uc5d0 \uad00\ud55c \ud504\ub85c\uadf8\ub798\ubc0d \ud328\ub7ec\ub2e4\uc784<br \/>\n\u00a0<\/p>\n<h3>\uba85\ub839\ud615 \ud504\ub85c\uadf8\ub798\ubc0d vs \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d<\/h3>\n<p><strong>\uba85\ub839\ud615 \ud504\ub85c\uadf8\ub798\ubc0d<\/strong> &#8211; \uc791\uc131\ub41c \ucf54\ub4dc\uac00 \uc815\ud574\uc9c4 \uc21c\uc11c\ub300\ub85c \uc2e4\ud589\ub428<br \/>\n<strong>\ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d<\/strong> &#8211; \ub370\uc774\ud130 \ud750\ub984\uc744 \uba3c\uc800 \uc815\uc758\ud558\uace0 \ub370\uc774\ud130\uac00 \ubcc0\uacbd\ub418\uc5c8\uc744 \ub54c \uc5f0\uad00\ub418\ub294 \ud568\uc218\ub098 \uc218\uc2dd\uc774 \uc5c5\ub370\uc774\ud2b8 \ub418\ub294 \ubc29\uc2dd<br \/>\n\u00a0<\/p>\n<h2>\uc790\ubc14\uc640 \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \uad00\uacc4<\/h2>\n<ul>\n<li>\u00a0<strong>\uae30\uc874 pull \ubc29\uc2dd\uc758 \uac1c\ub150\uc744 push\ubc29\uc2dd\uc73c\ub85c \ubc14\uafc8<\/strong><br \/>\nPUSH : \uc8fc\uc81c\uac1d\uccb4\uac00 \uad6c\ub3c5\uac1d\uccb4\uc5d0\uac8c \uc0c1\ud0dc\ub97c \ubcf4\ub0b4\ub294 \ubc29\uc2dd<br \/>\nPULL : \uad6c\ub3c5\uac1d\uccb4\uac00 \uc8fc\uc81c\uac1d\uccb4\uc5d0\uac8c\uc11c \uc0c1\ud0dc\ub97c \uac00\uc838\uac00\ub294(\uc694\uccad\ud558\ub294) \ubc29\uc2dd<\/li>\n<li><strong>\ud568\uc218\ud615 \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \uc9c0\uc6d0\uc744 \ubc1b\uc74c<\/strong><br \/>\n\ud568\uc218\ud615 \ud504\ub85c\uadf8\ub798\ubc0d\uc740 Side Effect(\ubd80\uc218\ud6a8\uacfc)\uac00 \uc5c6\ub2e4.\ucf5c\ubc31\uc774\ub098 \uc635\uc800\ubc84 \ud328\ud134\uc774 \uc2a4\ub808\ub4dc\uc5d0 \uc548\uc804\ud558\uc9c0 \uc54a\uc740 \uc774\uc720\ub294 \uac19\uc740 \uc790\uc6d0\uc5d0 \uc5ec\ub7ec \uc2a4\ub808\ub4dc\uac00 Race condition(\uacbd\uc7c1\uc870\uac74)\uc5d0 \ube60\uc9c0\uac8c \ub418\uc5c8\uc744 \ub54c \uc54c \uc218 \uc5c6\ub294 \uacb0\uacfc\uac00 \ub098\uc624\uae30 \ub54c\ubb38\uc774\ub2e4. \uc774\ub97c Side Effect\ub77c \ud568.\ud568\uc218\ud615 \ud504\ub85c\uadf8\ub798\ubc0d\uc740 Side Effect\uac00 \uc5c6\ub294 \uc21c\uc218 \ud568\uc218\ub97c \uc9c0\ud5a5\ud558\ubbc0\ub85c \uc2a4\ub808\ub4dc\uc5d0 \uc548\uc804\ud558\ub2e4.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>\ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \uac1c\ub150(<a href=\"https:\/\/en.wikipedia.org\/wiki\/Reactive_programming#Definition_of_Reactive_Programming\">\uc704\ud0a4<\/a> \ud38c)<\/h2>\n<p>\ucef4\ud4e8\ud130 \ud504\ub85c\uadf8\ub7a8\uc5d0\ub294 \uc138\uac00\uc9c0 \uc885\ub958\uac00 \uc788\ub2e4. \uccab\uc9f8\ub294 \uc8fc\uc5b4\uc9c4 \uc785\ub825\uac12\uc744 \ubc14\ud0d5\uc73c\ub85c \uacb0\uacfc\ub97c \uacc4\uc0b0\ud558\ub294 \ubcc0\ud658\ud504\ub85c\uadf8\ub7a8. \uc77c\ubc18\uc801\uc73c\ub85c \ucef4\ud30c\uc77c\ub7ec\uc640 \uc218\uce58 \uacc4\uc0b0 \ud504\ub85c\uadf8\ub7a8\uc785\ub2c8\ub2e4. \ub450 \ubc88\uc9f8\ub294 \uc0c1\ud638\uc791\uc6a9\ud504\ub85c\uadf8\ub7a8\uc73c\ub85c \ud504\ub85c\uadf8\ub7a8\uc774 \uc8fc\ub3c4\ud558\ub294 \uc18d\ub3c4\ub85c \uc0ac\uc6a9\uc790 \ud639\uc740 \ub2e4\ub978 \ud504\ub85c\uadf8\ub7a8\uacfc \uc0c1\ud638\uc791\uc6a9\uc744 \ud569\ub2c8\ub2e4. \uc0ac\uc6a9\uc790\uc758 \uad00\uc810\uc5d0\uc11c \ubcfc\ub54c \uc2dc\ubd84\ud560 \uc2dc\uc2a4\ud15c\uc740 \uc0c1\ud638\uc791\uc6a9\ud504\ub85c\uadf8\ub7a8\uc785\ub2c8\ub2e4.<strong> \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub7a8\uc740 \uc8fc\ubcc0\uc758 \ud658\uacbd\uacfc \ub04a\uc784\uc5c6\uc774 \uc0c1\ud638\uc791\uc6a9\uc744 \ud558\ub294\ub370 \ud504\ub85c\uadf8\ub7a8\uc774 \uc8fc\ub3c4\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \ud658\uacbd\uc774 \ubcc0\ud558\uba74 \uc774\ubca4\ud2b8\ub97c \ubc1b\uc544 \ub3d9\uc791\ud569\ub2c8\ub2e4.<\/strong> \uc0c1\ud638\uc791\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc740 \uc790\uc2e0\uc758 \uc18d\ub3c4\uc5d0 \ub9de\ucdb0 \uc77c\ud558\uace0 \ub300\ubd80\ubd84 \ud1b5\uc2e0\uc744 \ub2f4\ub2f9\ud55c\ub2e4. \ubc18\uba74\uc5d0 \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub7a8\uc740 \uc678\ubd80 \uc694\uad6c\uc5d0 \ub04a\uc784\uc5c6\uc774 \ubc18\uc751\ud558\uace0 \ucc98\ub9ac\ud55c\ub2e4.<br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<h2>Android \uc5d0\uc11c RxJava \uc124\uc815\ud558\uae30<\/h2>\n<p>app\ub808\ubca8\uc5d0\uc11c build.gradle\uc758 dependency\uc5d0 \uc544\ub798\uc758 \ub0b4\uc6a9\uc744 \ucd94\uac00<\/p>\n<pre class=\"lang:default decode:true\">implementation \"io.reactivex.rxjava2:rxjava:2.x.y\"<\/pre>\n<p>x,y\uc5d0 \ub4e4\uc5b4\uac08 \ucd5c\uc2e0\ubc84\uc804\uc740 \uc544\ub798\uc5d0 \ub9c1\ud06c\uc5d0\uc11c \ucc38\uc870\ud574\uc8fc\uc138\uc694. (\ud604\uc7ac 2.1.12\uac00 \ucd5c\uc2e0\uc785\ub2c8\ub2e4.)<br \/>\n<a href=\"https:\/\/github.com\/ReactiveX\/RxJava\">https:\/\/github.com\/ReactiveX\/RxJava<\/a><br \/>\n\u00a0<br \/>\n\ud639\uc2dc\ub77c\ub3c4 RxKotlin\uc4f0\uc2e4\ubd84\uc740<\/p>\n<pre class=\"lang:default decode:true\">implementation 'io.reactivex.rxjava2:rxkotlin:x.y.z'<\/pre>\n<p>\ud604\uc7ac 2.2.0\uc774 \ucd5c\uc2e0\uc785\ub2c8\ub2e4.<br \/>\n<a href=\"https:\/\/github.com\/ReactiveX\/RxKotlin\">https:\/\/github.com\/ReactiveX\/RxKotlin<\/a><br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<blockquote>\n<h2><em>RxJava\uc5d0 \uad00\ud55c\ub0b4\uc6a9\uc744 \ud3ec\uc2a4\ud305\ud558\uace0 \uc788\uc73c\ub098 \uc0d8\ud50c\ucf54\ub4dc\ub294 RxKotlin \uc785\ub2c8\ub2e4.<\/em><\/h2>\n<\/blockquote>\n<p>&nbsp;<\/p>\n<h2>Observable<\/h2>\n<p>Observable\uc740 \ub370\uc774\ud130 \ud750\ub984\uc5d0 \ub9de\uac8c \uc54c\ub9bc\uc744 \ubcf4\ub0b4 \uad6c\ub3c5\uc790\uac00 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d\ud55c\ub2e4.<br \/>\nObservable\uc740 \uc635\uc800\ubc84\ud328\ud134\uc744 \uad6c\ud604\ud558\uba70, \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d\uc740 Observable\ub85c \uc2dc\uc791\ud574\uc11c Observable\ub85c \ub05d\ub09c\ub2e4\uace0 \ud574\ub3c4 \uacfc\uc5b8\uc774 \uc544\ub2c8\ub2e4.<br \/>\n\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \uc774\ubca4\ud2b8\ub97c \ubc1b\uc744\uc218 \uc788\uac8c \ud558\ub294 OnClickListener\uac00 \ub300\ud45c\uc801\uc778 \uc635\uc800\ubc84 \ud328\ud134\uc758 \uc608\ub77c\uace0 \ubcfc \uc218 \uc788\ub2e4.<br \/>\n\u00a0<br \/>\nRxJava\uc5d0\uc11c Observable\uc740 \uc138\uac00\uc9c0\ub97c \uad6c\ub3c5\uc790\uc5d0\uac8c \uc804\ub2ec\ud55c\ub2e4.<\/p>\n<ul>\n<li>onNext : Observable\uc774 \ub370\uc774\ud130\uc758 \ubc1c\ud589\uc744 \uc54c\ub9b0\ub2e4. \uae30\uc874\uc758 \uc635\uc800\ubc84 \ud328\ud134\uacfc \uac19\ub2e4<\/li>\n<li>onComplete : \ubaa8\ub4e0 \ub370\uc774\ud130\uac00 \ubc1c\ud589\uc774 \uc644\ub8cc \ub418\uc5c8\uc74c\uc744 \uc54c\ub9b0\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \ub354 \uc774\uc0c1\uc758 onNext\ub294 \ubc1c\uc0dd\ud558\uc9c0\uc54a\uc73c\uba70, \ub9c8\uc9c0\ub9c9\uc5d0 \ub531 \ud55c\ubc88\ub9cc \ud638\ucd9c\ub41c\ub2e4.<\/li>\n<li>onError : Observable\uc5d0\uc11c \uc5b4\ub5a4 \uc774\uc720\ub85c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc74c\uc744 \uc54c\ub9b0\ub2e4. onError \uc774\ubca4\ud2b8\uac00 \ubc1c\uc0dd\ud558\uba74 \uc774\ud6c4\uc5d0 onNext \ubc0f onComplete \uc774\ubca4\ud2b8\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub294\ub2e4. \uc989 Observable\uc758 \uc2e4\ud589\uc744 \uc885\ub8cc\ud55c\ub2e4.<\/li>\n<\/ul>\n<p>\u00a0<br \/>\nObservable \ud074\ub798\uc2a4\uc5d0\ub294 \uc635\uc800\ubc84\ube14 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294 \ud329\ud1a0\ub9ac\ud568\uc218, \uc911\uac04\uacb0\uacfc\ub97c \ucc98\ub9ac\ud558\ub294 \ud568\uc218, \ub514\ubc84\uadf8 \ubc0f \uc608\uc678 \ucc98\ub9ac \ud568\uc218\uac00 \ubaa8\ub450 \ud3ec\ud568\ub418\uc5b4 \uc788\ub2e4.<br \/>\nObservable\uc744 \uc0dd\uc131\ud560 \ub54c\ub294 \uc778\uc2a4\ud134\uc2a4\ub97c \uc9c1\uc811 \ub9cc\ub4e4\uc9c0 \uc54a\uace0 \uc815\uc801 \ud329\ud1a0\ub9ac \ud568\uc218\ub97c \ud638\ucd9c\ud55c\ub2e4.<\/p>\n<table id=\"tablepress-1\" class=\"tablepress tablepress-id-1\">\n<thead>\n<tr class=\"row-1 odd\">\n<th class=\"column-1\">\ud329\ud1a0\ub9ac \ud568\uc218<\/th>\n<th class=\"column-2\">\ud568\uc218<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-hover\">\n<tr class=\"row-2 even\">\n<td class=\"column-1\">RxJava 1.x \uae30\ubcf8 \ud329\ud1a0\ub9ac \ud568\uc218<\/td>\n<td class=\"column-2\">create(), just(), from()<\/td>\n<\/tr>\n<tr class=\"row-3 odd\">\n<td class=\"column-1\">RxJava 2.x \ucd94\uac00 \ud329\ud1a0\ub9ac \ud568\uc218<\/td>\n<td class=\"column-2\">fromArray(), fromIterable(), fromCallable(), fromFuture(), fromPublisher()<\/td>\n<\/tr>\n<tr class=\"row-4 even\">\n<td class=\"column-1\">\uae30\ud0c0 \ud329\ud1a0\ub9ac \ud568\uc218<\/td>\n<td class=\"column-2\">interval(), range(), timer(), defer() \ub4f1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><!-- #tablepress-1 from cache --><br \/>\n\u00a0<\/p>\n<h3>1. Just()\ud568\uc218<\/h3>\n<p>just\ud568\uc218\ub294 \uc778\uc790\ub85c \ub123\uc740 \ub370\uc774\ud130\ub97c \ucc28\ub840\ub85c \ubc1c\ud589\ud558\uba70, \ud55c\uac1c\uc758 \uac12\uc744 \ub123\uc744\uc218\ub3c4 \uc788\uace0, \ud0c0\uc785\uc774 \uac19\uc740 \uc5ec\ub7ec\uac1c\uc758 \uac12\uc744 \ub123\uc744 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<a href=\"https:\/\/www.charlezz.com\/?attachment_id=1365\" rel=\"attachment wp-att-1365\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/0_bhYoYg_O-GlXlikv.png\" alt=\"\" width=\"800\" height=\"387\" class=\"aligncenter size-full wp-image-1365\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/0_bhYoYg_O-GlXlikv.png 800w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/0_bhYoYg_O-GlXlikv-300x145.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/0_bhYoYg_O-GlXlikv-768x372.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a>\u00a0\u00a0\uc911\uc559\uc758 \uc6d0\uc740 Observable\uc5d0\uc11c \ubc1c\ud589\ud558\ub294 \ub370\uc774\ud130\ub85c just()\ud568\uc218\ub97c \uac70\uce58\uba74 \uc785\ub825\ud55c \uc6d0\uc744 \uadf8\ub300\ub85c \ubc1c\ud589\ud55c\ub2e4. \ud30c\uc774\ud504(|) \ud45c\uc2dc\ub294 \ubaa8\ub4e0 \ub370\uc774\ud130\uc758 \ubc1c\ud589\uc774 \uc644\ub8cc \ub418\uc5c8\uc74c\uc744 \uc758\ubbf8\ud55c\ub2e4.<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-205 alignleft\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-2.png\" alt=\"\" width=\"619\" height=\"305\" \/><\/a><br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\uc778\uc790\uac00 N\uac1c\uc778 \uacbd\uc6b0, \ub2e4\uc74c\uacfc \uac19\uc774 6\uac1c\uc758 \uc6d0\uc744 1\uac1c\uc529 \ubc1c\ud589\ud558\uba70 \ubaa8\ub450 \ubc1c\ud589\ud55c \ub4a4 \uc644\ub8cc(|)\ud55c\ub2e4.<br \/>\n\u00a0<\/p>\n<pre class=\"lang:default decode:true\">Observable.just(\"A\", \"B\", \"C\").subscribe {\r\n\tprint(it.toString())\r\n}<\/pre>\n<p>\uacb0\uacfc :\u00a0ABC<br \/>\n\u00a0<\/p>\n<h3>2. subscribe\ud568\uc218\uc640 Disposable \uac1d\uccb4<\/h3>\n<p>RxJava\uc5d0\uc11c\ub294 \ub0b4\uac00 \ud558\uace0 \uc2f6\uc740 \ub0b4\uc6a9\uc744 \uba3c\uc800 \uc815\uc758\ud558\uace0, \uadf8 \ub0b4\uc6a9\uc744 \uc2e4\ud589\ud558\ub294 \uc2dc\uc810\uc744 \uc870\uc808\ud560 \uc218 \uc788\ub2e4.<br \/>\n\uc774\uac8c \ubc14\ub85c subscribe\uc774\ub2e4. Observable\uc758 just() \ub4f1\uc758 \ub2e4\uc591\ud55c \ud568\uc218\ub85c \ub370\uc774\ud130 \ud750\ub984\uc744 \uc815\uc758\ud55c \ud6c4 subscribe()\ud568\uc218\ub97c \ud638\ucd9c\ud574\uc57c \uc2e4\uc81c\ub85c \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud55c\ub2e4.<br \/>\nsubscribe\uc758 \ub9ac\ud134\ud615\uc740 Disposable \uc778\ud130\ud398\uc774\uc2a4 \uac1d\uccb4\uc774\ub2e4.<br \/>\ndispose()\ub294 Observable\uc5d0\uac8c \ub370\uc774\ud130\ub97c \ub354 \uc774\uc0c1 \ubc1c\ud589\ud558\uc9c0 \uc54a\ub3c4\ub85d \uad6c\ub3c5\uc744 \ud574\uc9c0\ud558\ub294 \ud568\uc218\uc774\ub2e4.<br \/>\nonComplete \ucf5c\ubc31\uc774 \uc774\ubbf8 \ub4e4\uc5b4\uc654\ub2e4\uba74 \ubcc4\ub3c4\ub85c dispose\ub97c \ud638\ucd9c\ud560 \ud544\uc694\ub294 \uc5c6\ub2e4.<br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<h3>3. create() \ud568\uc218<\/h3>\n<p>\u00a0<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/R1280x0.png\"><img decoding=\"async\" loading=\"lazy\" class=\" wp-image-207 alignleft\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/R1280x0.png\" alt=\"\" width=\"639\" height=\"200\" \/><\/a><br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<br \/>\njust()\uc640 \ub2e4\ub974\uac8c onNext, onComplete, onError\ub97c \uac1c\ubc1c\uc790\uac00 \uc9c1\uc811 \ud638\ucd9c\ud574\uc57c\ud55c\ub2e4.<\/p>\n<pre class=\"lang:scala decode:true\">val src = Observable.create&lt;String&gt; {\r\n\tit.onNext(\"A\")\r\n\tit.onNext(\"B\")\r\n\tit.onNext(\"C\")\r\n}\r\nsrc.subscribe { t: String? -&gt;\r\n\tprint(t)\r\n}<\/pre>\n<p>\uacb0\uacfc :ABC<br \/>\n\u00a0<br \/>\nNote: RxJava\uac00 \uc775\uc219\ud558\uc9c0 \uc54a\uc740 \uac1c\ubc1c\uc790\ub77c\uba74 create\ud568\uc218\ub97c \uc4f0\ub294\uac83\uc744 \ucd94\ucc9c\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>Observable\uc740 dispose\ub418\uc5c8\uc744\ub54c \ub4f1\ub85d\ub41c \ucf5c\ubc31\uc744 \ubaa8\ub450 \ud574\uc81c \ud558\uc9c0 \uc54a\uc73c\uba74 \uba54\ubaa8\ub9ac \ub204\uc218\uac00 \uc77c\uc5b4\ub09c\ub2e4.<\/li>\n<li>\uad6c\ub3c5\uc790\uac00 \uad6c\ub3c5\ud558\ub294 \ub3d9\uc548\uc5d0\ub9cc onNext\uc640 onComplete\ub97c \ucc98\ub9ac\ud574\uc57c\ud55c\ub2e4.<\/li>\n<li>\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc744 \ub54c\ub294 \uc624\uc9c1 onError \uc774\ubca4\ud2b8\ub85c\ub9cc \uc5d0\ub7ec\ub97c \uc804\ub2ec\ud574\uc57c\ud55c\ub2e4.<\/li>\n<li>back pressure\ub97c \uc9c1\uc811 \ucc98\ub9ac\ud574\uc57c\ud55c\ub2e4.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>4. From() \ud568\uc218<\/h3>\n<p><a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-3.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-222\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-3.png\" alt=\"\" width=\"1280\" height=\"630\" \/><\/a><br \/>\nFrom\ud568\uc218\ub97c \uc774\uc6a9\ud55c\ub2e4\uba74 Observable\uc744 \uc4f0\ub294\uacbd\uc6b0 \uc880\ub354 \ud3b8\ud558\uac8c \ub370\uc774\ud130\ub4e4\uc744 Observable\uac1d\uccb4\ub85c \ubc14\uafd4 \ud45c\ud604\ud560 \uc218\uc788\uc2b5\ub2c8\ub2e4.<br \/>\n\u00a0<br \/>\n<strong>RxJava\uc640 RxKotlin\uc774 \uc9c0\uc6d0\ud558\ub294 From\uacc4\uc5f4\uc758 \ud568\uc218<br \/>\n<\/strong><\/p>\n<table id=\"tablepress-2\" class=\"tablepress tablepress-id-2\">\n<thead>\n<tr class=\"row-1 odd\">\n<th class=\"column-1\">RxJava 2.x<\/th>\n<th class=\"column-2\">fromArray, fromCallable, fromFuture, fromIterable, fromPublisher<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-hover\">\n<tr class=\"row-2 even\">\n<td class=\"column-1\">RxKotlin<\/td>\n<td class=\"column-2\">asObservable, from<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><!-- #tablepress-2 from cache --><br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<h4>4-1. fromArray() \ud568\uc218<\/h4>\n<p>\ub370\uc774\ud130\uac00 \ubc30\uc5f4\uc77c\uacbd\uc6b0 fromArray\ub97c \uc774\uc6a9\ud558\uc5ec \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n<strong>Java<\/strong><\/p>\n<pre class=\"lang:java decode:true\">String[] arr = {\"A\", \"B\", \"C\"};\r\nObservable&lt;String&gt; source = Observable.fromArray(arr);\r\nsource.subscribe(System.out::println);<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"lang:default decode:true\">val array: Array&lt;String&gt; = arrayOf(\"A\", \"B\", \"C\")\r\nval src: Observable&lt;String&gt; = array.toObservable()\r\nsrc.subscribe {\r\n\tSystem.out.println(it)\r\n}<\/pre>\n<p>\u00a0<br \/>\nkotlin\uc5d0\uc11c\ub294 fromArray\ub97c \ud560 \ud544\uc694 \uc5c6\uc774 \ubc30\uc5f4\uc744 Observable\ud615\ud0dc\ub85c \ubcc0\ud658\ud574\uc8fc\ub294 toObservable()\uc774 \uc788\uae30\ub54c\ubb38\uc5d0 \ube44\uad50\ud574\uc11c \ubcf4\uae30 \uc704\ud574 \ub123\uc5c8\uc2b5\ub2c8\ub2e4<br \/>\n(::) <a href=\"http:\/\/wiki.sys4u.co.kr\/pages\/viewpage.action?pageId=7766725\">\uc774\uc911\ucf5c\ub860 \uc5f0\uc0b0\uc790<\/a>\ub294 java8\uc5d0\uc11c\ub9cc \ub418\ubbc0\ub85c<br \/>\napp\ub808\ubca8\uc758 build.gradle\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc744 \ucd94\uac00\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true \">android {\r\n  ...\r\n    compileOptions {\r\n        targetCompatibility 1.8\r\n        sourceCompatibility 1.8\r\n    }\r\n}<\/pre>\n<p>\u00a0<br \/>\n<em>Note: Java\uc5d0\uc11c int[] \ubc30\uc5f4\uc740 \uc5d0\ub7ec\uac00 \ub09c\ub2e4\uba74?<\/em><\/p>\n<pre class=\"lang:java decode:true\">Integer[] arr1 = {1, 2, 3};\/\/Integer\ud615 \ubc30\uc5f4\r\nObservable&lt;Integer&gt; source1 = Observable.fromArray(arr1);\/\/\ubb38\uc81c\uc5c6\uc74c\r\nsource1.subscribe(System.out::print);\/\/\uacb0\uacfc 123\r\nint[] arr2 = {1, 2, 3};\/\/int\ud615 \ubc30\uc5f4\r\nObservable&lt;Integer&gt; source2 = Observable.fromArray(arr2);\/\/error\r\nsource2.subscribe(System.out::print);<\/pre>\n<p>\uc2e4\uc81c\ub85c Integer \ud0c0\uc785\uc73c\ub85c \ucf54\ub529\uc744 \ud558\uc9c0\ub294 \uc54a\ub294\ud3b8\uc785\ub2c8\ub2e4.<br \/>\n\ud558\uc9c0\ub9cc int[] \uc740 fromArray\uc778\uc790\uc5d0 \uc801\ud569\ud558\uc9c0 \uc54a\ub2e4\uace0 \ub098\uc635\ub2c8\ub2e4.<br \/>\n\uadf8\ub7ec\ubbc0\ub85c int[]\uc744 Integer[]\ub85c \ubc14\uafd4\uc918\uc57c\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">private static Integer[] toIntegerArray(int[] intArray){\r\n\treturn IntStream.of(intArray).boxed().toArray(Integer[]::new);\r\n}<\/pre>\n<p>\uc704\ud568\uc218\ub294 Java8 \uc73c\ub85c \uc791\uc131\ub41c \uba54\uc18c\ub4dc \uc785\ub2c8\ub2e4.<br \/>\n\uc774\uc81c \uc2e4\uc81c \uc801\uc6a9\ud558\ub294 \ucf54\ub4dc\ub97c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">int[] arr2 = {1, 2, 3};\r\nObservable&lt;Integer&gt; source2 = Observable.fromArray(toIntegerArray(arr2)); \/\/int[] -&gt; Integer[]  everything is fine!\r\nsource2.subscribe(System.out::print); \/\/ \uacb0\uacfc 123<\/pre>\n<p>&nbsp;<\/p>\n<h4>4-2. fromIterable() \ud568\uc218<\/h4>\n<p>Iterator \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud55c \ub300\ud45c\uc801\uc778 \ud074\ub798\uc2a4 ArrayList, Stack, LinkedList, HashSet \ub4f1\uc5d0\uc11c \u00a0Observable\uc744 \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">val friends = ArrayList&lt;String&gt;().apply{\r\n\tadd(\"Charles\")\r\n\tadd(\"Runa\")\r\n\tadd(\"Nick\")\r\n}\r\nObservable.fromIterable(friends).subscribe {\r\n\tprintln(it)\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\nCharles<br \/>\nRuna<br \/>\nNick<br \/>\n<em>Note: Map\uc740 \ubc30\uc5f4\ub3c4 \uc544\ub2c8\uace0 Iterable \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uc9c0 \uc54a\uc558\uc73c\ubbc0\ub85c Map\uac1d\uccb4\ub97c from\ud568\uc218\ub85c Observable\uc744 \ub9cc\ub4dc\ub294\uac83\uc740 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4.<\/em><br \/>\n\u00a0<\/p>\n<h4>4-3. fromCallable() \ud568\uc218<\/h4>\n<pre class=\"lang:default decode:true \">val callable = Callable&lt;String&gt;{\r\n\tprintln(\"I am gonna sleep for 5 seconds\")\r\n\tThread.sleep(5000)\r\n\t\"Hello world\"\r\n}\r\nObservable.fromCallable(callable).subscribe {\r\n\tprintln(it)\r\n}<\/pre>\n<p>Callable\uc778\ud130\ud398\uc774\uc2a4\uc5d0\ub294 \ube44\ub3d9\uae30 \uc2e4\ud589 \ud6c4 \uacb0\uacfc\ub97c \ubc18\ud658\ud558\ub294 call()\uac00 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\nRunnable\uc758 run()\uacfc\ub294 \ub2e4\ub974\uac8c \uc2e4\ud589 \uacb0\uacfc\ub97c \ub9ac\ud134\ud55c\ub2e4\ub294 \uc810\uc5d0\uc11c \ucc28\uc774\uac00 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n\uacb0\uacfc :<br \/>\nI am gonna sleep for 5 seconds<br \/>\nHello world<br \/>\n5\ucd08\ub3d9\uc548 \uc4f0\ub808\ub4dc\ub97c \uc7a0\uc7ac\uc6b4\ub2e4\ub294 \uba54\uc2dc\uc9c0\ub97c \ub744\uc6b4\ub4a4 5\ucd08\ud6c4\uc5d0<br \/>\nsubscribe\ub97c \ud1b5\ud574 Hello World\ub97c \ucd9c\ub825\ud558\ub294 \uba54\uc2dc\uc9c0\ub97c \ubcfc\uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<h4>4-4. fromFuture() \ud568\uc218<\/h4>\n<p>Future \uc778\ud130\ud398\uc774\uc2a4 \uc5ed\uc2dc \ube44\ub3d9\uae30 \uacc4\uc0b0\uc758 \uacb0\uacfc\ub97c \uad6c\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ubcf4\ud1b5 Executor \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud55c \ud074\ub798\uc2a4\uc5d0 Callable \uac1d\uccb4\ub97c \uc778\uc790\ub85c \ub123\uc5b4 Future\uac1d\uccb4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. get() \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uba74 Callable \uac1d\uccb4\uc5d0\uc11c \uad6c\ud604\ud55c \uacc4\uc0b0 \uacb0\uacfc\uac00 \ub098\uc62c \ub54c\uae4c\uc9c0 \uc4f0\ub808\ub4dc\uac00 \ube14\ub85c\ud0b9 \ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">val future = Executors.newSingleThreadExecutor().submit(Callable {\r\n\tThread.sleep(5000)\r\n\t\"hello\"\r\n})\r\nObservable.fromFuture(future).subscribe {\r\n\tprintln(it)\r\n}\r\n<\/pre>\n<p>\uacb0\uacfc:<br \/>\nhello<br \/>\n<em>Note:RxJava\ub294 \uc704\uc640 \uac19\uc740 Excutors \ud074\ub798\uc2a4\ubcf4\ub2e4\ub294 Rxjava\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc2a4\ucf00\uc904\ub7ec\ub97c \ud65c\uc6a9\ud558\uae38 \uad8c\uc7a5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/em><br \/>\n\u00a0<\/p>\n<h4>4-5. fromPublisher() \ud568\uc218<\/h4>\n<p>Publisher\ub294 \uc790\ubc14 9\uc758 \ud45c\uc900\uc778 Flow API\uc758 \ud55c\ubd80\ubd84\uc785\ub2c8\ub2e4.<br \/>\nPublisher \uc778\ud130\ud398\uc774\uc2a4\uc758 \ud328\ud0a4\uc9c0\uba85\uc740 org.reactivestreams\uc778\ub370 Observable\uc740 io.reactivex\uc785\ub2c8\ub2e4.<br \/>\npublisher\uac1d\uccb4\ub294 onNext()\uc640 onComplete() \ud638\ucd9c\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">val publisher: Publisher&lt;String&gt; = Publisher {\r\n\ts: Subscriber&lt;in String&gt;? -&gt;\r\n\ts?.onNext(\"Hello Publisher\")\r\n\ts?.onComplete()\r\n}\r\nObservable.fromPublisher(publisher).subscribe{\r\n\tprintln(it)\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\nHello Publisher<br \/>\n\u00a0<\/p>\n<h2>Single \ud074\ub798\uc2a4<\/h2>\n<p>Observable\ud074\ub798\uc2a4\ub294 \ub370\uc774\ud130\ub97c 1\uac1c\uc774\uc0c1 \ubc1c\ud589\ud560 \uc218 \uc788\uc9c0\ub9cc Single\ud074\ub798\uc2a4\ub294 \uc774\ub984 \uadf8\ub300\ub85c 1\uac1c\uc758 \ub370\uc774\ud130\ub9cc \ubc1c\ud589\ud558\ub3c4\ub85d \ud55c\uc815\ud569\ub2c8\ub2e4.<br \/>\n\uc11c\ubc84 API\ub97c \ud638\ucd9c\ud560 \ub54c \uc720\uc6a9\ud569\ub2c8\ub2e4.<br \/>\n\u00a0<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-4.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-226\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-4.png\" alt=\"\" width=\"1210\" height=\"570\" \/><\/a><br \/>\n\u00a0<br \/>\nSingle\uc758 \uac00\uc7a5 \ud070 \ud2b9\uc9d5\uc740 \ub370\uc774\ud130\uac00 \ubc1c\ud589\uacfc \ub3d9\uc2dc\uc5d0 \uc885\ub8cc(onSuccess) \ub41c\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4.<br \/>\n(\uc5b4\ucc0c \ubcf4\uba74 \ub2f9\uc5f0\ud55c\uac83\uc77c\uc218\ub3c4 \uc788\uc9c0\ub9cc..\ub370\uc774\ud130\ub97c \ud558\ub098\ub9cc \ubc1c\ud589\ud558\ub2c8\uae4c&#8230;)<br \/>\n\uadf8\ub798\uc11c Single\ud074\ub798\uc2a4\uc758 \ub77c\uc774\ud504 \uc0ac\uc774\ud074\uc740 onSuccess\uc640 onError \ud568\uc218\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<pre class=\"lang:default decode:true \">Single.just(\"Hello World\").subscribe { t1: String?, t2: Throwable? -&gt;\r\n\tprintln(\"onSucess:${t1}\")\r\n\tprintln(\"onError:${t2.toString()}\")\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\nonSucess:Hello World<br \/>\nonError:null<br \/>\n\u00a0<br \/>\nSingle\uc740 Observable\uc758 \ud2b9\uc218\ud55c \ud615\ud0dc\uc774\ubbc0\ub85c\u00a0Observable\uc744 Single \ud074\ub798\uc2a4\uc5d0\uc11c \uc774\uc6a9\ub3c4 \uac00\ub2a5\ud569\ub2c8\ub2e4.<br \/>\n\uc544\ub798\uc758 \uc608\uc81c\ub4e4\uc744 \ud655\uc778\ud574 \ubd05\uc2dc\ub2e4.<\/p>\n<ul>\n<li>Observable to Single 1<\/li>\n<\/ul>\n<pre class=\"\">val source1 = Observable.just(\"First\")\r\nSingle.fromObservable(source1).subscribe { success: String?, error: Throwable? -&gt;\r\n   println(success)\r\n   println(error)\r\n}<\/pre>\n<p>\uacb0\uacfc :<br \/>\nFirst<br \/>\nnull<\/p>\n<ul>\n<li>Observable to Single 2<\/li>\n<\/ul>\n<pre class=\"lang:default decode:true\">val source2 = Observable.just(\"First\",\"Second\",\"Third\")\r\nSingle.fromObservable(source2).subscribe { success: String?, error: Throwable? -&gt;\r\n\tprintln(success)\r\n\tprintln(error)\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\nnull<br \/>\njava.lang.IllegalArgumentException: Sequence contains more than one element!<br \/>\n\u00a0<br \/>\nObservable\uac1d\uccb4\ub97c \ud65c\uc6a9\ud558\uc5ec Single\uac1d\uccb4\ub85c\uc11c \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\ub294 \uc608\uc81c\uc785\ub2c8\ub2e4.<br \/>\n\uae30\uc874 Observable\uc5d0\uc11c \uccab\ubc88\uc9f8 \uac12\uc744 \ubc1c\ud589\ud558\ub294\ub370 \uc131\uacf5\uc744 \ud55c\ub2e4\uba74 onSuccess\ub97c \ud638\ucd9c\ud55c \ud6c4 \uc885\ub8cc\ud569\ub2c8\ub2e4. Observable \uac1d\uccb4\uc5d0 \ub450\uac1c\uc774\uc0c1\uc758 \ub370\uc774\ud130\uac00 \ub4e4\uc5b4\uac00\uc788\ub294 \uacbd\uc6b0 Error\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<ul>\n<li>Calling single() to Make an object of Single<\/li>\n<\/ul>\n<pre class=\"lang:default decode:true\">Observable.just(\"HelloWorld\").single(\"default\").subscribe { t: String? -&gt;\r\n\tprintln(t)\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\nHelloWorld<br \/>\n\u00a0<br \/>\nObservable\uac1d\uccb4\ub85c\ubd80\ud130 single()\ud568\uc218\ub97c \ud638\ucd9c\ud558\uace0 \uae30\ubcf8\uac12 &#8220;default&#8217;\ub97c \uac00\uc9d1\ub2c8\ub2e4. Observable\uc5d0\uc11c \uac12\uc774 \ubc1c\ud589\ub418\uc9c0 \uc54a\uc744 \ub54c\ub3c4 \uc778\uc790\ub85c \ub123\uc740 default\uac12\uc744 \ub300\uc2e0 \ubc1c\ud589\ud569\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<ul>\n<li>Pick first from observable<\/li>\n<\/ul>\n<pre class=\"lang:default decode:true\">arrayOf(\"A\", \"B\", \"C\").toObservable()\r\n\t\t.first(\"default\")\r\n\t\t.subscribe { t1, error -&gt;\r\n\t\t\tprintln(t1)\r\n\t\t\tprintln(error)\r\n\t\t}<\/pre>\n<p>\uacb0\uacfc:<br \/>\nA<br \/>\nnull<br \/>\n\ubc30\uc5f4\uc744 \uac16\ub294 Observable\ub85c \ubd80\ud130 first()\ud568\uc218\ub97c \ud638\ucd9c\ud558\uc5ec \uccab\ubc88\uc9f8\ub97c \uc778\uc790\ub97c \uac16\ub294 Single\uac1d\uccb4\ub85c \ubcc0\ud658\ud55c\ub4a4 \ucd9c\ub825\ud569\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<ul>\n<li>Print default value from Single<\/li>\n<\/ul>\n<pre>Observable.empty&lt;String&gt;().single(\"default\").subscribe { t1, error -&gt;\r\n   println(t1)\r\n   println(error)\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\ndefault<br \/>\nnull<br \/>\nempty()\ud568\uc218\ub97c \ud1b5\ud574 \ube44\uc5b4\uc788\ub294 Single\uac1d\uccb4\ub97c \ub9cc\ub4e4\uac8c \ub429\ub2c8\ub2e4. \uae30\ubcf8\uac12\uc744 &#8220;default&#8221;\ub85c \uc9c0\uc815\ud588\uc73c\ubbc0\ub85c default\uac00 \ucd9c\ub825\ub418\ub294\uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<ul>\n<li>Take one to make an object of Single<\/li>\n<\/ul>\n<pre class=\"\">Observable.just(\"First\", \"Second\", \"Third\")\r\n      .take(1)\r\n      .single(\"default\")\r\n      .subscribe { t1, error -&gt;\r\n         println(t1)\r\n      }<\/pre>\n<p>Observable\ub85c \ubd80\ud130 \ud558\ub098\uc758 \uac12\uc744 take\ud558\uc5ec single\ub85c \ub9cc\ub4e0\ud6c4 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\ub294 \uc608\uc81c \uc785\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<h2>Maybe \ud074\ub798\uc2a4<\/h2>\n<p>Observable\uc758 \ub610 \ub2e4\ub978 \ud615\ud0dc\uc785\ub2c8\ub2e4. Single\ucc98\ub7fc \ud558\ub098\uc758 \ub370\uc774\ud130\ub97c \uac00\uc9c8 \uc218 \uc788\uc9c0\ub9cc \ub370\uc774\ud130 \ubc1c\ud589 \uc5c6\uc774 \ub370\uc774\ud130 \ubc1c\uc0dd\uc744 \uc644\ub8cc\ud560 \uc218\ub3c4 \uc544\ub2d0\uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4(\uadf8\ub798\uc11c \uba54\uc774\ube44(\uc544\ub9c8\ub3c4)\uc785\ub2c8\ub2e4) .<br \/>\n\u00a0<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-5.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-227\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-5.png\" alt=\"\" width=\"403\" height=\"233\" \/><\/a><br \/>\n\u00a0<br \/>\n\u221a : onSuccess \uc774\ubca4\ud2b8<br \/>\nX : onError \uc774\ubca4\ud2b8<br \/>\n| : onComplete \uc774\ubca4\ud2b8<br \/>\n\u00a0<br \/>\nMaybe \uac1d\uccb4\ub294 \uc9c1\uc811 \uc0dd\uc131\uc790\ub97c \ud1b5\ud574 \ub9cc\ub4e4\uc5b4 \uc9c8\uc218\ub3c4 \uc788\uc9c0\ub9cc \ubcf4\ud1b5 Observable\uc758 \uc5f0\uc0b0\uc790\ub85c\ubd80\ud130 \uc0dd\uc131\ud558\ub294 \uacbd\uc6b0\uac00 \ub354 \ub9ce\uc2b5\ub2c8\ub2e4.<br \/>\n<em>Note:Maybe \uac1d\uccb4\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub294 \uc5f0\uc0b0\uc790<br \/>\nelementAt(), firstElement(), flatMapMaybe(), lastElement(), reduce(), singleElement()<\/em><br \/>\n\u00a0<\/p>\n<h1>Hot Observable vs Cold Ovservable<\/h1>\n<p>Hot Observable\uc740 \uad6c\ub3c5\uc790\uc758 \uc874\uc7ac\uc640 \uad00\uacc4 \uc5c6\uc774 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc5ec\ub7ec \uad6c\ub3c5\uc790\ub97c \uace0\ub824\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Hot Observable\uc740 \uad6c\ub3c5\uc744 \ud55c \uc2dc\uc810\uc73c\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \ubc1b\uc73c\uba70, \uad6c\ub3c5\uc790\ub85c\uc11c\ub294 Observable\uc5d0\uc11c \ubc1c\ud589\ud558\ub294 \ub370\uc774\ud130\ub97c \ucc98\uc74c\ubd80\ud130 \uc218\uc2e0\ud55c\ub2e4\uace0 \ubcf4\uc7a5\ud560 \uc218\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. (Cold Observable\uc740 \uc900\ube44\ub41c \ub370\uc774\ud130\ub97c \ucc98\uc74c\ubd80\ud130 \ubc1c\ud589\ud568)<br \/>\nCold Observable\uc740 just(), fromIterable()\ud568\uc218\ub97c \ud558\ub354\ub77c\ub3c4 subscribe\ud568\uc218\ub97c \ud638\ucd9c \ud558\uc9c0 \uc54a\uc73c\uba74 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\uc9c0 \uc54a\ub294 Lazy loading\uc785\ub2c8\ub2e4. \ubcf4\ud1b5 \uc11c\ubc84 API \ud638\ucd9c, DB \ucffc\ub9ac, \ud30c\uc77c \uc77d\uae30 \ub4f1\uc5d0\uc11c \uc4f0\uc785\ub2c8\ub2e4. \u00a0\uc704\uc5d0\uc11c \ub2e4\ub8ec Observable\uc740 \ubaa8\ub450 Cold Observable\uc774\uc600\uc2b5\ub2c8\ub2e4.<br \/>\nCold Observable\uc758 \uc608\ub97c \ub4e4\uc5c8\uc73c\ub2c8 HotObservable\uc758 \uc608\ub3c4 \ub4e4\uc5b4\ubcf4\uc790\uba74 \ud0a4\ubcf4\ub4dc, \ub9c8\uc6b0\uc2a4 \uc774\ubca4\ud2b8, \uc2dc\uc2a4\ud15c\uc774\ubca4\ud2b8, \uc13c\uc11c\uac12 \uc774\ubca4\ud2b8 \ub4f1\uc774 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\nHot Observable\uc744 \ucc98\ub9ac\ud560 \ub54c\ub294 Back Pressure(\ubc30\uc555)\uc744 \uace0\ub824\ud574\uc57c \ud558\uba70 \ubc1c\ud589\uc790\uc640 \uad6c\ub3c5\uc790\uc758 \ucc98\ub9ac \uc18d\ub3c4\uac00 \ucc28\uc774\uac00 \ud074 \ub54c \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<br \/>\nCold Observable\uc744 Hot Observable\ub85c \ubcc0\ud658\ud558\ub294 \ubc29\ubc95\uc740 Subject\ub97c \ub9cc\ub4e4\uac70\ub098 Connectableobservable\uc744 \uc774\uc6a9\ud558\ub294\uac83\uc785\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<h2>Subject \ud074\ub798\uc2a4<\/h2>\n<p>Subject \ud074\ub798\uc2a4 \ud2b9\uc131\uc740 <strong>Observable\uc758 \uc18d\uc131<\/strong>\uacfc <strong>\uad6c\ub3c5\uc790\uc758 \uc18d\uc131<\/strong>\uc774 \ubaa8\ub450 \uc788\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4.<br \/>\nAsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject \ub4f1\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>1. AsyncSubject \ud074\ub798\uc2a4<\/h3>\n<p>AsyncSubject \ud074\ub798\uc2a4\ub294 Observable\uc5d0\uc11c \ubc1c\ud589\ud55c <strong>\ub9c8\uc9c0\ub9c9 \ub370\uc774\ud130<\/strong>\ub97c \uc5bb\uc5b4\uc62c \uc218 \uc788\ub294 Subject\ud074\ub798\uc2a4 \uc785\ub2c8\ub2e4. \uc644\ub8cc\ub418\uae30 \uc804 \ub9c8\uc9c0\ub9c9 \ub370\uc774\ud130\uc5d0\ub9cc \uad00\uc2ec\uc774 \uc788\uc73c\uba70 <strong>\uc774\uc804 \ub370\uc774\ud130\ub294 \ubb34\uc2dc<\/strong>\ud569\ub2c8\ub2e4.<br \/>\n\u00a0<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-7.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-235\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-7.png\" alt=\"\" width=\"1280\" height=\"810\" \/><\/a><br \/>\n\u00a0<br \/>\n\ub9c8\ube14 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc744 \ud558\ub098\uc529 \ub72f\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<br \/>\n\uc544\ub798 \uad6c\ub3c5\uc790(subscribe)\uc758 \ud0c0\uc784\ub77c\uc778\uc774 \uc5ec\ub7ec\uac1c(3\uac1c)\uc778\uac83\uc774 \ubcf4\uc774\ub124\uc694. \ud750\ub984\uc5d0 \ub300\ud55c \uc21c\uc11c\ub294 \uc774\ub807\uc2b5\ub2c8\ub2e4<br \/>\n(1) \ub9e8 \ucc98\uc74c subscribe() \ud638\ucd9c<br \/>\n(2) \ube68\uac15, \uc5f0\ub450\ub97c \ubc1c\ud589\uc774 \uc644\ub8cc\ub418\uace0, \ud30c\ub791\uc774 \ubc1c\ud589\ub418\uae30\uc804\uc5d0 \ub450\ubc88\uc9f8 \uad6c\ub3c5\uc790\uac00 subscribe()\ub97c \ud569\ub2c8\ub2e4.<br \/>\n(3) \uccab\ubc88\uc9f8, \ub450\ubc88\uc9f8 \uad6c\ub3c5\uc790 \ubaa8\ub450 \ubc1c\ud589\ub41c \ud30c\ub791\uc744 \ubc1b\uace0 onComplete \uc774\ubca4\ud2b8\ub97c \ubc1b\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"\">val subject = AsyncSubject.create&lt;String&gt;()\r\nsubject.subscribe{\r\n   color: String? -&gt;\r\n   println(\"subscriber1:${color}\")\r\n}\r\nsubject.onNext(\"Red\")\r\nsubject.onNext(\"Green\")\r\nsubject.subscribe{\r\n   color: String? -&gt;\r\n   println(\"subscriber2:${color}\")\r\n}\r\nsubject.onNext(\"Blue\")\r\nsubject.onComplete()<\/pre>\n<p>\uacb0\uacfc:<br \/>\nsubscriber1:Blue<br \/>\nsubscriber2:Blue<br \/>\n\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc785\ub825\ub41c \ub370\uc774\ud130\uac00 \uad6c\ub3c5\uc790\uc5d0\uac8c \ucd5c\uc885 \uc804\ub2ec\ub429\ub2c8\ub2e4.<br \/>\n\u00a0<br \/>\nAsyncSubject\ub294 \uad6c\ub3c5\uc790\ub85c\ub3c4 \ub3d9\uc791 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"\">val subject = AsyncSubject.create&lt;String&gt;()\r\nsubject.subscribe{\r\n   println(it)\r\n}\r\nObservable.just(\"Red\",\"Green\",\"Blue\")\r\n      .subscribe(subject)<\/pre>\n<p>\uacb0\uacfc:<br \/>\nBlue<br \/>\n\u00a0<br \/>\nAsyncSubject\uc5d0\uc11c onComplete() \ud568\uc218\ub97c \ud638\ucd9c \ud55c \ud6c4\uc5d0\ub3c4 \uad6c\ub3c5\uc744 \ud560\ub54c\ub3c4 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"\">val subject = AsyncSubject.create&lt;String&gt;()\r\nsubject.subscribe{\r\n   color: String? -&gt;\r\n   println(\"subscriber1:${color}\")\r\n}\r\nsubject.onNext(\"Red\")\r\nsubject.onNext(\"Green\")\r\nsubject.onComplete()\r\nsubject.subscribe{\r\n   color: String? -&gt;\r\n   println(\"subscriber2:${color}\")\r\n}\r\nsubject.onNext(\"Blue\")\r\nsubject.subscribe{\r\n   color: String? -&gt;\r\n   println(\"subscriber3:${color}\")\r\n}<\/pre>\n<p>\uacb0\uacfc :<br \/>\nsubscriber1:Green<br \/>\nsubscriber2:Green<br \/>\nsubscriber3:Green<br \/>\n\ubc1c\ud589\uc744 \uc644\ub8cc(onComplete)\ud55c \uc774\ud6c4\uc758 onNext\ub294 \ubb34\uc2dc\ub418\ub294\uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>2. BehaviorSubject \ud074\ub798\uc2a4<\/h3>\n<p>\uad6c\ub3c5\uc744 \ud558\uba74 \uac00\uc7a5 <strong>\ucd5c\uadfc \uac12<\/strong> or <strong>\uae30\ubcf8\uac12<\/strong>\uc744 \ub118\uaca8\uc8fc\ub294 \ud074\ub798\uc2a4<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-8.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-236\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-8.png\" alt=\"\" width=\"1280\" height=\"830\" \/><\/a><br \/>\n\u00a0<br \/>\n\ud551\ud06c\ub294 \ucd08\uae43\uac12\uc774\uba70 \uccab\ubc88\uc9f8 subscribe\uc5d0\uc11c\ub294 \ucd08\uae30\uac12\uc744 \ubc1b\uace0 \ube68\uac15, \uc5f0\ub450\ub97c \ubc1b\uc2b5\ub2c8\ub2e4. \uc774\uc5b4 \ub450\ubc88\uc9f8 subscribe\uac00 \uc77c\uc5b4\ub098\uace0 \uac00\uc7a5 \ucd5c\uadfc\uac12\uc778 \uc5f0\ub450\ub97c \uac00\uc838\uc635\ub2c8\ub2e4. \uc774\ud6c4 \ub450 \uad6c\ub3c5\uc790 \ubaa8\ub450 \ud30c\ub791\uc744 \uac19\uc774 \ubc1b\uc2b5\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<pre class=\"\">val subject = BehaviorSubject.createDefault(\"Pink\")\r\nsubject.subscribe {\r\n   println(\"subscriber1:$it\")\r\n}\r\nsubject.onNext(\"Red\")\r\nsubject.onNext(\"Green\")\r\nsubject.subscribe{\r\n   println(\"subscriber2:$it\")\r\n}\r\nsubject.onNext(\"Blue\")\r\nsubject.onComplete()<\/pre>\n<p>\uacb0\uacfc:<br \/>\nsubscriber1:Pink<br \/>\nsubscriber1:Red<br \/>\nsubscriber1:Green<br \/>\nsubscriber2:Green<br \/>\nsubscriber1:Blue<br \/>\nsubscriber2:Blue<\/p>\n<h3>3. PublishSubject \ud074\ub798\uc2a4<\/h3>\n<p>\uac00\uc7a5 \ud3c9\ubc94\ud55c Subject \ud074\ub798\uc2a4. Subscribe() \uc2dc \ud638\ucd9c\uac12\uc744 \ubc1c\ud589\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4.<br \/>\n\ub9c8\uc9c0\ub9c9 \uac12\ub9cc \ubc1c\ud589\ud558\uac70\ub098 \uae30\ubcf8\uac12\uc744 \ubc1c\ud589\ud558\uc9c0\ub3c4 \uc54a\uace0 \ub531 \ud574\ub2f9 \uc2dc\uac04\uc5d0 \ubc1c\uc0dd\ud55c \ub370\uc774\ud130\ub97c \uc804\ub2ec\ubc1b\uc2b5\ub2c8\ub2e4.<br \/>\n\u00a0<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-9.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-237\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-9.png\" alt=\"\" width=\"1280\" height=\"810\" \/><\/a><br \/>\n\u00a0<\/p>\n<pre class=\"\">val subject = PublishSubject.create&lt;String&gt;()\r\nsubject.subscribe{\r\n   println(\"subscriber1:${it}\")\r\n}\r\nsubject.onNext(\"Red\")\r\nsubject.onNext(\"Green\")\r\nsubject.subscribe{\r\n   println(\"subscriber2:${it}\")\r\n}\r\nsubject.onNext(\"Blue\")\r\nsubject.onComplete()\r\n<\/pre>\n<p>\uacb0\uacfc:<br \/>\nsubscriber1:Red<br \/>\nsubscriber1:Green<br \/>\nsubscriber1:Blue<br \/>\nsubscriber2:Blue<br \/>\n\u00a0<\/p>\n<h3>4. ReplaySubject \ud074\ub798\uc2a4<\/h3>\n<p>Subject\uc758 \ud074\ub798\uc2a4\uc758 \ubaa9\uc801\uc740 Hot Observable\uc744 \ud65c\uc6a9\ud558\ub294 \uac83\uc778\ub370 Cold Observable \ucc98\ub7fc \ub3d9\uc791\ud569\ub2c8\ub2e4.<br \/>\n\uc0c8\ub85c\uc6b4 \uad6c\ub3c5\uc790\uac00 \uc0dd\uae30\uba74 \ud56d\uc0c1 \ub370\uc774\ud130\uc758 \ucc98\uc74c\ubd80\ud130 \ub05d\uae4c\uc9c0 \ubc1c\ud589\ud558\ub294\uac83\uc744 \ubcf4\uc7a5\ud569\ub2c8\ub2e4.<br \/>\n<em>Note:\ubaa8\ub4e0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud574\ub450\ub294 \uacfc\uc815\uc5d0\uc11c \uba54\ubaa8\ub9ac \ub204\uc218\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/em><br \/>\n\u00a0<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-10.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-238\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-10.png\" alt=\"\" width=\"1280\" height=\"810\" \/><\/a><br \/>\n\u00a0<\/p>\n<pre class=\"\">val subject = ReplaySubject.create&lt;String&gt;()\r\nsubject.subscribe {\r\n   println(\"subscriber1:$it\")\r\n}\r\nsubject.onNext(\"Red\")\r\nsubject.onNext(\"Green\")\r\nsubject.subscribe{\r\n   println(\"subscriber2:$it\")\r\n}\r\nsubject.onNext(\"Blue\")\r\nsubject.onComplete()<\/pre>\n<p>\uacb0\uacfc:<br \/>\nsubscriber1:Red<br \/>\nsubscriber1:Green<br \/>\nsubscriber2:Red<br \/>\nsubscriber2:Green<br \/>\nsubscriber1:Blue<br \/>\nsubscriber2:Blue<br \/>\n\u00a0<\/p>\n<h2>ConnectableObservable \ud074\ub798\uc2a4<\/h2>\n<p>Subject\ud074\ub798\uc2a4\ucc98\ub7fc Cold Observable\uc744 Hot Observable\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4.<br \/>\nObservable\uc744 \uc5ec\ub7ec \uad6c\ub3c5\uc790\uc5d0\uac8c \uacf5\uc720\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \ub370\uc774\ud130 \ud558\ub098\ub97c \uc5ec\ub7ec \uad6c\ub3c5\uc790\uc5d0\uac8c \ub3d9\uc2dc\uc5d0 \uc804\ub2ec\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ud2b9\uc774\ud55c \uc810\uc740 subscribe()\ub97c \ud638\ucd9c\ud574\ub3c4 \uc544\ubb34\ub7f0 \uc77c\uc774 \uc77c\uc5b4\ub098\uc9c0 \uc54a\uace0, connect() \ud568\uc218\ub97c \ud638\ucd9c\ud55c \uc2dc\uc810\ubd80\ud130 \uad6c\ub3c5\uc790\uc5d0\uac8c \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud569\ub2c8\ub2e4.<br \/>\n\uac1d\uccb4 \uc0dd\uc131\uc744 \uc704\ud574\uc11c Observable\uc758 publish() \ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4. connect()\ud568\uc218\ub97c \ud638\ucd9c\ud558\uae30 \uc804\uae4c\uc9c0 \ub370\uc774\ud130 \ubc1c\ud589\uc744 \uc9c0\uc5f0\uc2dc\ud0b5\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-11.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-239\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-11.png\" alt=\"\" width=\"1280\" height=\"1020\" \/><\/a><br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<pre class=\"\">val array = arrayOf(\"Red\", \"Green\", \"Blue\")\r\nval colors = Observable.interval(100L, TimeUnit.MILLISECONDS)\r\n      .map { t: Long -&gt; array[t.toInt()] }\r\n      .take(array.size.toLong())\r\nval source: ConnectableObservable&lt;String&gt; = colors.publish()\r\nsource.subscribe {\r\n   println(\"subscribe1:${it}\")\r\n}\r\nsource.subscribe {\r\n   println(\"subscribe2:${it}\")\r\n}\r\nsource.connect()\r\nThread.sleep(250)\r\nsource.subscribe {\r\n   println(\"subscribe3:${it}\")\r\n}\r\nThread.sleep(100)\r\n<\/pre>\n<p>\uacb0\uacfc :<br \/>\nsubscribe1:Red<br \/>\nsubscribe2:Red<br \/>\nsubscribe1:Green<br \/>\nsubscribe2:Green<br \/>\nsubscribe1:Blue<br \/>\nsubscribe2:Blue<br \/>\nsubscribe3:Blue<br \/>\n\u00a0<br \/>\n\uc704\uc758 interval()\ud568\uc218\ub294 100ms \ub2e8\uc704\ub85c \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\ub294\uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<br \/>\n\uadf8\ub7ec\ubbc0\ub85c connect() \ud55c \ub4a4 250ms\ub3d9\uc548 \uc4f0\ub808\ub4dc\ub97c \uc7ac\uc6b0\uba74 2\uac1c\uc758 \ub370\uc774\ud130\uac00 \ubc1c\ud589 \ub429\ub2c8\ub2e4.<br \/>\n3\ubc88\uc9f8 \ub370\uc774\ud130\uc778 Blue\uac00 \ubc1c\ud589\ub418\uae30\uc9c1\uc804(300ms\uc774\uc804)\uc5d0 \ub610 \ub2e4\uc2dc subscribe() \ud55c \ub4a4 100ms\ub3d9\uc548 \uc4f0\ub808\ub4dc\ub97c \ub610\ub2e4\uc2dc \uc7ac\uc6b4\ub2e4\uba74 3\ubc88\uc9f8 \uad6c\ub3c5\uc790\ub294 Blue\ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Reactive Programinng(Rx Java) Reactive Programing(1) &#8211; \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \uac1c\ub150\uc7a1\uae30 Reactive Programing(2) \u2013 Reactive Operator Reactive Programing(3) \u2013 Reactive Operator Reactive Programing(4) \u2013 Scheduler Reactive Programing(5) \u2013 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c\uc758 RxJava \ud65c\uc6a9 \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d\uc774\ub780? -&gt; \ub370\uc774\ud130\uc758 \ud750\ub984\uacfc \uc804\ub2ec\uc5d0 \uad00\ud55c \ud504\ub85c\uadf8\ub798\ubc0d \ud328\ub7ec\ub2e4\uc784 \u00a0 \uba85\ub839\ud615 \ud504\ub85c\uadf8\ub798\ubc0d vs \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \uba85\ub839\ud615 \ud504\ub85c\uadf8\ub798\ubc0d &#8211; \uc791\uc131\ub41c \ucf54\ub4dc\uac00 \uc815\ud574\uc9c4 [&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":[7],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/189"}],"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=189"}],"version-history":[{"count":4,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/189\/revisions"}],"predecessor-version":[{"id":30189,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/189\/revisions\/30189"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}