{"id":242,"date":"2018-04-19T14:40:53","date_gmt":"2018-04-19T05:40:53","guid":{"rendered":"http:\/\/www.charlezz.com\/?p=242"},"modified":"2019-12-21T18:53:10","modified_gmt":"2019-12-21T09:53:10","slug":"reactive-programing2-reactive-operator","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=242","title":{"rendered":"Reactive Programing(2) \u2013 Reactive Operator"},"content":{"rendered":"<h1><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\" \/><\/h1>\n<h1><\/h1>\n<hr \/>\n<p><a href=\"https:\/\/www.charlezz.com\/?p=189\">Reactive Programing(1) &#8211; \ub9ac\uc561\ud2f0\ube0c \ud504\ub85c\uadf8\ub798\ubc0d \uac1c\ub150\uc7a1\uae30<\/a><br \/>\nReactive Programing(2) \u2013 Reactive Operator<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<h1>Reactive Operators(\ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790)<\/h1>\n<h2>\ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790\uc758 \uc18c\uac1c<\/h2>\n<p>\ub9c1\ud06c :\u00a0<a href=\"http:\/\/reactivex.io\/documentation\/operators\">http:\/\/reactivex.io\/documentation\/operators<\/a><br \/>\n\ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790\ub294 \uc790\ubc14\uc758 \uad00\uc810\uc5d0\uc11c \ubcf4\uba74 \uba54\uc18c\ub4dc\uc774\uc9c0\ub9cc, \ud568\uc218\ud615 \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \uc6d0\ub9ac\uc5d0 \ub530\ub974\uba74 \ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790\ub294 Side Effect\uac00 \uc5c6\ub294 \uc21c\uc218 \ud568\uc218 \uc785\ub2c8\ub2e4. RxJava\uc5d0\uc11c\ub294 \ud568\uc218\ub77c\uace0\ub3c4 \ubd80\ub985\ub2c8\ub2e4.<br \/>\n\ud568\uc218\uc758 \uc885\ub958\ub294 400\uac1c\uac00 \ub118\uc2b5\ub2c8\ub2e4.<br \/>\n\ubaa8\ub4e0 \ud568\uc218\ub97c \ub2e4 \uc9da\uace0 \ub118\uc5b4\uac00\uae30\ub294 \ud798\uc774 \ub4e4\uace0 \uc758\ubbf8\uac00 \ubb34\uc5c7\uc778\uc9c0\ub9cc \uc54c\uba74 \uc27d\uac8c \uc774\ud574 \ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uac00\uc7a5 \ub9ce\uc774 \uc4f0\ub294 \ud568\uc218 \uc704\uc8fc\ub85c \uc124\uba85\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>1. map() \ud568\uc218<\/h3>\n<p>\n<a href=\"https:\/\/www.charlezz.com\/?attachment_id=43816\" rel=\"attachment wp-att-43816\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34-1024x354.png\" alt=\"\" width=\"750\" height=\"259\" class=\"aligncenter size-large wp-image-43816\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34-1024x354.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34-300x104.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34-768x265.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34.png 1702w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><br \/>\n\u00a0<br \/>\nmap \ud568\uc218\ub294 \uc785\ub825\ub41c \ub370\uc774\ud130\ub97c \ud568\uc218\uc5d0 \ub123\uc5b4\uc11c \uc6d0\ud558\ub294 \uac12\uc73c\ub85c \ubcc0\ud658\ud558\ub294 \ud568\uc218 \uc785\ub2c8\ub2e4. int\ub97c String \uc73c\ub85c \ubcc0\ud658 \ud560 \uc218\ub3c4 \uc788\uace0 \ub2e4\ub978 \uac1d\uccb4\ub85c \ubcc0\ud658\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n\uc704\uc758 \ub9c8\ube14 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc744 RxKotlin\uc73c\ub85c \ubcc0\ud658\ud558\uba74 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"\">val array = arrayOf(1, 2, 3)\r\narray.toObservable().map {\r\n   it * 10\r\n}.subscribe{\r\n   println(it)\r\n}<\/pre>\n<p>\uacb0\uacfc<br \/>\n10<br \/>\n20<br \/>\n30<br \/>\n1,2,3\uc774 \ub4e4\uc5b4\uc788\ub294 \ubc30\uc5f4\uc744 Observable\uac1d\uccb4\ub85c \ubcc0\ud658\ud558\uace0 map \uc5f0\uc0b0\uc790\ub97c \ud1b5\ud574 \uac01 \uac12\uc5d0 10\uc744 \uacf1\ud574\uc8fc\uace0 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<h3>2. flatMap() \ud568\uc218<\/h3>\n<p>map\ud568\uc218\ub97c \ubc1c\uc804\uc2dc\ud0a8 \ud615\ud0dc\ub85c \uacb0\uacfc\uac00 Observable\ub85c \ub098\uc628\ub2e4\ub294 \uac83\uc774 \ub2e4\ub985\ub2c8\ub2e4.<br \/>\n\uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 1:N \ud615\ud0dc\ub85c \ub370\uc774\ud130\uac00 \ub098\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-13.png\"><br \/>\n<img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-245\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-13.png\" alt=\"\" width=\"1280\" height=\"620\" \/><\/a><br \/>\n\u00a0<\/p>\n<pre class=\"\">val names = arrayOf(\"Charles\", \"Runa\", \"David\")\r\nval source = names.toObservable().flatMap { Observable.just(\"${it}1\", \"${it}2\") }\r\nsource.subscribe{\r\n   println(it)\r\n}<\/pre>\n<p>\uacb0\uacfc<br \/>\nCharles1<br \/>\nCharles2<br \/>\nRuna1<br \/>\nRuna2<br \/>\nDavid1<br \/>\nDavid2<br \/>\n\uac01 \uc0ac\ub78c\uc758 \uc774\ub984\uc744 \ubc1b\uc544 \ub450\uac1c\uc529 \ucd9c\ub825\ud558\ub294 \uc608\uc81c \uc785\ub2c8\ub2e4. \ud558\ub098\uc758 \ub370\uc774\ud130\ub97c Observable\ub9cc\ub4e4\uace0 \uac00\uacf5\ub41c \ub450\uac1c\uc758 \ub370\uc774\ud130\ub97c \ub2e4\uc2dc \ub123\ub294 \ubaa8\uc2b5\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\nRxJava\uc5d0\uc11c \uc5ec\ub7ec \uac1c\uc758 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\ub294 \ubc29\ubc95\uc740 Observable\ubc16\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<h3>3. filter<\/h3>\n<p>\ud544\ud130\ub77c\ub294 \ub9d0\uadf8\ub300\ub85c Observable\uc5d0\uc11c \uc6d0\ud558\ub294 \ub370\uc774\ud130\ub9cc \uac78\ub7ec\ub0b4\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/\uc2a4\ud06c\ub9b0\uc0f7-2018-04-17-\uc624\ud6c4-4.39.08.png\"><\/a><a href=\"https:\/\/www.charlezz.com\/?attachment_id=43817\" rel=\"attachment wp-att-43817\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34-1-1024x354.png\" alt=\"\" width=\"750\" height=\"259\" class=\"aligncenter size-large wp-image-43817\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34-1-1024x354.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34-1-300x104.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34-1-768x265.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.51.34-1.png 1702w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>\u00a0<\/p>\n<pre class=\"\">val originalData = Observable.just(2, 30, 22, 5, 60, 1)\r\nval filteredData = originalData.filter { x -&gt;\r\n   return@filter x &gt; 10\r\n}\r\nfilteredData.subscribe {\r\n   println(it)\r\n}<\/pre>\n<p>\uacb0\uacfc<br \/>\n30<br \/>\n22<br \/>\n60<br \/>\nfilter \ub77c\ub294 \ud568\uc218\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ub97c \uac78\ub7ec\uc90d\ub2c8\ub2e4. filter\uc5d0 \ub4e4\uc5b4\uac08 \uc778\uc790\uac12\uc774 Predicate\uc778\ub370 boolean\uc744 \ub9ac\ud134\ud558\ub294 \ud2b9\uc218\ud55c \ud568\uc218\ud615 \uc778\ud130\ud398\uc774\uc2a4\uc785\ub2c8\ub2e4.\u00a0\ubc18\ud658\uac12\uc774 false\uba74 \uac78\ub7ec\uc9c0\uace0 true\uba74 \uadf8\ub300\ub85c \ud1b5\uacfc \ud569\ub2c8\ub2e4.<br \/>\n\ud544\ud130\uc640 \ube44\uc2b7\ud55c \uae30\ub2a5\uc744 \ud558\ub294 \ud568\uc218\ub4e4<\/p>\n<ul>\n<li>first(\uae30\ubcf8\uac12) : \uccab\ubc88\uc9f8\uac12\uc744 \uac78\ub7ec\uc90c, \uc5c6\uc73c\uba74 \uae30\ubcf8\uac12<\/li>\n<li>last(\uae30\ubcf8\uac12) : \ub9c8\uc9c0\ub9c9\uac12\uc744 \uac78\ub7ec\uc90c, \uc5c6\uc73c\uba74 \uae30\ubcf8\uac12<\/li>\n<li>take(N) : N\uac1c\uc758 \uac12\ub9cc\ud07c \uac78\ub7ec\uc90c<\/li>\n<li>takeLast(N) : \ub9c8\uc9c0\ub9c9\uc73c\ub85c\ubd80\ud130 N\uac1c \uac78\ub7ec\uc90c<\/li>\n<li>skip(N) : N\uac1c\ub9cc\ud07c \uac74\ub108\ub6f0\uace0 \uac78\ub7ec\uc90c<\/li>\n<li>skipLast(N) : \ub9c8\uc9c0\ub9c9\uc73c\ub85c\ubd80\ud130 N\uac1c\ub9cc\ud07c \uac12\uc744 \uac74\ub108\ub6f0\uace0 \uac78\ub7ec\uc90c<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>4. reduce \ud568\uc218<\/h3>\n<p><a href=\"https:\/\/www.charlezz.com\/?attachment_id=43819\" rel=\"attachment wp-att-43819\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.52.39-1024x346.png\" alt=\"\" width=\"750\" height=\"253\" class=\"aligncenter size-large wp-image-43819\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.52.39-1024x346.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.52.39-300x101.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.52.39-768x259.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/charles-2019-12-21-\uc624\ud6c4-6.52.39.png 1670w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>reduce\ub294 \ubc1c\ud589\ud55c \ub370\uc774\ud130\ub97c \ud569\uce60\ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<br \/>\n(\uc800\ub294 \ucc98\uc74c\uc5d0 reduce\ub77c\ub294 \ud568\uc218\uba85\uc744 \ubcf4\uace0 \ub370\uc774\ud130\ub97c \ube7c\ub294 \uac78 \uc0c1\uc0c1\ud588\ub294\ub370 \uc544\ub2c8\uc600\uc2b5\ub2c8\ub2e4.)<br \/>\nBiFunction&lt;T,T,T&gt;\uc744 \uc778\uc790\ub85c \uac00\uc9c0\uba70 \ud568\uc218\uc758 \uc778\uc790\uc640 \ub9ac\ud134\ud0c0\uc785\uc774 \ubaa8\ub450 \uac19\uc544\uc57c\ud569\ub2c8\ub2e4.<br \/>\n\ub9c8\ucc2c\uac00\uc9c0\ub85c \ub78c\ub2e4\uc2dd\uc73c\ub85c \ud45c\ud604\uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"\">Observable.just(\"A\", \"B\", \"C\").reduce { t1: String, t2: String -&gt;\r\n   t1+t2\r\n}.subscribe {\r\n   println(it)\r\n}<\/pre>\n<p>\uacb0\uacfc :<br \/>\nABC<br \/>\n\ucc98\ub9ac \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<br \/>\n0\ubc88\uc9f8 \uc0ac\uc774\ud074 : t1 = A, t2 = B. \u00a0 \u00a0 t1\uacfc t2 \ubb38\uc790\uc5f4\uc744 \ud569\ucce4\uc73c\ubbc0\ub85c \ub2e4\uc74c. \u00a0t1\uc740 AB\uac00 \ub420\uac83\uc785\ub2c8\ub2e4.<br \/>\n1\ubc88\uc9f8 \uc0ac\uc774\ud074 : t1 = AB, t2 = C. \u00a0 AB\uc640 C \ubb38\uc790\uc5f4\uc744 \ud569\uce58\ubbc0\ub85c ABC\ub97c \ucd5c\uc885\uc801\uc73c\ub85c \ub9ac\ud134\ud569\ub2c8\ub2e4.<br \/>\n\u00a0<br \/>\n\ub4e4\uc5b4\uc624\ub294 \ub370\uc774\ud130\ub97c 1\uac1c\uc529 \ubaa8\uc544\ubaa8\uc544 \ucd5c\uc885\uacb0\uacfc\ub97c \ub9cc\ub4e4\uc5b4\uc57c\ud560 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<h2>\ub370\uc774\ud130 \ucffc\ub9ac \uc608\uc81c<\/h2>\n<p>\uc9c0\uae08\uae4c\uc9c0 \ubc30\uc6b4 \ub0b4\uc6a9\uc73c\ub85c \ub370\uc774\ud130\ub97c \ucffc\ub9ac\ud558\ub294 \uc608\uc81c\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4.<br \/>\n\uc81c\uc870\uc0ac\ubcc4 \ud734\ub300\ud3f0 \ubaa8\ub378\uc5d0 \ub530\ub978 \ub9e4\ucd9c\uaddc\ubaa8 \ub9ac\uc2a4\ud2b8\uc5d0\uc11c<br \/>\n\ud2b9\uc815 \ud734\ub300\ud3f0 \ub9e4\ucd9c\uc744 \ud569\uc0b0\ud558\ub294 \uc608\uc2dc \uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"\">val sales = ArrayList&lt;Pair&lt;String, Int&gt;&gt;().apply {\r\n   add(Pair(\"Galaxy Note8\", 2500))\r\n   add(Pair(\"G7\", 2500))\r\n   add(Pair(\"Galaxy S9\", 1600))\r\n   add(Pair(\"iPhone X\", 800))\r\n}\/\/\ubaa8\ub378\ubcc4 \ub9e4\ucd9c \ub9ac\uc2a4\ud2b8\r\nval galaxySales = Observable.fromIterable(sales) \/\/ \ub9ac\uc2a4\ud2b8\ub97c \uc635\uc800\ubc84\ube14\ub85c \ubcc0\ud658\r\n      .filter { t: Pair&lt;String, Int&gt; -&gt;.       \/\/Galaxy\ubaa8\ub378\ub9cc \ud544\ud130\ub9c1. Note8, S9\r\n         t.first.contains(\"Galaxy\", true)\r\n      }\r\n      .map { t -&gt;\r\n         t.second \/\/\ud544\ud130\ub9c1 \ub41c Pair\uac1d\uccb4\ub97c \ub9e4\ucd9c\ub85c \ubcc0\ud658\r\n      }\r\n      .reduce { t1: Int, t2: Int -&gt;\r\n         t1 + t2 \/\/ \ubaa8\ub4e0 \ub9e4\ucd9c\uaddc\ubaa8\ub97c \ud569\uc0b0\r\n      }\r\ngalaxySales.subscribe {\r\n   println(\"total=${it}\")\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\ntotal = 4100<br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<h2>\ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790\uc758 \ubd84\ub958<\/h2>\n<table id=\"tablepress-4\" class=\"tablepress tablepress-id-4\">\n<thead>\n<tr class=\"row-1 odd\">\n<th class=\"column-1\">\uc2a4\ucf00\uc974\ub7ec<\/th>\n<th class=\"column-2\">\uc124\uba85<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-hover\">\n<tr class=\"row-2 even\">\n<td class=\"column-1\">newThread()<\/td>\n<td class=\"column-2\">\uc0c8\ub85c\uc6b4 \uc2a4\ub808\ub4dc \uc0dd\uc131<\/td>\n<\/tr>\n<tr class=\"row-3 odd\">\n<td class=\"column-1\">single()<\/td>\n<td class=\"column-2\">\ub2e8\uc77c \uc2a4\ub808\ub4dc \uc0dd\uc131 \ud6c4 \uc0ac\uc6a9<\/td>\n<\/tr>\n<tr class=\"row-4 even\">\n<td class=\"column-1\">computation()<\/td>\n<td class=\"column-2\">\uacc4\uc0b0\uc6a9 \uc2a4\ub808\ub4dc<\/td>\n<\/tr>\n<tr class=\"row-5 odd\">\n<td class=\"column-1\">io()<\/td>\n<td class=\"column-2\">\ub124\ud2b8\uc6cc\ud06c, \ud30c\uc77c \uc785\ucd9c\ub825 \uc2a4\ub808\ub4dc<\/td>\n<\/tr>\n<tr class=\"row-6 even\">\n<td class=\"column-1\">trampoline()<\/td>\n<td class=\"column-2\">\ud604\uc81c \uc2a4\ub808\ub4dc\uc5d0 \ub300\uae30\ud589\ub82c \uc0dd\uc131<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><!-- #tablepress-4 from cache --><br \/>\n\u00a0<\/p>\n<h2>\ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790\uc758 \ud65c\uc6a9<\/h2>\n<h3>\uc0dd\uc131 \uc5f0\uc0b0\uc790<\/h3>\n<p>\uc0dd\uc131 \uc5f0\uc0b0\uc790\ub294 \ub370\uc774\ud130 \ud750\ub984\uc744 \ub9cc\ub4e4\uba70, \uac04\ub2e8\ud558\uac8c \ub9d0\ud574\uc11c Observable\uac1d\uccb4 \ub4f1\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<h4>1.interval() \ud568\uc218<\/h4>\n<p>interval()\uc740 \uc77c\uc815\ud55c \uac04\uaca9\uc744 \uac00\uc9c0\uace0 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\uac70\ub098 \ucd08\uae30 \uc9c0\uc5f0\uac12\uc744 \uac00\uc9c0\uace0 \uc77c\uc815\ud55c \uac04\uaca9\uc73c\ub85c \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud560 \ub54c \uc4f0\uc785\ub2c8\ub2e4. 0\ubd80\ud130 \uc8fc\uc5b4\uc9c4 \uc2dc\uac04 \uac04\uaca9\uc744 \uac00\uc9c0\uace0 1\uc529 \uc99d\uac00\ud569\ub2c8\ub2e4.<br \/>\nComputationScheduler\uc5d0\uc11c \uc2e4\ud589\ub429\ub2c8\ub2e4. \ubcc4\ub3c4\uc758 \uc2a4\ub808\ub4dc\uc5d0\uc11c \ub3d9\uc791\ud55c\ub2e4\uace0 \uc0dd\uac01\ud558\uba74 \ub429\ub2c8\ub2e4.<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-14.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-252\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-14.png\" alt=\"\" width=\"1280\" height=\"390\" \/><\/a><br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<pre class=\"\">Observable.interval(100,TimeUnit.MILLISECONDS).subscribe {\r\n   println(it)\r\n}\r\nThread.sleep(1000)<\/pre>\n<p>\uacb0\uacfc:<br \/>\n1<br \/>\n2<br \/>\n..<br \/>\n8<br \/>\n9<\/p>\n<h4>2. timer() \ud568\uc218<\/h4>\n<p>\uc77c\uc815 \uc2dc\uac04 \uc9c0\ub09c\ud6c4 \ud55c\uac1c\uc758 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\uace0 \ub05d\ub0a9\ub2c8\ub2e4. timer\ub3c4 Computation Scheduler\uc5d0\uc11c \ub3d9\uc791\ud569\ub2c8\ub2e4.<br \/>\n\u00a0<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-15.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-253\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-15.png\" alt=\"\" width=\"1280\" height=\"400\" \/><\/a><\/p>\n<pre class=\"\">println(System.currentTimeMillis())\r\nObservable.timer(1000, TimeUnit.MILLISECONDS)\r\n      .subscribe {\r\n         println(System.currentTimeMillis())\r\n      }\r\nThread.sleep(2000)<\/pre>\n<p>\uacb0\uacfc:<br \/>\n1524019410453<br \/>\n1524019411530<br \/>\n\u00a0<\/p>\n<h3>3. range() \ud568\uc218<\/h3>\n<p>2\uac1c( n, m)\uc758 \uc778\uc790\ub85c \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uace0, n\ubd80\ud130 m\uac1c\uae4c\uc9c0 1\uc529 \uc21c\ucc28\uc801\uc73c\ub85c \uc99d\uac00\ud558\ub294 Integer\ub97c \ubc1c\ud589\ud569\ub2c8\ub2e4. \ubcc4\ub3c4\uc758 Scheduler\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ubbc0\ub85c for,while \uac19\uc740\u00a0\ubc18\ubcf5\ubb38\uc744 \ub300\uccb4 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-16.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-254\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-16.png\" alt=\"\" width=\"1280\" height=\"390\" \/><\/a><\/p>\n<pre class=\"\">@Test fun rangeTest(){\r\n   Observable.range(5,5).subscribe {\r\n      println(it)\r\n   }\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<br \/>\n\u00a0<\/p>\n<h4>4. intervalRange() \ud568\uc218<\/h4>\n<p>interval\uacfc range\ub97c \ud569\uce5c \ud568\uc218. Computation Scheduler\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-17.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-255\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-17.png\" alt=\"\" width=\"1280\" height=\"390\" \/><\/a><\/p>\n<pre class=\"\">Observable.intervalRange(5,5,0,100, TimeUnit.MILLISECONDS)\r\n      .subscribe {\r\n         println(it)\r\n      }\r\nThread.sleep(1000)<\/pre>\n<p>\uacb0\uacfc:<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<br \/>\n\u00a0<br \/>\n\uc778\uc790\uac12\uc744 \uc0b4\ud3b4\ubcf4\uc790\uba74<br \/>\n\uccab\ubc88\uc9f8 \uc778\uc790 : \u00a0\uc2dc\uc791\uac12(n)<br \/>\n\ub450\ubc88\uc9f8 \uc778\uc790 : \u00a0\uce74\uc6b4\ud2b8(m)<br \/>\n\uc138\ubc88\uc9f8 \uc778\uc790 : \ucd08\uae30 \uc9c0\uc5f0 \uac12<br \/>\n\ub124\ubc88\uc9f8 \uc778\uc790 : \uc2e4\ud589\uc8fc\uae30<br \/>\n\ub2e4\uc12f\ubc88\uc9f8 \uc778\uc790 : \uc2dc\uac04 \ub2e8\uc704<br \/>\n100ms\ub9c8\ub2e4 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.\u00a0\uce74\uc6b4\ud2b8\uac00 5\uc774\ubbc0\ub85c , 100ms * 5 =500ms = 0.5\ucd08\ub9cc \uc2e4\ud589\ub418\uc5b4\uc9d1\ub2c8\ub2e4.<br \/>\ninterval()\ud568\uc218\ub85c intervalRange\ub97c \ub9cc\ub4e4\uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"\">Observable.interval(100, TimeUnit.MILLISECONDS)\r\n      .map {\r\n         it + 5\r\n      }\r\n      .take(5)\r\n      .subscribe{\r\n         println(it)\r\n      }\r\nThread.sleep(1000)<\/pre>\n<p>\uacb0\uacfc\ub294 \uac19\uc2b5\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<h4>5. defer()\ud568\uc218<\/h4>\n<p>Observable\uc744 subscribe \ud560 \ub54c \uc0dd\uc131\ud558\ub294 \uc5f0\uc0b0\uc790 \uc785\ub2c8\ub2e4.<br \/>\n\ub2e4\uc2dc \ub9d0\ud558\uc790\uba74 Observable\uc758 \uc0dd\uc131 \uc790\uccb4\ub97c \uc9c0\uc5f0\uc2dc\ud0a4\uae30 \ub54c\ubb38\uc5d0 \ub370\uc774\ud130\uc758 \ud750\ub984\uc744 \uad6c\ub3c5\uc790\uac00 subscribe()\ud568\uc218\ub97c \ud638\ucd9c\ud558\uae30\uc804\uae4c\uc9c0 \ubbf8\ub8f0\uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-18.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-256\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-18.png\" alt=\"\" width=\"1280\" height=\"680\" \/><\/a><br \/>\n\u00a0<\/p>\n<pre class=\"\">val colors = arrayListOf(\"Red\", \"Green\", \"Blue\").iterator()\r\nval supplier = Callable {\r\n   if (colors.hasNext()) {\r\n      val color = colors.next()\r\n      Observable.just(\r\n            \"$color Circle\",\r\n            \"$color Rectangle\",\r\n            \"$color Pentagon\")\r\n   } else {\r\n      Observable.empty()\r\n   }\r\n}\r\nval source = Observable.defer(supplier)\r\nsource.subscribe {\r\n   println(\"#1:$it\")\r\n}\r\nsource.subscribe {\r\n   println(\"#2:$it\")\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\n#1:Red Circle<br \/>\n#1:Red Rectangle<br \/>\n#1:Red Pentagon<br \/>\n#2:Green Circle<br \/>\n#2:Green Rectangle<br \/>\n#2:Green Pentagon<br \/>\n\u00a0<br \/>\ncolors\ub294 \ub3c4\ud615\uc758 \uc0c9\uc0c1\uc744 \ub2f4\uc740 \ub9ac\uc2a4\ud2b8\uc774\uba70 \ubcc4\ub3c4\uc758 \uc778\ub371\uc2a4 \uc5c6\uc774 \ub370\uc774\ud130\ub97c \uc21c\ucc28\uc801\uc73c\ub85c \uc811\uadfc\ud558\uae30\uc704\ud574 iterator()\ub97c \uc37c\uc2b5\ub2c8\ub2e4. Callable\uac1d\uccb4\ub97c \ub9cc\ub4e4\ub54c\ub294 colors\uc5d0 \uc811\uadfc\ud574 \ud604\uc7ac \uc0c9\uc0c1\uc744 \uac00\uc838\uc640\uc11c \ub3c4\ud615 3\uac1c\ub97c \uac16\ub294 Observable\uc744 \ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ud558\ub3c4\ub85d \ud588\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ub9cc\ub4e4\uc5b4\uc9c4 Callabler\uac1d\uccb4\ub97c defer\uc5d0 \ub123\uace0 \uad6c\ub3c5\uc790\ub97c \ucd94\uac00\ud558\uba74 \uad6c\ub3c5\uc790\ub97c \ucd94\uac00\ud560\ub54c Observable\uc744 \ub9cc\ub4e4\uc5b4\uc11c \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\uac8c \ub418\ubbc0\ub85c \uc0c9\uae54\ubcc4\ub85c \uadf8\ub9ac\uace0 \uc21c\ucc28\uc801\uc73c\ub85c \ub3c4\ud615\uc744 \ub9cc\ub4e4\uc5b4 \ubc1c\ud589\ud558\uac8c \ub429\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<h4>6. Repeat() \ud568\uc218<\/h4>\n<p>\ub2e8\uc21c\ud788 \ubc18\ubcf5\uc2e4\ud589 \ud558\ub294 \uc785\ub2c8\ub2e4. \ubc18\ubcf5\ud560 \ud69f\uc218\ub97c \uc815\ud560\uc218\ub3c4 \uc788\uace0 \uc815\ud558\uc9c0 \uc54a\uc73c\uba74 \ubb34\ud55c\ud788 \uc2e4\ud589\ub429\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-19.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-257\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-19.png\" alt=\"\" width=\"1280\" height=\"618\" \/><\/a><br \/>\n\u00a0<\/p>\n<pre class=\"\">Observable.just(\"Red\", \"Blue\", \"Green\")\r\n      .repeat(3)\r\n      .subscribe({ next -&gt;\r\n         println(next)\r\n      }, { error -&gt;\r\n         println(error)\r\n      }, {\r\n         println(\"finished\")\r\n      })<\/pre>\n<p>\uacb0\uacfc:<br \/>\nRed<br \/>\nBlue<br \/>\nGreen<br \/>\nRed<br \/>\nBlue<br \/>\nGreen<br \/>\nRed<br \/>\nBlue<br \/>\nGreen<br \/>\nfinished<br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<h3>\ubcc0\ud658 \uc5f0\uc0b0\uc790<\/h3>\n<h4>1. concatMap() \ud568\uc218<\/h4>\n<p>flatMap\uacfc \ube44\uc2b7\ud558\uc9c0\ub9cc concatMap\uc758 \ub2e4\ub978\uc810\uc740 \uba3c\uc800 \ub4e4\uc5b4\uc628 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\ub294 \ub3c4\uc911\uc5d0 \uc0c8\ub85c\uc6b4 \ub370\uc774\ud130\uac00 \ub07c\uc5b4\ub4e4\uc5b4\ub3c4 \uba3c\uc800 \ub4e4\uc5b4\uc628 \ub370\uc774\ud130 \uc21c\uc11c\ub300\ub85c \ucc98\ub9ac\ud574\uc11c \uacb0\uacfc\ub97c \ub0bc \uc218 \uc788\ub3c4\ub85d \ubcf4\uc7a5\ud574\uc8fc\ub294 \ud568\uc218 \uc785\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-20.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-258\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-20.png\" alt=\"\" width=\"1280\" height=\"610\" \/><\/a><br \/>\n\u00a0<br \/>\n\u00a0<br \/>\n\u00a0<\/p>\n<ul>\n<li>concatMap\uc744 \ud65c\uc6a9\ud588\uc744\ub54c<\/li>\n<\/ul>\n<pre class=\"\">Observable.interval(100L, TimeUnit.MILLISECONDS)\r\n      .map {\r\n         it.toInt()\r\n      }\r\n      .map {\r\n         colors[it]\r\n      }\r\n      .take(colors.size.toLong())\r\n      .<strong>concatMap<\/strong> { color -&gt;\r\n         Observable.interval(200L, TimeUnit.MILLISECONDS)\r\n               .map { \"${color} Diamond\" }\r\n               .take(2)\r\n      }\r\n      .subscribe {\r\n         println(it)\r\n      }\r\nThread.sleep(2000)<\/pre>\n<p>\uacb0\uacfc:<br \/>\nRed Diamond<br \/>\nRed Diamond<br \/>\nBlue Diamond<br \/>\nBlue Diamond<br \/>\nGreen Diamond<br \/>\nGreen Diamond<br \/>\n\u00a0<\/p>\n<ul>\n<li>flatMap\uc744 \ud65c\uc6a9\ud588\uc744 \ub54c<\/li>\n<\/ul>\n<pre class=\"\">Observable.interval(100L, TimeUnit.MILLISECONDS)\r\n      .map {\r\n         it.toInt()\r\n      }\r\n      .map {\r\n         colors[it]\r\n      }\r\n      .take(colors.size.toLong())\r\n      .<strong>flatMap<\/strong> { color -&gt;\r\n         Observable.interval(200L, TimeUnit.MILLISECONDS)\r\n               .map {\r\n                  \"${color} Diamond\"\r\n               }\r\n               .take(2)\r\n      }\r\n      .subscribe {\r\n         println(it)\r\n      }\r\nThread.sleep(2000)<\/pre>\n<p>\uacb0\uacfc :<br \/>\nRed Diamond<br \/>\nBlue Diamond<br \/>\nGreen Diamond<br \/>\nRed Diamond<br \/>\nBlue Diamond<br \/>\nGreen Diamond<br \/>\n\u00a0<br \/>\n\ub450 \uc0d8\ud50c \ucf54\ub4dc\uc5d0\uc11c \ub2e4\ub978\uc810\uc740 flatMap\uc744 \uc4f0\ub290\ub0d0 concatMap\uc744 \uc4f0\ub290\ub0d0\uc785\ub2c8\ub2e4.<br \/>\nconcatMap\uc740 \uc55e\uc11c \ub9d0\ud588\ub4ef\uc774 \uc21c\uc11c\ub97c \ubcf4\uc7a5\ud558\uc9c0\ub9cc flatMap\uc740 \ub4a4\uc8fd\ubc15\uc8fd \uc11e\uc774\uace0 \uc788\uc2b5\ub2c8\ub2e4. interleaving(\ub07c\uc5b4\ub4e4\uae30)\ub97c \ud5c8\uc6a9\ud558\uace0 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<br \/>\n\uc704\uc758 \ucf54\ub4dc\uc5d0\uc11c concatMap\uc758 \uacbd\uc6b0\uc5d0\ub294 interleaving\uc744 \ud5c8\uc6a9\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 200ms\uc529 \ucda9\ubd84\ud788 \uae30\ub2e4\ub9ac\uba74\uc11c \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\uae30\ub54c\ubb38\uc5d0 flatMap\ubcf4\ub2e4 \uc2e4\ud589\uc2dc\uac04\uc774 \ub354 \uae41\ub2c8\ub2e4.<br \/>\nflatMap\uc758 \uacbd\uc6b0\uc5d0\ub294 interleaving\uc744 \ud5c8\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 200ms\uae30\ub2e4\ub9ac\ub294 \ub3c4\uc911 100ms \uac04\uaca9\uc73c\ub85c \uc0c8\ub85c\uc6b4 \ub370\uc774\ud130\uac00 \ub07c\uc5b4\ub4e4\uc5b4 \uc21c\uc11c\uac00 \ub4a4\uc8fd\ubc15\uc8fd \ub418\uc9c0\ub9cc \ucd1d\uc2e4\ud589\uc2dc\uac04\uc740 concatMap\ubcf4\ub2e4 \uc9e7\uc2b5\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<h4>2. switchMap() \ud568\uc218<\/h4>\n<p>concatMap \ud568\uc218\uac00 \uc778\ud130\ub9ac\ube59\uc774 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \uc0c1\ud669\uc5d0\uc11c\ub3c4 \ub3d9\uc791 \uc21c\uc11c\ub97c \ubcf4\uc7a5\ud574\uc8fc\ub294 \ubc18\uba74<br \/>\nswitchMap\uc740 \ud568\uc218\uc758 \uc21c\uc11c\ub97c \ubcf4\uc7a5\ud558\uae30 \uc704\ud574\uc11c \uae30\uc874\uc791\uc5c5\uc744 \ubc14\ub85c \uc911\ub2e8\ud569\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-21.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-259\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-21.png\" alt=\"\" width=\"1280\" height=\"700\" \/><\/a><\/p>\n<ul>\n<li>\uc704\uc758 contcatMap \uc0d8\ud50c\ucf54\ub4dc\uc640 \ube44\uad50\ud588\uc744 \ub54c\uc758 switchMap<\/li>\n<\/ul>\n<pre class=\"\">val colors = listOf(\"Red\", \"Blue\", \"Green\")\r\nObservable.interval(100L, TimeUnit.MILLISECONDS)\r\n      .map {\r\n         it.toInt()\r\n      }\r\n      .map {\r\n         colors[it]\r\n      }\r\n      .take(colors.size.toLong())\r\n      .<strong>switchMap<\/strong> { color -&gt;\r\n         Observable.interval(200L, TimeUnit.MILLISECONDS)\r\n               .map {\r\n                  \"${color} Diamond\"\r\n               }\r\n               .take(2)\r\n      }\r\n      .subscribe {\r\n         println(it)\r\n      }\r\nThread.sleep(2000)<\/pre>\n<p>\uacb0\uacfc:<br \/>\nGreen Diamond<br \/>\nGreen Diamond<br \/>\n\u00a0<br \/>\n\uccab Observable\uc5d0\uc11c Red\uac00 \ubc1c\ud589\ub418\uace0 switchMap\ub0b4\ubd80\uc758 Observable\uc5d0\uc11c Diamond\ub85c \ubcc0\ud558\uae30\uae4c\uc9c0\ub294 200ms \uac00 \uac78\ub9b0\ub2e4. \uadfc\ub370 \uc5ec\uae30\uc11c \ub2e4\uc2dc Blue\uac00 100ms \uc774\ub0b4\uc5d0 \ubc1c\ud589\ub418\ubbc0\ub85c Red\uac00 Diamond\ub85c \ubcc0\ud558\uae30\ub3c4 \uc804\uc5d0 Blue\ub370\uc774\ud130\uac00 \ubc1c\ud589\ub418\ub294 \uc148\uc774\ub2e4. \uadf8\ub7ec\uba74 Red\ub294 \ubb34\uc2dc\ub418\uace0 \ub2e4\uc2dc Blue\uc5d0\ub300\ud55c \uc218\ud589\ub9cc \ucc98\ub9ac\ud55c\ub2e4. \ud558\uc9c0\ub9cc Green\uc774 100ms \uc788\ub2e4\uac00 \ub610 \ubc1c\ud589\ub418\uba74\uc11c Blue\ub3c4 \ubb34\uc2dc\uac00 \ub418\uace0 \uadf8\ub9b0\ub9cc \ub2e4\uc774\uc544\ubaac\ub4dc\ub85c \ubcc0\ud55c\ub2e4.<br \/>\n\uc774\ucc98\ub7fc \uae30\uc874\uc791\uc5c5\uc744 \uc911\ub2e8\ud558\ub354\ub77c\ub3c4 \ub9c8\uc9c0\ub9c9 \ub370\uc774\ud130\uc758 \ucc98\ub9ac\ub294 \ubcf4\uc7a5\ud558\ub294\uac83\uc774 switchMap\uc758 \ud2b9\uc9d5\uc774\ub2e4.<br \/>\n\uc608\uc81c\ucf54\ub4dc\ub97c \ud558\ub098 \ub354 \ubcf4\ub3c4\ub85d \ud558\uc790.<\/p>\n<ul>\n<li>switchMap\uc758 \ub9c8\ube14 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc744 \ucf54\ub4dc\ub85c \ud588\uc744 \ub54c<\/li>\n<\/ul>\n<pre class=\"\">Observable.create&lt;String&gt; { e -&gt;\r\n   e.onNext(\"Red\")\r\n   Thread.sleep(250)\r\n   e.onNext(\"Green\")\r\n   Thread.sleep(50)\r\n   e.onNext(\"Blue\")\r\n}.switchMap { color -&gt;\r\n   Observable.interval(0L,100L, TimeUnit.MILLISECONDS)\r\n         .map {\r\n            when (it) {\r\n               0L -&gt; return@map \"$color &lt;&gt;\" \/\/\ub2e4\uc774\uc544\ubaac\ub4dc \ubc1c\ud589\r\n               1L -&gt; return@map \"$color []\" \/\/\uc0ac\uac01\ud615 \ubc1c\ud589\r\n               else -&gt; return@map null\r\n            }\r\n         }\r\n         .take(2)\r\n}.subscribe {\r\n   println(it)\r\n}\r\nThread.sleep(2000)<\/pre>\n<p>\uacb0\uacfc<br \/>\nRed &lt;&gt;<br \/>\nRed []<br \/>\nGreen &lt;&gt;<br \/>\nBlue &lt;&gt;<br \/>\nBlue []<br \/>\n\u00a0<br \/>\n\uba3c\uc800 \ub370\uc774\ud130\uc758 \ud750\ub984\uc744 \uc9c1\uc811 \ucee8\ud2b8\ub864 \ud558\uae30 \uc704\ud574 create\uba54\uc18c\ub4dc\ub97c \uc37c\uc2b5\ub2c8\ub2e4.<br \/>\nRed\ub97c \ubc1c\ud589\ud558\uace0 250ms \ub97c \uc27d\ub2c8\ub2e4. \uadf8\ub7ec\ub294\ub3d9\uc548 switchMap\ub0b4\ubd80\uc758 Observable\uc5d0\uc11c\ub294 \ucd08\uae30\uac12 0ms , \uc778\ud130\ubc8c 100ms \ub97c \uac00\uc9c0\uace0 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. 2\uac1c\ub9cc \ubc1c\ud589\ud558\ubbc0\ub85c \uc57d 100ms\uc815\ub3c4 \uc18c\uc694 \ub418\uba70 250ms \ub0b4\uc5d0 \ub370\uc774\ud130 \ubc1c\ud589\uc774 \ub05d\ub0a0\uac83\uc785\ub2c8\ub2e4. \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 Red\uc758 \uacbd\uc6b0 \ub2e4\uc774\uc544\ubaac\ub4dc, \uc0ac\uac01\ud615\uc774 \ubaa8\ub450 \ubc1c\ud589\ub429\ub2c8\ub2e4.<br \/>\n\ub4a4\uc774\uc5b4 250ms\uac00 \uc9c0\ub098\uace0 Green\uc774 \ubc1c\ud589\ub429\ub2c8\ub2e4.<br \/>\n\ubc14\ub85c Green \ub2e4\uc774\uc544\ubaac\ub4dc\ub97c \ubc1c\ud589\ud558\uace0 \ub2e4\uc74c Green \uc0ac\uac01\ud615\uc744 \ubc1c\ud589\ud558\ub824\uace0 \ud558\ub098 50ms \ub4a4\uc5d0 Blue\uac00 \ubc1c\ud589\ub418\ubbc0\ub85c Green \uc0ac\uac01\ud615\uc740 \ubb34\uc2dc\ub418\uc5b4\uc9d1\ub2c8\ub2e4.<br \/>\nBlue\ub294 \uc815\uc0c1\uc801\uc73c\ub85c \ub2e4\uc774\uc544\ubaac\ub4dc\uc640 \uc0ac\uac01\ud615\uc774 \ubc1c\ud589\ub429\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<h4>3. groupBy() \ud568\uc218<\/h4>\n<p>groupBy\ud568\uc218\ub97c \uc4f0\uba74 \ub370\uc774\ud130\uac00 \ub4e4\uc5b4\uc788\ub294 Observable\uac1d\uccb4\ub97c \ud2b9\uc815 \uadf8\ub8f9Observable\ub85c \uc7ac\uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n\ubc1c\ud589\ub41c GroupObservable\uc744 \uc774\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ub97c \uadf8\ub8f9\ubcc4\ub85c \ucc98\ub9ac \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h4><a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-22.png\"><br \/>\n<img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-261 alignleft\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-22.png\" alt=\"\" width=\"1280\" height=\"720\" \/><\/a><\/h4>\n<p>&nbsp;<\/p>\n<h4><\/h4>\n<h4><\/h4>\n<h4><\/h4>\n<h4><\/h4>\n<h4><\/h4>\n<h4><\/h4>\n<h4><\/h4>\n<h4><\/h4>\n<h4><\/h4>\n<h4><\/h4>\n<ul>\n<li>groupBy \ub9c8\ube14\ub2e4\uc774\uc5b4\uadf8\ub7a8\uc744 \ucf54\ub4dc\ub85c \uc62e\uae30\uba74<\/li>\n<\/ul>\n<pre class=\"\">val list = listOf(\r\n      \"Circle Pink\",\r\n      \"Circle Cyan\",\r\n      \"Triangle Yellow\",\r\n      \"Circle Yellow\",\r\n      \"Triangle Pink\",\r\n      \"Triangle Cyan\"\r\n)\r\nval source = list.toObservable().groupBy {\r\n   if (it.contains(\"Circle\")) {\r\n      \"C\"\r\n   } else if (it.contains(\"Triangle\")) {\r\n      \"T\"\r\n   } else {\r\n      \"None\"\r\n   }\r\n}\r\nsource.subscribe { group: GroupedObservable&lt;String, String&gt;? -&gt;\r\n   group?.subscribe {\r\n      println(\"${group.key}:$it\")\r\n   }\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\nC:Circle Pink<br \/>\nC:Circle Cyan<br \/>\nT:Triangle Yellow<br \/>\nC:Circle Yellow<br \/>\nT:Triangle Pink<br \/>\nT:Triangle Cyan<br \/>\n\u00a0<br \/>\n\ub3c4\ud615 \ub9ac\uc2a4\ud2b8\ub97c Observable\ub85c \ub9cc\ub4ed\ub2c8\ub2e4. groupBy\ud568\uc218\ub97c \ud1b5\ud574 \uc5b4\ub5bb\uac8c \uadf8\ub8f9\uc744 \uc9c0\uc744\uac74\uc9c0 \uacb0\uc815\ud569\ub2c8\ub2e4. \uc704\uc758 \uc0d8\ud50c\ucf54\ub4dc\uc758 \uacbd\uc6b0\uc5d0\ub294 \uc6d0\uc740 C\ub85c , \uc0bc\uac01\ud615\uc740 T\ub85c key\ub97c \uc815\uc758\ud5c0\uc2b5\ub2c8\ub2e4. \uadf8\ub8f9\ud551\uc774 \ub05d\ub098\uba74 \uad6c\ub3c5\uc790\ub97c \uc9c0\uc815 \ud569\ub2c8\ub2e4. \uc774\ub54c \ub78c\ub2e4\uc2dd\uc5d0 \ub4e4\uc5b4\uc624\ub294 \uc778\uc790\ub294 GroupedObservable\uc774\uace0 \uc774 \uac1d\uccb4\ub97c \ud1b5\ud574 group\uc758 key\uba85\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uac1d\uccb4\uc758 \ub0b4\ubd80\ub370\uc774\ud130\ub97c \ub610 \ubc1c\ud589\ud558\uae30 \uc704\ud574 \uadf8\ub8f9\uac1d\uccb4\uc5d0 \ub610 \uad6c\ub3c5\uc790\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.<br \/>\n\u00a0<\/p>\n<ul>\n<li>\ub79c\ub364\ud55c \uc22b\uc790\ub4e4 \uc9dd\uc218, \ud640\uc218 \uadf8\ub8f9 \uc9d3\uae30<\/li>\n<\/ul>\n<pre class=\"\">val r = Random()\r\nObservable.range(0, 10).map {\r\n   r.nextInt(100)\r\n}.groupBy { number -&gt;\r\n   if (number % 2 == 0) {\r\n      \"even\"\r\n   } else {\r\n      \"odd\"\r\n   }\r\n}.subscribe { grouped: GroupedObservable&lt;String, Int&gt;? -&gt;\r\n   grouped?.subscribe { value: Int? -&gt;\r\n      println(\"${grouped.key}:$value\")\r\n   }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h4>4. scan() \ud568\uc218<\/h4>\n<p>reduce\uc640 \ube44\uc2b7\ud558\ub098 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud560\ub54c\ub9c8\ub2e4 \uadf8\uc5d0 \ub9de\ub294 \uc911\uac04\uacb0\uacfc \ubc0f \ucd5c\uc885\uacb0\uacfc\ub97c \uad6c\ub3c5\uc790\uc5d0\uac8c \ubc1c\ud589\ud569\ub2c8\ub2e4.<br \/>\n<a href=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-23.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-262\" src=\"http:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/04\/image-23.png\" alt=\"\" width=\"1280\" height=\"640\" \/><\/a><br \/>\n\u00a0<\/p>\n<pre class=\"\">Observable.just(\"Red\", \"Green\", \"Blue\").scan { color1: String, color2: String -&gt;\r\n   \"$color1 $color2\"\r\n}.subscribe {\r\n   println(it)\r\n}<\/pre>\n<p>\uacb0\uacfc:<br \/>\nRed<br \/>\nRed Green<br \/>\nRed Green Blue<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 Reactive Operators(\ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790) \ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790\uc758 \uc18c\uac1c \ub9c1\ud06c :\u00a0http:\/\/reactivex.io\/documentation\/operators \ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790\ub294 \uc790\ubc14\uc758 \uad00\uc810\uc5d0\uc11c \ubcf4\uba74 \uba54\uc18c\ub4dc\uc774\uc9c0\ub9cc, \ud568\uc218\ud615 \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \uc6d0\ub9ac\uc5d0 \ub530\ub974\uba74 \ub9ac\uc561\ud2f0\ube0c \uc5f0\uc0b0\uc790\ub294 Side Effect\uac00 \uc5c6\ub294 \uc21c\uc218 [&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\/242"}],"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=242"}],"version-history":[{"count":4,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/242\/revisions"}],"predecessor-version":[{"id":43820,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/242\/revisions\/43820"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}