{"id":43954,"date":"2020-02-20T18:56:11","date_gmt":"2020-02-20T09:56:11","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=43954"},"modified":"2020-08-25T14:30:45","modified_gmt":"2020-08-25T05:30:45","slug":"rxjava-rxandroid-3-0-0-%ec%b6%9c%ec%8b%9c-%eb%ac%b4%ec%97%87%ec%9d%b4-%eb%b3%80%ea%b2%bd%eb%90%98%ec%97%88%ec%a7%80","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=43954","title":{"rendered":"RxJava, RxAndroid 3.0 \ucd9c\uc2dc, \ubb34\uc5c7\uc774 \ubcc0\uacbd\ub418\uc5c8\uc9c0!?"},"content":{"rendered":"<h1>RxJava 3.0<\/h1>\n<p><a href=\"https:\/\/www.charlezz.com\/?p=189\">RxJava<\/a>\ub780 \ube44\ub3d9\uae30\uc801\uc778 \uc774\ubca4\ud2b8 \uae30\ubc18\uc758 \ud504\ub85c\uadf8\ub7a8\uc744 \ub9cc\ub4e4 \ub54c \uc0ac\uc6a9\ud558\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c\uc368 \ubaa8\ub4e0 \uac83\uc744 \uc2a4\ud2b8\ub9bc\uc73c\ub85c \ucc98\ub9ac\ud55c\ub2e4.<\/p>\n<p>\uc774\ubc88 3.0.0 \ub9b4\ub9ac\uc988\uc5d0\ub294 \ucf54\ub4dc \uc804\ubc18\uc801\uc73c\ub85c \ub9ce\uc740 \uc815\ub9ac\uc640 \uc131\ub2a5 \uac1c\uc120\uc774 \uc774\ub8e8\uc5b4\uc84c\ub2e4\uace0 \ud55c\ub2e4. \uc5b4\ub5a4 \uc810\ub4e4\uc774 \uac1c\uc120\ub418\uace0 \ubcc0\ud654\ub418\uc5c8\ub294\uc9c0 \uc54c\uc544\ubcf4\uc790.<\/p>\n<p>\uba54\uc774\uc800 \ubc84\uc804\ub118\ubc84\uac00 \uc218\uc815\ub428\uc5d0 \ub530\ub77c \uc544\ud2f0\ud329\ud2b8 \uc544\uc774\ub514\ub3c4 \ubcc0\uacbd\uc774 \ub418\uc5c8\ub2e4. \uadf8\ub808\uc774\ub4e4\uc5d0 RxJava3\ub97c \ucd94\uac00\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub4c8\ub808\ubca8\uc758 build.gradle\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc744 \ucd94\uac00\ud574\uc57c\ud55c\ub2e4.<\/p>\n<pre class=\"lang:null decode:true lang:\">dependencies {\r\n    implementation 'io.reactivex.rxjava3:rxjava:3.0.0'\r\n    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'\r\n}<\/pre>\n<h2>Java8<\/h2>\n<p>\uc624\ub79c\uc2dc\uac04\ub3d9\uc548 Android \uc9c4\uc601\uc5d0\uc11c Java 6 API\ub85c \uc81c\ud55c\ud574\uc654\uc73c\ub098 \uace7 \ucd9c\uc2dc\ud560 \uc548\ub4dc\ub85c\uc774\ub4dc \uc2a4\ud29c\ub514\uc624 4.0 \ubd80\ud130\ub294 \ub514\uc288\uac70\ub9c1(<a href=\"https:\/\/developer.android.com\/studio\/preview\/features#j8-desugar\">desugaring<\/a>)\uc774\ub77c \ubd88\ub9ac\ub294 \ud504\ub85c\uc138\uc2a4 \ub355\ubd84\uc5d0 Java7, Java8 \uae30\ub2a5\ub4e4\uc744 API\uc81c\ud55c \uc5c6\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub41c\ub2e4. \uc774\ub7f0 \ubcc0\ud654\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub41c\ub2e4\ub294 \ub73b\uc774\ub2e4.<\/p>\n<ul>\n<li>Stream : java.util.stream.Stream\uc744 \uc18c\uc2a4\ub85c \uc0ac\uc6a9\ud558\uac70\ub098 \ube14\ub77c\ud0b9\ub41c \uc2a4\ud2b8\ub9bc\ub4e4\uc744 \uc2dc\ud000\uc2a4\ub85c \ub178\ucd9c\ud55c\ub2e4.<\/li>\n<li>Stream Collectors : <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/stream\/Collector.html\">\ud45c\uc900 \ubcc0\ud658(standard transformations)<\/a>\uc73c\ub85c \uc9c0\uc815\ub41c \uceec\ub809\uc158\uc73c\ub85c \uc544\uc774\ud15c\ub4e4\uc744 \ud569\uce5c\ub2e4.<\/li>\n<li>Optional: RxJava\uc5d0\uc11c \uc694\uad6c\ud558\ub294 non-null \uc870\uac74\uc744 \ub3d5\ub294\ub2e4.<\/li>\n<li>CompletableFutre :\u00a0 CompletableFutures\ub97c \ube44-\ucc28\ub2e8\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uac70\ub098 \ub2e8\uc77c \uacb0\uacfc\ub97c CompletableFutures\ub85c \ub098\ud0c0\ub0b8\ub2e4.<\/li>\n<li>non-null \uc560\ub178\ud14c\uc774\uc158\uc758 \uc0ac\uc6a9 : \ud2b9\uc815 \uc0c1\ud669\uc5d0\uc11c \uc77c\ubd80 functional \ud0c0\uc785\uc774 null\uc744 \ubc18\ud658\ud560 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4.<\/li>\n<\/ul>\n<p>\ud558\uc9c0\ub9cc \uba87\uac00\uc9c0 \uae30\ub2a5\uc740 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294\ub2e4<\/p>\n<ul>\n<li>java.time.Duration : \uacfc\ubd80\ud558\uac00 \uac78\ub9b4 \uc218 \uc788\uc73c\ubbc0\ub85c time+ unit\uc73c\ub85c \ubd84\ub9ac \ud558\uc5ec \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n<li>java.util.function : \uc774\uac83\ub4e4\uc740 Throwable\ub4e4\uc744 \ub358\uc9c8 \uc218 \uc788\uc73c\ubbc0\ub85c \uacfc\ubd80\ud558\uac00 \uac78\ub9ac\uac70\ub098 \uc560\ub9e4\ubaa8\ud638\ud55c \uacbd\uc6b0\ub97c \ub9cc\ub4e4\uac8c \ub41c\ub2e4.<\/li>\n<\/ul>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \ub2e4\uc74c <a href=\"https:\/\/developer.android.com\/guide\/platform\/j8-jack?hl=ko#configuration\">\ubb38\uc11c<\/a>\ub97c \ucc38\uc870\ud558\uc5ec <a href=\"https:\/\/developer.android.com\/guide\/platform\/j8-jack?hl=ko#configuration\">Java8\uc5b8\uc5b4 \uc9c0\uc6d0<\/a>\uc744 \ud65c\uc131\ud654 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<h2>\ud328\ud0a4\uc9c0 \uad6c\uc870<\/h2>\n<p>RxJava 3 \ucef4\ud3ec\ub10c\ud2b8\ub294 io.reactivex.rxjava3 \ud328\ud0a4\uc9c0\ub85c \uad6c\uc131\ub41c\ub2e4. (RxJava 1\uc5d0\ub294 rx\uac00 \uc788\uace0 RxJava 2\ub294 io.reactivex\ub2e4). \uc774\ub7f0 \ud2b9\uc9d5\uc740 RxJava3\uac00 \uc774\uc804 \ubc84\uc804\ub4e4\uacfc \uac19\uc774 \uc0ac\uc6a9\ub420 \uc218 \uc788\uac8c \ud55c\ub2e4. \ucd94\uac00\uc801\uc73c\ub85c RxJava\uc758 \ud575\uc2ec \ud0c0\uc785\uc778 Flowable, Observer \ub4f1\uc740 io.reactivex.rxjava3.core\ub85c \uc774\ub3d9\ub418\uc5c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/rxjava_package_structure.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/rxjava_package_structure-1024x820.png\" alt=\"\" width=\"750\" height=\"601\" class=\"aligncenter size-large wp-image-43956\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/rxjava_package_structure-1024x820.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/rxjava_package_structure-300x240.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/rxjava_package_structure-768x615.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/rxjava_package_structure.png 1304w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<h1>\ub3d9\uc791 \ubcc0\uacbd \uc0ac\ud56d<\/h1>\n<p>\ub54c\ub85c\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub098 \uc5f0\uc0b0\uc790\uc758 \uc124\uacc4\uac00 \uc77c\ubd80 \uc0c1\ud669\uc5d0\uc11c \ubd80\uc801\uc808\ud558\uac70\ub098 \ub108\ubb34 \uc81c\ud55c\uc801\uc774\uae30 \ub54c\ubb38\uc5d0 \uc774\ubc88 \uba54\uc774\uc800 \uc5c5\ub370\uc774\ud2b8\uc5d0\uc11c \uc774\ub97c \uac1c\uc120\ud560 \uc218 \uc788\ub2e4.<\/p>\n<h3>\uc5d0\ub7ec \uc804\ub2ec \ubb38\uc81c<\/h3>\n<p>RxJava 2.x\uc5d0\uc11c\ub294 \uc5d0\ub7ec\ub97c \uc190\uc2e4 \uc5c6\uc774 \uc804\ub2ec\ud558\ub3c4\ub85d \ubaa9\ud45c\ub97c \uc124\uc815\ud588\ub2e4. \uadf8\ub7fc\uc5d0\ub3c4 \ubd88\uad6c\ud558\uace0 \ub2e4\uc591\ud55c \uacbd\uc7c1 \uc870\uac74(race condition)\uc5d0\uc11c \uc5d0\ub7ec\uc758 \ubc1c\ud589\uc774 \ub204\ub77d\ub420 \uc218 \uc788\uc5c8\ub2e4. 2.x \ud328\uce58\uc5d0\uc11c \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uba74 \ub108\ubb34 \ub9ce\uc740 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c 3.0\uc5d0\uc11c \uc774\ub97c \uc218\uc815\ud588\ub2e4. \uc774\uc81c \ub0b4\ubd80\uc801\uc73c\ub85c \uc5d0\ub7ec\ub97c \uc9c0\uc5f0\uc2dc\ud0a4\ub294 \uc5f0\uc0b0\uc790\ub97c \ucde8\uc18c\ud558\uba74 RxJavaPlugins.onError ()\ub97c \ud1b5\ud574 \ud574\ub2f9 \uc624\ub958\ub97c \uc804\uc5ed \uc624\ub958 \ucc98\ub9ac\uae30\uc5d0 \uc54c\ub9ac\uac8c \ub41c\ub2e4.<\/p>\n<p><a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#more-undeliverable-errors\">\uc624\ub958\uac00 \uc804\ub2ec \ub418\uc9c0 \uc54a\ub294 \uc0d8\ud50c \ucf54\ub4dc<\/a>\ub97c \ud655\uc778\ud558\uc790<\/p>\n<h3>Connectable \uc18c\uc2a4\uc5d0 \ub9ac\uc14b \uae30\ub2a5 \ucd94\uac00<\/h3>\n<p>Connectable \ud0c0\uc785\uc758 \ubaa9\uc801\uc740 connect()\ub97c \ud638\ucd9c \ud560 \ub54c \uc2e4\uc81c \uc5c5\uc2a4\ud2b8\ub9bc\uc774 \uc2a4\ud2b8\ub9ac\ubc0d \ub418\uae30 \uc804\uc5d0 \ud558\ub098 \uc774\uc0c1\uc758 \uc18c\ube44\uc790\ub97c \uc900\ube44 \ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \uac83\uc774\ub2e4. \ucc98\uc74c\uc5d0\ub294 \uc62c\ubc14\ub974\uac8c \ub3d9\uc791\ud574\ub3c4 \uc5c5\uc2a4\ud2b8\ub9bc\uc774 \ub04a\uae30\ub294 \uac83 \ub300\uc2e0 \uc885\ub8cc\ub418\uba74 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc5c8\ub2e4. \uc774\ub7f0 \uacbd\uc6b0 Connectable \ud0c0\uc785\uc774 replay() \ub610\ub294 publish()\ub85c \uc791\uc131\ub418\uc5c8\ub294\uc9c0 \uc5ec\ubd80\uc5d0 \ub530\ub77c \uc0c8\ub85c\uc6b4 \uc18c\ube44\uc790\ub294 \ubc1c\ud589\ub418\ub294 \uc544\uc774\ud15c\ub4e4\uc744 \uc218\uc2e0 \ud560 \uc218 \uc5c6\uac70\ub294 \uc544\uc774\ud15c\ub4e4\uc744 \ub193\uce58\uac8c \ub41c\ub2e4.\u00a0<\/p>\n<p>RxJava3 \ubd80\ud130\ub294\u00a0 Connectable \ud0c0\uc785\uc5d0\uc11c reset()\uc744 \ud638\ucd9c\ud558\uba74 \uc0c8\ub85c\uc6b4 \uc18c\ube44\uc790\uac00 \uad6c\ub3c5\ud558\uace0, connect()\ub97c \ud638\ucd9c \ud558\ub354\ub77c\ub3c4 \uc0c8\ub85c\uc6b4 \uc544\uc774\ud15c\ub4e4\uc744 \ubc1c\ud589\ud558\uac8c \ub41c\ub2e4.<\/p>\n<p><a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#connectable-source-reset\">Publish \ub9ac\uc14b \uc608\uc81c\uc640 Replay \ub9ac\uc14b \uc608\uc81c<\/a>\ub97c \ud655\uc778\ud558\uc790<\/p>\n<h3>Flowable.publish \uc911\uc9c0<\/h3>\n<p><span>Flowable.publish\uc758 \uad6c\ud604\uc740 \ub0b4\ubd80 \ud050\ub97c \ud638\uc2a4\ud305\ud558\uc5ec \ub2e4\uc6b4 \uc2a4\ud2b8\ub9bc\uc73c\ub85c\ubd80\ud130\uc758 \ubc30\uc555\uc744 \uc9c0\uc6d0\ud55c\ub2e4. \ub9cc\uc57d ConnectableFlowable\uc758 \uc18c\ube44\uc790\ub4e4\uc774 \ucde8\uc18c\ub41c \uacbd\uc6b0,\u00a0 2.x\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \ud050 \uadf8\ub9ac\uace0 \uadf8\uc5d0 \ub530\ub978 \uacb0\uacfc \uc0dd\uc131\ub418\ub294 \uc5c5\uc2a4\ud2b8\ub9bc \uc18c\uc2a4\ub294 \ub290\ub9ac\uac8c \uc18c\ubaa8\ub41c\ub2e4. \uc774\ub85c \uc778\ud574 \uc77c\uc2dc\uc801\uc73c\ub85c \uc18c\ube44\uc790\uac00 \ubd80\uc871\ud560 \ub54c \uc608\uc0c1\uce58 \ubabb\ud55c \uc544\uc774\ud15c \uc190\uc2e4\uc774 \ubc1c\uc0dd\ud55c\ub2e4. <\/span><\/p>\n<p><span>RxJava 3\ubd80\ud130\ub294 \uad6c\ud604\uc774 \uc77c\uc2dc \uc911\uc9c0\ub418\uace0 \uc774\ubbf8 \ub0b4\ubd80 \ud050\uc5d0\uc788\ub294 \ud56d\ubaa9\uc744 \ub098\uc911\uc5d0 \uad6c\ub3c5\ud55c \uc18c\ube44\uc790\uac00 \uc989\uc2dc \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub41c\ub2e4.<\/span><\/p>\n<h3>Processor.offer null \uccb4\ud06c<\/h3>\n<p><span>PublishProcessor.offer (), BehaviorProcessor.offer () \ub610\ub294 MulticastProcessor.offer()\uc758 \uc778\uc790\ub85c null\uc744 \ub123\uace0 \ud638\ucd9c\ud558\uba74 onError\ub97c \ud1b5\ud574 \uc2e0\ud638\ub97c \ubcf4\ub0b4\uc9c0 \uc54a\uace0 \ud504\ub85c\uc138\uc11c\ub97c \uc885\ub8cc\ud558\ub294 \ub300\uc2e0 NullPointerException\uc774 \ubc1c\uc0dd\ud55c\ub2e4. \uc774\uac83\uc740 \uc774\uc81c Reactive Streams \uc0ac\uc591\uc5d0 \ud544\uc694\ud55c onNext \uba54\uc18c\ub4dc\uc758 \ub3d9\uc791\uacfc \uc77c\uce58\ud55c\ub2e4 .<\/span><\/p>\n<h3>MulticastProcessor.offer \uacb0\ud569 \uccb4\ud06c<\/h3>\n<p>MulticastProcessor\ub294 Flowable.publish \uc5f0\uc0b0\uc790\uc640 \uac19\uc774 \ubc30\uc555\uc744 \uc870\uc815\ud558\ub294 \ud504\ub85c\uc138\uc11c\ub85c \uc124\uacc4\ub418\uc5c8\ub2e4. \uc62c\ubc14\ub978 \uc18c\uc2a4\uc5d0 \uad6c\ub3c5 \ud560 \ub54c \uc5f0\uc0b0\uc790 \uacb0\ud569\uacfc \uac19\uc740 \ub0b4\ubd80 \ucd5c\uc801\ud654\uac00 \ud3ec\ud568\ub41c\ub2e4. \uc0ac\uc6a9\uc790\ub294 \ud504\ub85c\uc138\uc11c \uc790\uccb4\uc5d0 \ub300\ud55c \ucc38\uc870\ub97c \uc720\uc9c0\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uac1c\ub150\uc0c1 onXXX \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c\ud558\uc5ec \ubb38\uc81c\ub97c \uc77c\uc73c\ud0ac \uc218 \uc788\ub2e4. \uc704\uc5d0\uc11c \uc5b8\uae09\ud55c \uacb0\ud569\uc774 \ubc1c\uc0dd\ud558\ub294 \ub3d9\uc548 \ud638\ucd9c \ub420 \ub54c 2.x\uc5d0\uc11c \uc815\uc758\ub418\uc9c0 \uc54a\uc740 \ub3d9\uc791\uc744 \uc720\ubc1c\ud558\ub294 offer \uba54\uc18c\ub4dc\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\ub2e4. 3.x\uc5d0\uc11c offer \uba54\uc18c\ub4dc\ub294 IllegalStateException\uc744 \ubc1c\uc0dd\uc2dc\ud0a4\uace0 \ud504\ub85c\uc138\uc11c\uc758 \ub0b4\ubd80 \uc0c1\ud0dc\ub97c \ubc29\ud574\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n<h3>groupBy\uc5d0\uc11c \uadf8\ub8f9 \ud3d0\uc9c0<\/h3>\n<p><span>groupBy \uc5f0\uc0b0\uc790\ub294 \ubc18\uc751 \uc18c\uc2a4\ub97c \uc8fc\uc694 \ucd9c\ub825\uc73c\ub85c \uc2e0\ud638\ud558\ub294 \ud2b9\uc774\ud55c \uc5f0\uc0b0\uc790 \uc911 \ud558\ub098\ub2e4. \uc18c\ube44\uc790\ub294 \uc774\ub7ec\ud55c \ub0b4\ubd80 \uc18c\uc2a4\ub97c \uad6c\ub3c5\ud574\uc57c \ud55c\ub2e4. \ub530\ub77c\uc11c \uae30\ubcf8 \uc2dc\ud000\uc2a4\uac00 \u200b\u200b\ucde8\uc18c \ub41c \uacbd\uc6b0 (\uc989, Flowable &lt;GroupedFlowable &lt;T &gt;&gt; \uc790\uccb4) \uc18c\ube44\uc790\ub294 \uc5ec\uc804\ud788 \uadf8\ub8f9\uc5d0 \ud56d\ubaa9\uc744 \uacc4\uc18d \uc218\uc2e0\ud574\uc57c\ud558\uc9c0\ub9cc \uc0c8 \uadf8\ub8f9\uc744 \ub9cc\ub4e4\uc9c0 \uc54a\uc544\uc57c \ud55c\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c \uc774\ub7ec\ud55c \ub0b4\ubd80 \uc18c\ube44\uc790\uac00 \ubaa8\ub450 \ucde8\uc18c \ub41c \uacbd\uc6b0\uc5d0\ub9cc \uc6d0\ubcf8 \uc18c\uc2a4\ub97c \ucde8\uc18c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/span><\/p>\n<p><span>\uadf8\ub7ec\ub098 2.x\uc5d0\uc11c\ub294 \ub0b4\ubd80 \uc18c\uc2a4\uc758 \uc18c\ube44\ub97c \uac15\uc694\ud558\ub294 \uac83\uc774 \uc5c6\uc73c\ubbc0\ub85c \uadf8\ub8f9\uc744 \uc644\uc804\ud788 \ubb34\uc2dc\ud558\uc5ec \uc6d0\ub798 \uc18c\uc2a4\uc758 \ucde8\uc18c\ub97c \ubc29\uc9c0\ud558\uace0 \ub9ac\uc18c\uc2a4 \ub204\uc218\ub85c \uc774\uc5b4\uc9c8 \uc218 \uc788\ub2e4. <\/span><\/p>\n<p><span>3.x\uc5d0\uc11c\ub294 groupBy\uc758 \ub3d9\uc791\uc774 \ubcc0\uacbd\ub418\uc5b4 \uadf8\ub8f9\uc744 \uc0dd\uc131 \ud560 \ub54c \ub2e4\uc6b4 \uc2a4\ud2b8\ub9bc\uc774 \ub3d9\uae30\uc801\uc73c\ub85c \uad6c\ub3c5\ud574\uc57c \ud55c\ub2e4. \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \uadf8\ub8f9\uc740 &#8220;\ud3d0\uc9c0\ub41c(abandoned)&#8221;\uac83\uc73c\ub85c \uac04\uc8fc\ub418\uc5b4 \uc885\ub8cc\ub41c\ub2e4. \uc774\ub807\uac8c\ud558\uba74 \ubc84\ub824\uc9c4 \uadf8\ub8f9\uc774 \uc6d0\ub798 \uc18c\uc2a4\uc758 \ucde8\uc18c\ub97c \ub9c9\uc744 \uc218 \uc5c6\ub2e4. \ub2a6\uc740 \uc18c\ube44\uc790\uac00 \uc5ec\uc804\ud788 \uadf8\ub8f9\uc5d0 \uac00\uc785 \ud55c \uacbd\uc6b0 \uadf8\ub8f9 \uc0dd\uc131\uc744 \ud2b8\ub9ac\uac70 \ud55c \ud56d\ubaa9\uc744 \uacc4\uc18d \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#groupby-abandonment-example\">groupBy \uadf8\ub8f9 \ud3d0\uc9c0 \uc608\uc81c<\/a>\ub97c \ud655\uc778\ud558\uc790.<\/p>\n<h3>groupBy\uc5d0\uc11c\uc758 \ubc30\uc555<\/h3>\n<p>Flowable.groupBy \uc5f0\uc0b0\uc790\ub294 \ub0b4\ubd80 \uadf8\ub8f9 \uc18c\ube44\uc790\uc758 \ubc30\uc555\uc744 \uc870\uc815\ud558\uace0 \uc6d0\ub798 Flowable\uc758 \uc694\uccad\uc744 \uc870\uc815\ud558\ub294 \ubc29\uc2dd\uc774 \ud6e8\uc52c \ub354 \ub3c5\ud2b9\ud558\ub2e4. \ubb38\uc81c\ub294 \uadf8\ub7ec\ud55c \uc694\uccad\uc73c\ub85c \uc778\ud574 \uc0c8\ub85c\uc6b4 \uadf8\ub8f9, \uc790\uccb4 \uc694\uccad\ud55c \uadf8\ub8f9\uc758 \uc0c8 \ud56d\ubaa9 \ub610\ub294 \uc644\uc804\ud788 \ub2e4\ub978 \uadf8\ub8f9\uc758 \uc0c8 \ud56d\ubaa9\uc774 \uc0dd\uc131 \ub420 \uc218 \uc788\ub2e4. \ub530\ub77c\uc11c \uadf8\ub8f9\uc740 \uc11c\ub85c\uc758 \ud56d\ubaa9 \uc218\uc2e0 \ub2a5\ub825\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce58\uace0 \ud2b9\ud788 \uc77c\ubd80 \uadf8\ub8f9\uc774 \uc804\ud600 \uc18c\ube44\ub418\uc9c0 \uc54a\ub294 \uacbd\uc6b0 \uc2dc\ud000\uc2a4\ub97c \uc911\ub2e8\uc2dc\ud0ac \uc218 \uc788\ub2e4.<\/p>\n<p>\ud6c4\uc790\uc758 \uacbd\uc6b0 \uac1c\ubcc4 \uadf8\ub8f9\uc758 \uc218\uac00 flatMap\uc758 \ub3d9\uc2dc\uc131 \ub808\ubca8 (\uae30\ubcf8 128)\ubcf4\ub2e4 \ud070 flatMap\uc744 \ud1b5\ud574 \uadf8\ub8f9\uc744 \ubcd1\ud569 \ud560 \ub54c \ubc1c\uc0dd\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uc2e0\uc120\ud55c \uadf8\ub8f9\uc774 \uad6c\ub3c5\ub418\uc9c0 \uc54a\uace0 \uc624\ub798\ub41c \uadf8\ub8f9\uc774 \uacf5\uac04\uc744 \ub9cc\ub4e4\uae30 \uc704\ud574 \uc644\ub8cc\ub418\uc9c0 \uc54a\uc744 \uc218 \uc788\ub2e4. concatMap\uc744 \uc0ac\uc6a9\ud558\uba74 \ub3d9\uc77c\ud55c \ubb38\uc81c\uac00 \uc989\uc2dc \ub098\ud0c0\ub0a0 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>RxJava\ub294 \ub17c-\ube14\ub77c\ud0b9\uc774\uae30 \ub54c\ubb38\uc5d0 \uc774\ub7ec\ud55c \uc790\ub3d9 \uc815\uc9c0\ub294 \uac10\uc9c0 \ubc0f \uc9c4\ub2e8\ud558\uae30\uac00 \uc5b4\ub835\ub2e4 (\uc989, groupBy \ub610\ub294 flatMap\uc5d0\uc11c \uc2a4\ub808\ub4dc\uac00 \ucc28\ub2e8\ub418\uc9c0 \uc54a\uc74c). \ub530\ub77c\uc11c 3.x\uc5d0\uc11c\ub294 groupBy\uc758 \ub3d9\uc791\uc744 \ubcc0\uacbd\ud558\uc5ec \uc989\uc2dc \ub2e4\uc6b4 \uc2a4\ud2b8\ub9bc\uc5d0\uc11c \uc0c8 \uadf8\ub8f9\uc744 \uc218\uc2e0 \ud560 \uc218\uc5c6\ub294 \uacbd\uc6b0 \uc2dc\ud000\uc2a4\uac00 \u200b\u200bMissingBackpressureException\uc73c\ub85c \uc885\ub8cc\ub41c\ub2e4.<\/p>\n<p><a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#groupby-backpressure-example\">groupBy \ubc30\uc555 \uc608\uc81c<\/a>\uc744 \ud655\uc778\ud558\uc790<\/p>\n<h3>window\uc5d0\uc11c Window \ud3d0\uae30<\/h3>\n<p>groupBy\uc640 \uc720\uc0ac\ud558\uac8c, window\uc5f0\uc0b0\uc790\ub294 \uc678\ubd80 \uc2dc\ud000\uc2a4\uac00 \u200b\u200b\ucde8\uc18c \ub420 \ub54c (\uc989, \uc81c\ud55c\ub41c \uc708\ub3c4\uc6b0 \uc138\ud2b8\ub85c\ub9cc \uc791\uc5c5 \ud560 \ub54c) \uc544\uc774\ud15c\uc744 \uacc4\uc18d \uc218\uc2e0\ud574\uc57c\ud558\ub294 \ub0b4\ubd80 \ub9ac\uc561\ud2f0\ube0c \uc2dc\ud000\uc2a4\ub97c \ubc29\ucd9c\ud55c\ub2e4. \ub9c8\ucc2c\uac00\uc9c0\ub85c \ubaa8\ub4e0 window \uc18c\ube44\uc790\uac00 \ucde8\uc18c\ud558\uba74 \uc6d0\ubcf8 \uc18c\uc2a4\ub3c4 \ucde8\uc18c\ud574\uc57c \ud55c\ub2e4.<\/p>\n<p>\uadf8\ub7ec\ub098 2.x\uc5d0\uc11c\ub294 \ub0b4\ubd80 \uc18c\uc2a4\uc758 \uc18c\ube44\ub97c \uac15\uc694\ud558\ub294 \uac83\uc774 \uc5c6\uc73c\ubbc0\ub85c window\ub97c \uc644\uc804\ud788 \ubb34\uc2dc\ud558\uc5ec \uc6d0\ub798 \uc18c\uc2a4\uc758 \ucde8\uc18c\ub97c \ub9c9\uace0 \ub9ac\uc18c\uc2a4 \ub204\uc218\ub85c \uc774\uc5b4\uc9c8 \uc218 \uc788\ub2e4.<\/p>\n<p>3.x\uc5d0\uc11c\ub294 \ubaa8\ub4e0 window \uc5f0\uc0b0\uc790\uc758 \ub3d9\uc791\uc774 \ubcc0\uacbd\ub418\uc5b4 \uadf8\ub8f9\uc744 \uc0dd\uc131 \ud560 \ub54c \ub2e4\uc6b4 \uc2a4\ud2b8\ub9bc\uc744 \ub3d9\uae30\uc801\uc73c\ub85c \uad6c\ub3c5\ud574\uc57c \ud55c\ub2e4. \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 window\ub294 &#8220;\ud3d0\uc9c0\ub41c&#8221;\uac83\uc73c\ub85c \uac04\uc8fc\ub418\uace0 \uc885\ub8cc\ub41c\ub2e4. \uc774\ub807\uac8c\ud558\uba74 \ubc84\ub824\uc9c4 \ucc3d\ubb38\uc73c\ub85c \uc778\ud574 \uc6d0\ubcf8 \uc18c\uc2a4\uac00 \ucde8\uc18c\ub418\uc9c0 \uc54a\ub294\ub2e4. \ub2a6\uc740 \uc18c\ube44\uc790\uac00 \uc5ec\uc804\ud788 \ucc3d\uc5d0 \uac00\uc785 \ud55c \uacbd\uc6b0 \ucc3d \uc0dd\uc131\uc744 \ud2b8\ub9ac\uac70 \ud55c \ud56d\ubaa9\uc744 \uacc4\uc18d \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p><a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#window-abandonment-example\">window \ud3d0\uae30 \uc608\uc81c\ub97c \ud655\uc778\ud558\uc790.<\/a><\/p>\n<h2>CompositeException cause generation<\/h2>\n<p>1.x \ubc0f 2.x\uc5d0\uc11c CompositeException.getCause () \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c\ud558\uba74 \ub0b4\ubd80 \uc9d1\uacc4\ub41c \uc608\uc678 \ubaa9\ub85d\uc5d0\uc11c \uc608\uc678 \uccb4\uc778\uc774 \uc0dd\uc131\ub418\uc5c8\ub2e4. \uc774\ub7f0 \uc77c\ub4e4\uc774 \uc218\ud589\ub41c \uc8fc\ub41c \uc774\uc720\ub294 Java6\uc758 \ubd80\uc871\ud568\uc774 \uc608\uc678\uae30\ub2a5\uc774 Java 7\uc774\uc0c1\uc758 \uc608\uc678\ub4e4\uc744 \uc5b5\uc81c\ud574\uc654\uae30 \ub54c\ubb38\uc774\ub2e4. \uadf8\ub7ec\ub098 \uad6c\ud604\uc2dc \uc608\uc678\uc0ac\ud56d\uc774 \ubcc0\uacbd\ub418\uc5c8\uac70\ub098 \uccb4\uc778\uc744 \uc804\ud600 \uc124\uc815\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0\uac00 \uc788\uc5c8\uc73c\ub098 2.x\uc5d0\uc11c \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub294 \uac83\uc740 \uc704\ud5d8\ud588\ub2e4.<\/p>\n<p>3.x\ub97c \uc0ac\uc6a9\ud558\uba74, \ud574\ub2f9 \uba54\uc18c\ub4dc\ub294 \uc2a4\ud0dd \ucd94\uc801\uc744 \uc694\uccad\ud558\uba74 \uc9d1\uacc4\ub41c \uc608\uc678\ub97c \uac74\ub4dc\ub9ac\uc9c0 \uc54a\uace0 \ucd9c\ub825\uc744 \uc0dd\uc131\ud558\ub294 Cause Exception\uc744 \uad6c\uc131\ud55c\ub2e4.<\/p>\n<h3>\ub9e4\uac1c\ubcc0\uc218 \uc720\ud6a8\uc131 \uc608\uc678\uc0ac\ud56d \ubcc0\uacbd<\/h3>\n<p>2.x\uc758 \uc77c\ubd80 \ud45c\uc900 \uc5f0\uc0b0\uc790\ub294 \ud574\ub2f9 \ub9e4\uac1c\ubcc0\uc218\uac00 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uacbd\uc6b0 IndexOutOfBoundsException\uc744 \ubc1c\uc0dd\uc2dc\ud0a8\ub2e4. \ub2e4\ub978 \ub9e4\uac1c \ubcc0\uc218 \uc720\ud6a8\uc131 \uac80\uc0ac \uc608\uc678\uc640 \uc77c\uad00\uc131\uc744 \uc720\uc9c0\ud558\uae30 \uc704\ud574 \ub2e4\uc74c \uc5f0\uc0b0\uc790\ub294 \ub300\uc2e0 IllegalArgumentException\uc744 \ubc1c\uc0dd\uc2dc\ud0a8\ub2e4.<\/p>\n<ul>\n<li>skip<\/li>\n<li>skipLast<\/li>\n<li>takeLast<\/li>\n<li>takeLastTimed<\/li>\n<\/ul>\n<h3>\ucf5c\ubc31\uc5d0\uc11c \uc120\ud589 \ucde8\uc18c<\/h3>\n<p>2.x\uc5d0\uc11c fromRunnable \ubc0f fromAction\uc744 \ud1b5\ud574 \uc0dd\uc131 \ub41c \ucde8\uc18c \uc2dc\ud000\uc2a4\ub294 \ub2e4\uc6b4 \uc2a4\ud2b8\ub9bc\uc774 \uc2dc\ud000\uc2a4\ub97c \uc989\uc2dc \ucde8\uc18c \/ \uc0ad\uc81c\ud588\uc744 \ub54c \ub2e4\ub978 fromX \uc2dc\ud000\uc2a4\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc558\ub2e4.<\/p>\n<p>3.x\uc5d0\uc11c \uc774\ub7ec\ud55c \uc0ac\uc804 \ucde8\uc18c\ub294 \uc9c0\uc815\ub41c \ucf5c\ubc31\uc744 \uc2e4\ud589\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n<pre class=\"lang: decode:true\">Runnable run = mock(Runnable.class);\r\n\r\nCompletable.fromRunnable(run)\r\n.test(true); \/\/ cancel upfront\r\n\r\nverify(run, never()).run();<\/pre>\n<h3>Using cleanup \uc21c\uc11c<\/h3>\n<p>\uc5f0\uc0b0\uc790 using\uc740 \uc790\uc6d0\uc744 \uc815\ub9ac\ud574\uc57c\ud558\ub294 \uc2dc\uae30\ub97c \uacb0\uc815\ud558\ub294 eager \ub9e4\uac1c \ubcc0\uc218\ub97c \uac16\ub294\ub2e4. true\ub294 \uc885\ub8cc\uc804\uc744 \uc758\ubbf8\ud558\uace0 false\ub294 \uc885\ub8cc\ud6c4\ub97c \uc758\ubbf8\ud55c\ub2e4. \ubd88\ud589\ud788\ub3c4 \uc774 \uc124\uc815\uc740 donwstream \ucde8\uc18c\uc2dc \uc815\ub9ac \uc21c\uc11c\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc73c\uba70, \uc5c5\uc2a4\ud2b8\ub9bc\uc744 \ucde8\uc18c\ud558\uae30 \uc804\uc5d0 \ud56d\uc0c1 \ub9ac\uc18c\uc2a4\ub97c \uc815\ub9ac\ud588\ub2e4.<\/p>\n<p>3.x\uc5d0\uc11c \uc815\ub9ac \uc21c\uc11c\ub294 \uc774\uc81c \uc2dc\ud000\uc2a4\uac00 \u200b\u200b\uc885\ub8cc\ub418\uac70\ub098 \ucde8\uc18c \ub420 \ub54c\ub85c \uc77c\uad00\ub41c\ub2e4. true\ub294 \uc885\ub8cc \uc804 \ub610\ub294 \uc5c5\uc2a4\ud2b8\ub9bc\uc744 \ucde8\uc18c\ud558\uae30 \uc804\uc744 \uc758\ubbf8\ud558\uace0, false\ub294 \uc885\ub8cc \ud6c4 \ub610\ub294 \uc5c5\uc2a4\ud2b8\ub9bc\uc744 \ucde8\uc18c \ud55c \ud6c4\ub97c \uc758\ubbf8\ud55c\ub2e4.<\/p>\n<h1>API\uc758 \ubcc0\uacbd<\/h1>\n<p>\uc8fc\uc694 \ub9b4\ub9ac\uc2a4\ub97c \ud1b5\ud574 \uc694\uc18c\ub97c \ucd94\uac00, \ubcc0\uacbd \ub610\ub294 \uc81c\uac70\ud558\uc5ec API \ud45c\uba74\uc744 \uc815\ub9ac\ud558\uace0 \uac1c\uc120 \ud560 \uc218 \uc788\ub2e4. 3.x\uc5d0\uc11c\ub294 \uba87 \uac00\uc9c0 \uc124\uba85\uc774 \ud544\uc694\ud55c \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc788\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<h3>Functional interface<\/h3>\n<p>RxJava 2.x\ub294 Java 6 \ubc0f Java 8\uc5d0\uc11c \ub3d9\uc77c\ud55c \uc720\ud615\uc73c\ub85c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d io.reactivex.functions\uc5d0 \uc0ac\uc6a9\uc790 \uc815\uc758 Functional \uc778\ud130\ud398\uc774\uc2a4 \uc138\ud2b8\ub97c \ub3c4\uc785\ud588\ub2e4. \uc774\ub7ec\ud55c \uc0ac\uc6a9\uc790 \uc815\uc758 \uc720\ud615\uc758 \ub450 \ubc88\uc9f8 \uc774\uc720\ub294 \ud45c\uc900 Java 8 function \ud0c0\uc785\ub4e4\uc774 \uc5b4\ub5a4 \ud655\uc778\ub41c \uc608\uc678\uc0ac\ud56d\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c RxJava \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud560 \ub54c \ub2e4\uc18c \ubd88\ud3b8\uc744 \uacaa\uc744 \uc218 \uc788\ub2e4.<\/p>\n<p>RxJava 3\uac00 Java 8\uc744 \uae30\ubc18\uc73c\ub85c\ud558\uace0 \uc788\uc74c\uc5d0\ub3c4 \ubd88\uad6c\ud558\uace0,\u00a0 \ud45c\uc900 Java 8 Functional \uc778\ud130\ud398\uc774\uc2a4 \uad00\ub828 \ubb38\uc81c\ub294 \uc9c0\uc18d\ub418\uace0, \ud604\uc7ac\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c\u00a0 \ub514\uc288\uac70\ub9c1\uc774 \uac00\ub2a5\ud55c \uc774\uc288\ub4e4\uacfc \uadf8\ub9ac\uace0 \uc608\uc678\ucc98\ub9ac\uac00 \ubd88\uac00\ud558\ub2e4. <br \/>\n\ub530\ub77c\uc11c 3.x\uc5d0\uc11c\ub294 \uc0ac\uc6a9\uc790 \uc815\uc758 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc720\uc9c0\ud558\uc9c0\ub9cc @FunctionalInterface \uc560\ub178\ud14c\uc774\uc158\uc774 \uc801\uc6a9\ub418\uc5c8\ub2e4 (Android\uc5d0\uc11c\ub294 \uc548\uc804\ud558\uace0 \uc774\ub294 \ubb34\uc2dc\ub41c\ub2e4)<\/p>\n<pre class=\"lang: decode:true \">@FunctionalInterface\r\ninterface Function&lt;@NonNull T, @NonNull R&gt; {\r\n    R apply(T t) throws Throwable;\r\n}<\/pre>\n<p>\ucd94\uac00\uc801\uc73c\ub85c Java8\uc740 \ud0c0\uc785 \uc778\uc218\uc5d0 \uc560\ub178\ud14c\uc774\uc158\uc744 \uc120\uc5b8\ud558\ub294\uac83\uc744 \ud5c8\uc6a9\ud558\uace0 \ud0c0\uc785 \uc778\uc790\uac00 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\ub294\uac83\uc744 \ud5c8\uc6a9\ud55c\ub2e4. \uadf8\ub9ac\uace0 \ubaa8\ub4e0 functional \uc778\ud130\ud398\uc774\uc2a4\ub4e4\uc740 nullability \uc560\ub178\ud14c\uc774\uc158\uc744 \uc218\uc2e0\ud558\ub294\uac83\uc744 \ud5c8\uc6a9\ud55c\ub2e4.<\/p>\n<h3>throws\uc758 \ud655\uc7a5<\/h3>\n<p>\ud568\uc218\ud615 \uc778\ud130\ud398\uc774\uc2a4\uc5d0\uc11c \ucee4\uc2a4\ud140 Exception\uc744 \ub358\uc9c0\ub294 \uac83\uc5d0 \ub300\ud55c \uc791\uc740 \ubb38\uc81c\uc810\uc740 \uba87\uba87 \uc368\ub4dc\ud30c\ud2f0 API\uac00 Exception\uc758 \uc11c\ube0c\ud074\ub798\uc2a4\uac00 \uc544\ub2cc \uc608\uc678\uc0ac\ud56d\uc744 \ub358\uc9c0\uac70\ub098 \uadf8\ub0e5 Throwable\uc744 \ub358\uc9c0\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n<p>\uadf8\ub807\uae30 \ub584\ubb38\uc5d0 3.x\ubc84\uc804\uc5d0\uc11c\ub294 \ud568\uc218\ud615 \uc778\ud130\ud398\uc774\uc2a4\uc758 \uc608\uc678 \ucc98\ub9ac\ub97c \ud655\uc7a5\ud588\ub2e4. \uc774 \ud655\uc7a5\uc740 \ub78c\ub2e4\u00a0 \ub610\ub294 \ud074\ub798\uc2a4 \uad6c\ud604 \uc5d0 \ub300\ud574 \uc911\uc694\ud558\uc9c0 \uc54a\uc744 \uc218 \uc788\uc9c0\ub9cc \uadf8\ub0e5 \uc54c\uc544 \ub450\uc790. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#wider-throws\">\uc774\uacf3<\/a>\uc5d0\uc11c \ud655\uc778\ud558\uc790<\/p>\n<h3>\uc0c8\ub85c\uc6b4 \ud0c0\uc785!<\/h3>\n<h4>Supplier<\/h4>\n<p>RxJava 2.x\ub294 call() \uba54\uc18c\ub4dc\uac00 \uc120\uc5b8\ub418\uc5b4\uc788\uace0 \uae30\ubcf8\uc801\uc73c\ub85c Exception\uc744 \ubc1c\uc0dd\uc2dc\ud0a4\ub294 \ud45c\uc900 java.util.concurrent.Callable\uc744 \uc774\ubbf8 \uc9c0\uc6d0\ud588\ub2e4. \ubd88\ud589\ud788\ub3c4, \uc6b0\ub9ac\uc758 \ucee4\uc2a4\ud140 functional \uc778\ud130\ud398\uc774\uc2a4\uac00 Throwable\uc744 \ub358\uc9c0\uae30 \uc704\ud574 \ud655\uc7a5\ub418\uc5c8\uc744 \ub54c, Java\uc5d0\uc11c\ub294throws \uc808\uc744 \ub113\ud788\uac70\ub098 \uc881\ud788\uac70\ub098 \ubc84\ub9b4 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc5d0 Callable\uc744 \ud655\uc7a5\ud558\ub294\uac83\uc774 \ubd88\uac00\ub2a5\ud588\ub2e4. \ub530\ub77c\uc11c 3.x\uc5d0\ub294 \uac00\ub2a5\ud55c \uac00\uc7a5 \ub113\uc740 \ubc94\uc704\ub97c \uc815\uc758\ud558\ub294 io.reactivex.rxjava3.functions.Supplier \uc778\ud130\ud398\uc774\uc2a4\uac00 \ub3c4\uc785\ub418\uc5c8\ub2e4.<\/p>\n<p>\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#supplier\">\ubb38\uc11c<\/a>\uc5d0\uc11c \ud655\uc778\ud558\uc790<\/p>\n<h4>Converters<\/h4>\n<p>2.x\uc5d0\uc11c to() \uc5f0\uc0b0\uc790\ub294 \uc77c\ubc18 \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud50c\ub85c\uc6b0\uc758 \uc5b4\uc148\ube14\ub9ac \uc2dc\uac04\uc744 \uc784\uc758 \uc720\ud615\uc73c\ub85c \ubcc0\ud658 \ud560 \uc218\uc788\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uc811\uadfc\uc758 \ub2e8\uc810\uc740 \uac01 \uae30\ubcf8 \ubc18\uc751 \uc720\ud615\uc774 \uba54\uc18c\ub4dc \uc2dc\uadf8\ub2c8\ucc98\uc5d0\uc11c \ub3d9\uc77c\ud55c \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uac00\uc84c\uae30 \ub54c\ubb38\uc5d0 \ub3d9\uc77c\ud55c \ud074\ub798\uc2a4 \ub0b4\uc5d0\uc11c \ub2e4\ub978 \ubc18\uc751 \uc720\ud615\uc5d0 \ub300\ud574 \uc5ec\ub7ec \ucee8\ubc84\ud130\ub97c \uad6c\ud604\ud558\ub294 \uac83\uc774 \ubd88\uac00\ub2a5\ud588\ub2e4. \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 as \uc5f0\uc0b0\uc790\uc640 XConverter \uc778\ud130\ud398\uc774\uc2a4\uac00 2.x\uc5d0 \ub3c4\uc785\ub418\uc5c8\uc73c\uba70,\uc774 \uc778\ud130\ud398\uc774\uc2a4\ub294 \uace0\uc720\ud558\uba70 \ub3d9\uc77c\ud55c \ud074\ub798\uc2a4\uc5d0\uc11c \uad6c\ud604 \ub420 \uc218 \uc788\ub2e4. \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc774\uc9c4 \ud638\ud658\uc131\uc73c\ub85c \uc778\ud574 2.x\uc5d0\uc11c\ub85c \uc2dc\uadf8\ub2c8\ucc98\ub97c \ubcc0\uacbd\ud560 \uc218 \uc5c6\ub2e4.<\/p>\n<p>3.x\ubd80\ud130 as() \uba54\uc18c\ub4dc\uac00 \uc81c\uac70\ub418\uc5c8\uc73c\uba70 to() \uba54\uc18c\ub4dc\ub294 \uc774\uc81c \uac01\uac01\uc758 XConverter \uc778\ud130\ud398\uc774\uc2a4 (\ud328\ud0a4\uc9c0 io.reactivex.rxjava3.core\uc5d0\uc11c \ud638\uc2a4\ud305)\uc640 \ud568\uaed8 \uc791\ub3d9\ud55c\ub2e4<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/www.charlezz.com-rxjava-rxandroid-3-0-charlezz-2020-08-25--2.30.20.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/www.charlezz.com-rxjava-rxandroid-3-0-charlezz-2020-08-25--2.30.20.png\" alt=\"\" width=\"1560\" height=\"412\" class=\"aligncenter size-full wp-image-44510\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/www.charlezz.com-rxjava-rxandroid-3-0-charlezz-2020-08-25--2.30.20.png 1560w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/www.charlezz.com-rxjava-rxandroid-3-0-charlezz-2020-08-25--2.30.20-300x79.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/www.charlezz.com-rxjava-rxandroid-3-0-charlezz-2020-08-25--2.30.20-768x203.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/02\/www.charlezz.com-rxjava-rxandroid-3-0-charlezz-2020-08-25--2.30.20-1024x270.png 1024w\" sizes=\"(max-width: 1560px) 100vw, 1560px\" \/><\/a><\/p>\n<h3>Moved components<\/h3>\n<h4>Disposables<\/h4>\n<p>Java 8 \ubc0f Android\uc758 desugaring \ub3c4\uad6c\ub85c \ubcc4\ub3c4\uc758 \ud329\ud1a0\ub9ac \ud074\ub798\uc2a4 \ub300\uc2e0 \uc815\uc801 \uc778\ud130\ud398\uc774\uc2a4 \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc9c0\uc6d0 \ud074\ub798\uc2a4 io.reactivex.disposables.Disposables\ub294 \ubaa8\ub4e0 \uba54\uc18c\ub4dc\ub97c Disposable \uc778\ud130\ud398\uc774\uc2a4 \uc790\uccb4 (io.reactivex.rxjava3.disposables.Disposable)\ub85c \uc62e\uae30\ub294 \uac83\uc774 \uc8fc\uc694 \ud6c4\ubcf4\uc600\ub2e4.<\/p>\n<p>\uae30\uc874 \ud329\ud1a0\ub9ac \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud560 \ub54c\u00a0<\/p>\n<pre class=\"lang: decode:true \">Disposable d = Disposables.empty();<\/pre>\n<p>\uc9c0\uae08\uc740 \uc774\ub807\uac8c \uc0ac\uc6a9 \uac00\ub2a5\ud558\ub2e4<\/p>\n<pre class=\"lang: decode:true\">Disposable d = Disposable.empty();<\/pre>\n<h4>DisposableContainer<\/h4>\n<p>\ub0b4\ubd80\uc801\uc73c\ub85c RxJava 2.x\ub294 \uc5b4\ub514\uc5d0\uc11c\ub098 CompositeDisposable\uc744 \uc0ac\uc6a9\ud558\ub294 \ub300\uc2e0 Disposable \ucee8\ud14c\uc774\ub108\uc758 \ucd94\uc0c1\ud654\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c \ubcf4\ub2e4 \uc801\ud569\ud55c \ucee8\ud14c\uc774\ub108 \uc720\ud615\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc774\ub294 CompositeDisposable \ubc0f \uae30\ud0c0 \ub0b4\ubd80 \ucef4\ud3ec\ub10c\ud2b8\ub85c \uad6c\ud604\ub41c \ub0b4\ubd80 DisposableContainer\ub97c \ud1b5\ud574 \ucc98\ub9ac\ub41c\ub2e4. \ubd88\ud589\ud558\uac8c\ub3c4, \uacf5\uc6a9 \ud074\ub798\uc2a4\ub294 \ub0b4\ubd80 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ucc38\uc870\ud588\uae30 \ub54c\ubb38\uc5d0 OSGi \ud658\uacbd\uc5d0\uc11c RxJava\uac00 \uacbd\uace0\ub97c \ubc1c\uc0dd\uc2dc\ud0a8\ub2e4. RxJava 3\uc5d0\uc11c DisposableContainer\ub294 \uc774\uc81c io.reactivex.rxjava3.disposables.DisposableContainer\uc5d0\uc788\ub294 \uacf5\uc6a9 API\uc758 \uc77c\ubd80\uc774\uba70 \ub354 \uc774\uc0c1 OSGi \ubb38\uc81c\ub97c \uc77c\uc73c\ud0a4\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n<h3>API \ud504\ub85c\ubaa8\uc158<\/h3>\n<p>RxJava 2.2.x \ub294 \uc5ec\uc804\ud788 \uc2e4\ud5d8\uc801\uc778 \uc5f0\uc0b0\uc790\ub4e4\uc744 \uac00\uc9c0\uace0 \uc788\uc5c8\ub2e4. \uc774\ub7ec\ud55c \uc5f0\uc0b0\uc790\ub4e4\uc774 3.x\uc5d0 \ud3ec\ud568\ub418\uc5c8\ub2e4.<\/p>\n<h5>Flowable<\/h5>\n<ul>\n<li><a href=\"http:\/\/reactivex.io\/RxJava\/3.x\/javadoc\/io\/reactivex\/rxjava3\/core\/Flowable.html#dematerialize-io.reactivex.rxjava3.functions.Function-\" rel=\"nofollow\"><code>dematerialize(Function)<\/code><\/a><\/li>\n<\/ul>\n<h5>Observable<\/h5>\n<ul>\n<li><a href=\"http:\/\/reactivex.io\/RxJava\/3.x\/javadoc\/io\/reactivex\/rxjava3\/core\/Observable.html#dematerialize-io.reactivex.rxjava3.functions.Function-\" rel=\"nofollow\"><code>dematerialize(Function)<\/code><\/a><\/li>\n<\/ul>\n<h5>Maybe<\/h5>\n<ul>\n<li><a href=\"http:\/\/reactivex.io\/RxJava\/3.x\/javadoc\/io\/reactivex\/rxjava3\/core\/Maybe.html#doOnTerminate-io.reactivex.rxjava3.functions.Action-\" rel=\"nofollow\"><code>doOnTerminate(Action)<\/code><\/a><\/li>\n<li><a href=\"http:\/\/reactivex.io\/RxJava\/3.x\/javadoc\/io\/reactivex\/rxjava3\/core\/Maybe.html#materialize--\" rel=\"nofollow\"><code>materialize()<\/code><\/a><\/li>\n<\/ul>\n<h5>Single<\/h5>\n<ul>\n<li><a href=\"http:\/\/reactivex.io\/RxJava\/3.x\/javadoc\/io\/reactivex\/rxjava3\/core\/Single.html#dematerialize-io.reactivex.rxjava3.functions.Function-\" rel=\"nofollow\"><code>dematerialize(Function)<\/code><\/a><\/li>\n<li><a href=\"http:\/\/reactivex.io\/RxJava\/3.x\/javadoc\/io\/reactivex\/rxjava3\/core\/Single.html#materialize--\" rel=\"nofollow\"><code>materialize()<\/code><\/a><\/li>\n<\/ul>\n<h5>Completable<\/h5>\n<ul>\n<li><a href=\"http:\/\/reactivex.io\/RxJava\/3.x\/javadoc\/io\/reactivex\/rxjava3\/core\/Completable.html#delaySubscription-long-java.util.concurrent.TimeUnit-\" rel=\"nofollow\"><code>delaySubscription(long, TimeUnit)<\/code><\/a><\/li>\n<li><a href=\"http:\/\/reactivex.io\/RxJava\/3.x\/javadoc\/io\/reactivex\/rxjava3\/core\/Completable.html#delaySubscription-long-java.util.concurrent.TimeUnit-io.reactivex.rxjava3.core.Scheduler-\" rel=\"nofollow\"><code>delaySubscription(long, TimeUnit, Scheduler)<\/code><\/a><\/li>\n<li><a href=\"http:\/\/reactivex.io\/RxJava\/3.x\/javadoc\/io\/reactivex\/rxjava3\/core\/Completable.html#materialize--\" rel=\"nofollow\"><code>materialize()<\/code><\/a><\/li>\n<\/ul>\n<h3>\ucd94\uac00\ub41c API<\/h3>\n<p>RxJava3\ub294 \uaf64 \ub9ce\uc740 \uc591\uc758 \uc0c8\ub85c\uc6b4 \uc5f0\uc0b0\uc790\uac00 \ucd94\uac00\ub418\uc5c8\ub2e4. \ucd94\uac00\ub41c \uc5f0\uc0b0\uc790\ub4e4\uc5d0 \ub300\ud574\uc11c \uc0b4\ud3b4\ubcf4\ub824\uba74 <a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#api-additions\">\ubb38\uc11c<\/a>\ub97c \ucc38\uc870\ud558\uc790.<\/p>\n<h3>\uc790\ubc14 8 \ucd94\uac00\uc0ac\ud56d<\/h3>\n<p>\uc774\uc81c\ub294 API\uae30\uc900\uc774 Java8\uc5d0 \ub9de\ucdb0\uc84c\ub2e4. RxJava\ub294 \uc9c1\uc811\uc801\uc73c\ub85c \uc790\ubc148\uc758 \uc0c8\ub85c\uc6b4 \ud0c0\uc785\ub4e4\uc744 \uc9c0\uc6d0\ud55c\ub2e4. RxJavaJdk8Interop\ub77c\uc774\ube0c\ub7ec\ub9ac \ub4f1 \uc678\ubd80 \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ud544\uc694 \uc5c6\ub2e4.<\/p>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc758 desugar\ub294 \uc790\ubc148 API\ub4e4\uc744 \ubaa8\ub450 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc744 \uc218\ub3c4 \uc788\ub2e4. \uadf8\ub798\ub3c4 \ub531\ud788 \ubb38\uc81c\ub294 \ub418\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n<h5>\uc790\ubc148 Functional \uc778\ud130\ud398\uc774\uc2a4\u00a0<\/h5>\n<p>RxJava3 \uc790\ubc14 8\uc758 functional \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc9c1\uc811\uc801\uc73c\ub85c\ub294 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294\ub2e4. \uc65c\ub0d0\ud558\uba74 RxJava\ub294 RxJava\ub0b4\uc5d0 \ud3ec\ud568\ub41c funtional \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uc120\ud638\ud55c\ub2e4. \uadf8\ub798\uc57c \ub354 \ub9ce\uc740 \ud50c\ub7ab\ud3fc\uc744 \uc9c0\uc6d0\ud558\uace0 \uc5d0\ub7ec\ub97c \ud578\ub4e4\ub9c1\ud558\uae30 \uc27d\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n<p>RxJava3 \uc5d0\uc11c\ub294 \uc790\ubc148 \ud328\ud0a4\uc9c0\uc5d0 \ud3ec\ud568\ub41c \ud0c0\uc785\uc744 Flowable, Observable \ub4f1\uc73c\ub85c \ubcc0\ud658\ud558\ub294 \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud558\uace0 \uc788\uc73c\uba70 mapOptional \uc5f0\uc0b0\uc790\ub97c \uc9c0\uc6d0\ud55c\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#java-8-additions\">\ubb38\uc11c<\/a>\ub97c \ud655\uc778\ud558\uc790<\/p>\n<p>&nbsp;<\/p>\n<h3>\ubcc0\uacbd\ub41c API \uc774\ub984<\/h3>\n<h4>startWith<\/h4>\n<p>startWith \uba54\uc18c\ub4dc \uc774\ub984\uc774 \uc560\ub9e4\ubaa8\ud638\ud55c \uacbd\uc6b0\uac00 \uc788\uc5c8\ub294\ub370,\u00a0 \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\uc815\ub418\uc5c8\ub2e4.<\/p>\n<h5>Flowable, Observable<\/h5>\n<ul>\n<li>startWithArray<\/li>\n<li>startWithItem<\/li>\n<li>startWithIterable<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h4>onErrorResumeNext<\/h4>\n<p>onErrorResumeNext\uac00 \uc774\ub984\uc774 \uc560\ub9e4\ubaa8\ud638\ud574\uc11c onErrorResumeWith\ub85c \ubcc0\uacbd\ub418\uc5c8\ub2e4.<\/p>\n<h4>zipIterable<\/h4>\n<p>zipIterable\uc744 zip\uc73c\ub85c \ubcc0\uacbd<\/p>\n<h4>\ubc30\uc5f4\uc744 \uc778\uc790\ub85c \uac16\ub294 combineLatest<\/h4>\n<p>combineLatestArray\uc640 combineLatestArrayDelayError\ub85c \uc774\ub984\uc744 \ubcc0\uacbd\ud588\ub2e4.<\/p>\n<h4>Single.equals<\/h4>\n<p>sequenceEqual\ub85c \uc774\ub984\uc744 \ubcc0\uacbd<\/p>\n<h4>Maybe.flatMapSingleElement<\/h4>\n<p>\uc774 \uc5f0\uc0b0\uc790\ub294 \ud63c\ub780\uc2a4\ub7ec\uc6e0\uace0, \uc774\ub984\uc744 flatMapSingle\ub85c \ubcc0\uacbd\ud588\ub2e4.<\/p>\n<h2>API \uc2dc\uadf8\ub2c8\ucc98 \ubcc0\uacbd\u00a0<\/h2>\n<h4>Callable \uc5d0\uc11c Supplier\ub85c \ubcc0\uacbd<\/h4>\n<p>\uc5d0\ub7ec\ucc98\ub9ac\ub97c \uc704\ud574 Callable \ub300\uc2e0 Supplier\ub97c \ud1b5\ud574 \ucf5c\ubc31\uc744 \ubc1b\ub294 \uac83\uc73c\ub85c \ubcc0\uacbd\ub418\uc5c8\uace0, \uadf8\ub85c \uc778\ud574 \ub0b4\ubd80 \uba54\uc18c\ub4dc \uc774\ub984\ub3c4 call()\uc5d0\uc11c get()\uc73c\ub85c \ubcc0\uacbd \ub418\uc5c8\ub2e4.<\/p>\n<h4>Maybe.defaultIfEmpty<\/h4>\n<p>\uc544\uc774\ud15c \ubc1c\ud589\uc758 \uc131\uacf5\uacfc \uc5d0\ub7ec\ub97c \ubcf4\uc7a5\ud558\uae30 \uc704\ud574 \ubc18\ud658 \ud0c0\uc785\uc744 Single\ub85c \uc218\uc815\ud588\ub2e4.<\/p>\n<h4>concatMapDelayError parameter order<\/h4>\n<p>prefetch \/ maxConcurrency \uc804\uc5d0 boolean \ub9e4\uac1c \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\ub294 \ub2e4\ub978 \uc5f0\uc0b0\uc790\uc640 \uc77c\uce58\ud558\ub3c4\ub85d concatMapDelayError \ubc0f concatMapEagerDelayError\uc5d0\uc11c tillTheEnd \uc778\uc218\uc758 \uc21c\uc11c\ub97c \ubcc0\uacbd\ud588\ub2e4.<\/p>\n<h4>Flowable.buffer with boundary source<\/h4>\n<p>Flowable\uc5d0 \uc2dc\uadf8\ub2c8\ucc98\uac00 \uc798\ubabb \uc120\uc5b8\ub418\uc5b4 \uc788\uc5c8\uace0, Publisher\ub85c \ubcc0\uacbd\ub428<\/p>\n<h4>Maybe.flatMapSingle<\/h4>\n<p>Maybe\uac00 empty\uc77c \ub54c flatMap\uc5f0\uc0ac\uc790\ub4e4\uc774 \uae30\ub300\ud558\ub294 \ubc29\uc2dd\ub300\ub85c \ub3d9\uc791\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 flatMapSingleElement\uc5f0\uc0ac\uc790\ub294 flatMapSingle \uc5f0\uc0b0\uc790\ub85c \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc5c8\ub2e4.<\/p>\n<h3>\uc81c\uac70\ub41c API\ub4e4<\/h3>\n<ul>\n<li>getValue(hot sources)<\/li>\n<li>Maybe.toSingle(T)<\/li>\n<li>subscribe(\uc778\uc790 4\uac1c \uc9dc\ub9ac)<\/li>\n<li>Single.toCompletable()<\/li>\n<li>Completable.blockingGet()<\/li>\n<li>\uae30\ud0c0 \ub4f1\ub4f1<\/li>\n<\/ul>\n<p>\uc790\uc138\ud55c \uc815\ubcf4\ub294 <a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0#api-removals\">\ubb38\uc11c<\/a>\ub97c \ud655\uc778\ud558\uc790<\/p>\n<h1>\uc0c1\ud638 \uc6b4\uc6a9\uc131<\/h1>\n<h2>Reactive Streams<\/h2>\n<p>RxJava 3\uc740 \uc5ec\uc804\ud788 \u200b\u200bReactive Streams \uc0ac\uc591\uc744 \ub530\ub974\ubbc0\ub85c io.reactivex.rxjava3.core.Flowable\uc740 org.reactivestreams.Publisher\ub97c \uc785\ub825\uc73c\ub85c \ubc1b\uc544\ub4e4\uc774\ub294 \ubaa8\ub4e0 3rd party \uc194\ub8e8\uc158\uc5d0 \ub300\ud574 \ud638\ud658 \uac00\ub2a5\ud55c \uc18c\uc2a4\ub2e4.<\/p>\n<h2>RxJava1<\/h2>\n<p>RxJava\ub294 7\ub144\uc774\uc0c1 \ub418\uc5c8\uace0, \ub9ce\uc740 \uc0ac\uc6a9\ub4e4\uc774 \uc5ec\uc804\ud788 \uc774\ub97c \uc774\uc6a9\ud558\uace0 \uc788\ub2e4. \uc774\ub7f0 \uc0c1\ud669\ub54c\ubb38\uc5d0 1.x\uc5d0\uc11c 3.x\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \ub3d5\ub294 \uc678\ubd80 <a href=\"https:\/\/github.com\/akarnokd\/RxJavaInterop#rxjavainterop\">\ub77c\uc774\ube0c\ub7ec\ub9ac<\/a>\ub97c \uc81c\uacf5 \ud558\uace0 \uc788\ub2e4.\u00a0<\/p>\n<h2>RxJava2<\/h2>\n<p>2.x\uc5d0\uc11c 3.x\ub85c \ub118\uc5b4\uac00\ub294\uac83\uc740 \uc131\uac00\uc2e4 \uc218 \uc788\ub2e4. \uc65c\ub0d0\ud558\uba74 2.x\ub9cc\uc758 \uc0dd\ud0dc\uacc4\uac00 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. RxJava3\ub294 RxJava2\uc640 \uac19\uc774 \uc0ac\uc6a9\ub420 \uc218 \uc788\ub3c4\ub85d \uc124\uacc4\ub418\uc5c8\uc9c0\ub9cc \ud55c\uacc4\uc810\uc740 \ubd84\uba85\ud788 \uc788\ub2e4. Flowable \uacfc Publisher\uc0ac\uc774\uc758 \uc0c1\ud638\uc6b4\uc6a9\uc744 \uc81c\ud55c\ud558\uace0 \uc788\uace0, 2.x\uc758 Observable\uc744 3.x\uc758 Observable\uacfc \uc0c1\ud638\uc6b4\uc6a9\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc774 \uc5c6\ub2e4. \uc774 \ub458\uc740 \uc644\uc804\uc774 \ub2e4\ub978 \ud0c0\uc785\uc774\ub2e4.<\/p>\n<p>\uc774\ub7f0 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 \uc810\uc9c4\uc801\uc778 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \ub3d5\uae30 \uc704\ud55c <a href=\"https:\/\/github.com\/akarnokd\/RxJavaBridge#rxjavabridge\">\ub77c\uc774\ube0c\ub7ec\ub9ac<\/a>\ub97c \uc81c\uacf5\ud558\uace0 \uc788\ub2e4.<\/p>\n<h3>Java 9 , Swing, Project\u00a0 Loom<\/h3>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0 \ud574\ub2f9 \uc0ac\ud56d \uc5c6\uc74c<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>RxJava 3.0 RxJava\ub780 \ube44\ub3d9\uae30\uc801\uc778 \uc774\ubca4\ud2b8 \uae30\ubc18\uc758 \ud504\ub85c\uadf8\ub7a8\uc744 \ub9cc\ub4e4 \ub54c \uc0ac\uc6a9\ud558\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c\uc368 \ubaa8\ub4e0 \uac83\uc744 \uc2a4\ud2b8\ub9bc\uc73c\ub85c \ucc98\ub9ac\ud55c\ub2e4. \uc774\ubc88 3.0.0 \ub9b4\ub9ac\uc988\uc5d0\ub294 \ucf54\ub4dc \uc804\ubc18\uc801\uc73c\ub85c \ub9ce\uc740 \uc815\ub9ac\uc640 \uc131\ub2a5 \uac1c\uc120\uc774 \uc774\ub8e8\uc5b4\uc84c\ub2e4\uace0 \ud55c\ub2e4. \uc5b4\ub5a4 \uc810\ub4e4\uc774 \uac1c\uc120\ub418\uace0 \ubcc0\ud654\ub418\uc5c8\ub294\uc9c0 \uc54c\uc544\ubcf4\uc790. \uba54\uc774\uc800 \ubc84\uc804\ub118\ubc84\uac00 \uc218\uc815\ub428\uc5d0 \ub530\ub77c \uc544\ud2f0\ud329\ud2b8 \uc544\uc774\ub514\ub3c4 \ubcc0\uacbd\uc774 \ub418\uc5c8\ub2e4. \uadf8\ub808\uc774\ub4e4\uc5d0 RxJava3\ub97c \ucd94\uac00\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub4c8\ub808\ubca8\uc758 build.gradle\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc744 \ucd94\uac00\ud574\uc57c\ud55c\ub2e4. dependencies [&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":[25,7],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/43954"}],"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=43954"}],"version-history":[{"count":6,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/43954\/revisions"}],"predecessor-version":[{"id":44512,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/43954\/revisions\/44512"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=43954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=43954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=43954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}