{"id":1090,"date":"2021-09-12T15:51:51","date_gmt":"2021-09-12T06:51:51","guid":{"rendered":"https:\/\/blog.enyou.net\/ko\/?p=1090"},"modified":"2021-09-12T21:11:51","modified_gmt":"2021-09-12T12:11:51","slug":"combine-%ec%82%b4%ed%8e%b4%eb%b3%b4%ea%b8%b0-publisher","status":"publish","type":"post","link":"https:\/\/blog.enyou.net\/ko\/archives\/1090","title":{"rendered":"Combine \uc0b4\ud3b4\ubcf4\uae30: Publisher"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Publisher<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Declares that a type can transmit a sequence of values over time.<\/p><p>\uc2dc\uac04\uc774 \uc9c0\ub0a8\uc5d0 \ub530\ub77c \uac12 \uc2dc\ud000\uc2a4\ub97c \ubcf4\ub0bc \uc218 \uc788\ub294 \ud0c0\uc785\uc744 \uc815\uc758\ud568. <\/p><cite><a href=\"https:\/\/developer.apple.com\/documentation\/combine\/publisher\" data-type=\"URL\" data-id=\"https:\/\/developer.apple.com\/documentation\/combine\/publisher\">Apple Documentation<\/a><\/cite><\/blockquote>\n\n\n\n<p>Combine\uc758 \ud37c\ube14\ub9ac\uc154\ub294 Observable\uc758 \uac1c\ub150\uc774\ub2e4. \ud37c\ube14\ub9ac\uc154\ub294 \uc2e4\uc81c \uad6c\ud604\uc774 \uc544\ub2cc Protocol\ub85c \uc815\uc758\ub418\uc5b4 \uc788\ub2e4. RX\uc758 \uacbd\uc6b0\uc5d0\ub294 Observable Class\uc758 \uad6c\ud604\uc744 \uc81c\uacf5\ud558\ub294 \uac83\uacfc \ucc28\uc774\uac00 \uc788\ub2e4. \ub530\ub77c\uc11c, Publisher\ub294 \uc5ec\ub7ec \uad6c\ud604\uccb4\ub97c \uac00\uc9c8 \uc218 \uc788\uace0, Future, Just, &#8230;. \uc640 \uac19\uc740 \ud3b8\uc758 \ud37c\ube14\ub9ac\uc154\ub97c \uc81c\uacf5\ud55c\ub2e4.<\/p>\n\n\n\n<p>Publisher \ud504\ub85c\ud1a0\ucf5c\uc744 \ucc44\ud0dd\ud558\ub294 Publisher\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 \ud504\ub85c\ud1a0\ucf5c \ucc44\ud0dd \ud6c4, Output, Failure: Error associatedType\uacfc receive(subscriber:) \ud568\uc218\ub97c \uad6c\ud604\ud574\uc57c\ud55c\ub2e4. \ub2e4\ub9cc, \uc560\ud50c\uc740 <strong>Publisher\ub97c \uc9c1\uc811 \uad6c\ud604\ud558\uae30\ub294 \uad8c\uc7a5\ud558\uc9c0 \uc54a\uace0<\/strong> \ub2e4\uc74c\uacfc \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \ucee4\uc2a4\ud140 Publisher\ub97c \ub9cc\ub4e4 \uac83\uc744 \ucd94\ucc9c\ud558\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Subject\ub97c \uc774\uc6a9\ud55c \uc0dd\uc131 (PassthroughSubject, CurrentValueSubject)<\/li><li>@Published property wrapper\ub97c \uc774\uc6a9\ud55c \uc0dd\uc131<\/li><\/ul>\n\n\n\n<p>Combine\uc758 Publisher\uac00 Subscriber\uc5d0\uac8c subscribe(_:) \ud568\uc218\ub85c \uad6c\ub3c5\ud560 \uc218 \uc788\uac8c \ud574\uc900\ub2e4. \uad6c\ud604\uc801\uc73c\ub85c\ub294 Publisher\uc5d0\uc11c Subscriber\ub97c \ubd99\uc774\ub294 \ud568\uc218\ub294 recieve(subscriber:)\uc774\uc9c0\ub9cc, \uc774\ub294 subscribe(_:) \ud568\uc218\uc5d0\uc11c \ub0b4\ubd80\uc801\uc73c\ub85c \uc774\uc6a9\ub418\uae30\ub97c \uae30\ub300\ud558\uace0, \uc2e4\uc81c \uc0ac\uc6a9\uc2dc\uc5d0\ub294 recieve(subscriber:)\ub97c \uc9c1\uc811 \uc0ac\uc6a9\ud558\uc9c0 \ub9d0\uace0, subscribe(_:)\ub97c \uc774\uc6a9\ud560 \uac83\uc744 \uad8c\uc7a5\ud55c\ub2e4.<\/p>\n\n\n\n<p>Subscriber\uac00 \uad6c\ub3c5\uc744 \uc2dc\uc791\ud558\uac8c \ub418\uba74, Publisher\ub294 Subscription\uc758 \uad6c\ud604\uc744 Subscriber\uc5d0 \uc8fc\uac8c \ub41c\ub2e4.<sup class=\"modern-footnotes-footnote \" data-mfn=\"1\" data-mfn-post-scope=\"00000000000005670000000000000000_1090\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005670000000000000000_1090-1\">1<\/a><\/sup><span id=\"mfn-content-00000000000005670000000000000000_1090-1\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"1\">RX\uc758 Cancelable\uacfc \ub3d9\uc77c\ud558\ub2e4.<\/span> Subscription\uc744 \ud1b5\ud574\uc11c Subcriber\ub294 Publisher\uc5d0 \uc2dc\ud000\uc2a4\ub97c \uc694\uccad\ud560 \uc218 \uc788\uace0, \ud544\uc694\uc5d0 \ub530\ub77c \uad6c\ub3c5\uc744 \ud574\uc81c\ud560 \uc218 \uc788\ub2e4. \uad6c\ub3c5 \ud6c4\uc5d0, Publisher\ub294 Subscriber\uc758 recieve(_:) \ud568\uc218\ub97c \ud1b5\ud574\uc11c \uac12\uc744 \uc804\uc1a1\ud55c\ub2e4.<sup class=\"modern-footnotes-footnote \" data-mfn=\"2\" data-mfn-post-scope=\"00000000000005670000000000000000_1090\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005670000000000000000_1090-2\">2<\/a><\/sup><span id=\"mfn-content-00000000000005670000000000000000_1090-2\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"2\">RXSwift\uc5d0\uc11c\ub294 on(_:) \ud568\uc218\ub97c \ud1b5\ud574 \uc804\uc1a1\ud568.<\/span><\/p>\n\n\n\n<p>Publisher\uac00 \uc81c\uacf5\ud558\ub294 \ub370\uc774\ud130\uc758 \uc2dc\ud000\uc2a4\uc5d0 \ubcc0\ud615\uc744 \uac00\ud558\uace0 \uc870\uc815\ud558\uae30 \uc704\ud574 Operator\ub97c \uc774\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Subject<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>A publisher that exposes a method for outside callers to publish elements.<\/p><p>\uc6d0\uc18c\ub97c \ubc1c\ud589\ud558\ub3c4\ub85d \uc678\ubd80 \ud638\ucd9c\uc790\uc5d0\uac8c \uba54\uc18c\ub4dc\ub97c \ub178\ucd9c\ud558\ub294 \ud37c\ube14\ub9ac\uc154.<\/p><\/blockquote>\n\n\n\n<p>Subject\ub294 Publisher \ud504\ub85c\ud1a0\ucf5c\uc744 \ucc44\ud0dd\ud558\uace0, \uc678\ubd80\uc5d0\uc11c \uac12\uc744 \uc8fc\uc785\ubc1b\uc544 \ubc1c\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 Publisher\uc774\ub2e4. \ub530\ub77c\uc11c, \uc678\ubd80 \uc8fc\uc785\uc744 \uc704\ud55c send() \uba54\uc18c\ub4dc\ub4e4\uc744 \ucd94\uac00\uc801\uc73c\ub85c \uad6c\ud604\ud574\uc57c\ud55c\ub2e4.<\/p>\n\n\n\n<p>Combine\uc758 Subject\uc640 RX\uc758 Subject\ub294 \ub611\uac19\uc740 \uc6a9\ub3c4\ub85c \uc774\uc6a9\ub418\uae34 \ud558\uc9c0\ub9cc \uac1c\ub150\uc801\uc73c\ub85c\ub294 \uc0b4\uc9dd \ub2e4\ub978 \ubd80\ubd84\uc774 \uc788\ub294 \uac83 \uac19\ub2e4. RX \ud648\ud398\uc774\uc9c0\uc5d0\uc11c Subject\ub97c \uc124\uba85\ud558\uae30\uc5d0,<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>\uc8fc\uc81c(subject)\ub294 \uc635\uc800\ubc84\ub098 Observable\ucc98\ub7fc \ud589\ub3d9\ud558\ub294 ReactiveX\uc758 \uc77c\ubd80 \uad6c\ud604\uccb4\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud55c \uc77c\uc885\uc758 \uad50\uac01 \ud639\uc740 \ud504\ub85d\uc2dc\ub77c\uace0 \ubcfc \uc218 \uc788\ub294\ub370, \uadf8 \uc774\uc720\ub294 \uc8fc\uc81c\ub294 \uc635\uc800\ubc84\uc774\uae30 \ub54c\ubb38\uc5d0 \ud558\ub098 \uc774\uc0c1\uc758 Observable\uc744 \uad6c\ub3c5\ud560 \uc218 \uc788\uc73c\uba70 \ub3d9\uc2dc\uc5d0 Observable\uc774\uae30\ub3c4 \ud558\uae30 \ub54c\ubb38\uc5d0 \ud56d\ubaa9\ub4e4\uc744 \ud558\ub098 \ud558\ub098 \uac70\uce58\uba74\uc11c \uc7ac\ubc30\ucd9c\ud558\uace0 \uad00\ucc30\ud558\uba70 \uc0c8\ub85c\uc6b4 \ud56d\ubaa9\ub4e4\uc744 \ubc30\ucd9c\ud560 \uc218\ub3c4 \uc788\ub2e4.<\/p><\/blockquote>\n\n\n\n<p>\ub77c\uace0 \uc124\uba85\ud558\uace0 \uc788\ub2e4. \ub530\ub77c\uc11c, Subject\ub294 Observer\uc774\uba74\uc11c, Observable\uc774\ub2e4. RX\uc5d0\uc11c\ub294 Subject\uac00 Observable\uc758 \uc0c1\uc18d\uc774\uc9c0\ub9cc, ObserverType\uc744 \ucc44\ud0dd\ud558\uace0 \uc788\uae30 \ub54c\ubb38\uc5d0 \ub2e4\ub978 \uc635\uc800\ubc84\uc640 \ub3d9\uc77c\ud558\uac8c on() \uba54\uc18c\ub4dc\ub85c \uac12\uc744 \ubc1b\uac8c \ub418\uc5b4 \uc788\ub2e4.  \uadf8\ub7ec\ub098, Combine\uc5d0\uc11c\ub294 \uc8fc\uc785\uc744 \ubc1b\uc744 \uc218 \uc788\ub294 Publisher\ub85c Subject\ub97c \ud574\uc11d\ud558\uace0 \uc788\uae30 \ub54c\ubb38\uc5d0, Subscriber\uc758 recive(:)\uac00 \uc544\ub2cc send(:) \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uace0, \ub530\ub85c Subscriber\ub97c \ucc44\ud0dd\ud558\uace0 \uc788\uc9c0 \uc54a\ub2e4.<\/p>\n\n\n\n<p>\uc77c\ubc18\uc801\uc73c\ub85c \ub0b4\uac00 \uc0ac\uc6a9\ud588\uc744 \ub54c\uc5d0\ub3c4 \ubcf4\ud1b5\uc740 \uc8fc\uc785\uc744 \ud558\ub294 \uc6a9\ub3c4\ub85c\ub9cc Subject\ub97c \uc0ac\uc6a9\ud588\uc9c0, Observer\uc758 \uc6a9\ub3c4\ub85c Subject\ub97c \uc0ac\uc6a9\ud560 \uc0dd\uac01\uc740 \ud574\ubcf8 \uc801\uc774 \uc5c6\uc5b4\uc11c Combine\uc758 \ud574\uc11d\uc774 \ub354 \uc9c1\uad00\uc801\uc778\ub370, \ub2e4\ub978 \uc0ac\ub78c\uc740 \uc5b4\ub5bb\uac8c \ud574\uc11d\ud558\ub294 \uc9c4 \ubaa8\ub974\uaca0\ub2e4.<\/p>\n\n\n\n<p>Combine\uc5d0\uc11c\ub294 Subject\uc758 \uad6c\ud604\uccb4\ub85c CurrentValueSubject\uc640 PassThroughSubject\ub97c \uc81c\uacf5\ud558\uace0 \uc788\ub2e4. CurrentValueSubject\ub294 \ucd5c\uadfc\uc758 \uac12\uc5d0 \ub300\ud55c \ubc84\ud37c\ub97c \uac00\uc9c0\uace0 \uc788\uc5b4\uc11c \uad6c\ub3c5\ud558\ub294 \uc21c\uac04 \ucd5c\uadfc \uac12\uc758 \ubc84\ud37c\ub97c \ubc1b\uac8c \ub418\uace0, PassThroughSubject\ub294 \uadf8\ub807\uc9c0 \uc54a\uc544\uc11c \uac12\uc774 \uc8fc\uc785\ub418\ub294 \uc2dc\uc810\uc5d0\uc11c\ub9cc Subscriber\uac00 \uc0c8\ub85c\uc6b4 \uac12\uc744 \ubc1b\uc744 \uc218 \uc788\uac8c \ub41c\ub2e4.<sup class=\"modern-footnotes-footnote \" data-mfn=\"3\" data-mfn-post-scope=\"00000000000005670000000000000000_1090\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005670000000000000000_1090-3\">3<\/a><\/sup><span id=\"mfn-content-00000000000005670000000000000000_1090-3\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"3\">\uac01\uac01 BehaviorSubject, PublishSubject\uc640 \uc720\uc0ac\ud558\ub2e4.&nbsp;RX\uc5d0\uc11c\ub294 \ub9c8\uc9c0\ub9c9 \uac12 \ubc30\ucd9c\ub9cc\uc744 \uc704\ud55c AysncSubject\uc640&nbsp;\uc2a4\ud2b8\ub9bc\uc744 \uc804\ubd80 \uc800\uc7a5\ud588\ub2e4\uac00 \uad6c\ub3c5 \uc2dc\uc810\uc5d0\uc11c \ubaa8\ub450 \ubc30\ucd9c\ud574\uc8fc\ub294 ReplaySubject\uac00 \uc874\uc7ac\ud558\uc9c0\ub9cc,&nbsp;Combine\uc5d0\ub294 \uc5c6\ub2e4.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">@Published<\/h3>\n\n\n\n<p>Combine\uc744 \uc774\uc6a9\ud574 \uc800\uc7a5\uc18c\uac00 \uc788\ub294 Publisher\ub97c \ub9cc\ub4dc\ub294 \ub370\uc5d0 @Published \uc5b4\ub178\ud14c\uc774\uc158\uc744 \uc4f4\ub2e4. Publisher\ub77c\ub294 Structure\ub97c PropertyWrapper\ub85c \ud45c\ud604\ud55c \uac83\uc778\ub370, \uae30\uc874\uacfc \ub3d9\uc77c\ud55c \ubc29\uc2dd\uc73c\ub85c \ubcc0\uc218\ub97c \uc120\uc5b8\ud558\uba74\uc11c\ub3c4 @Published \uc5b4\ub178\ud14c\uc774\uc158\ub9cc \uc55e\uc5d0 \ubd99\uc774\uba74 \ubcc0\uc218\uc5d0 \ub300\ud55c Publisher\ub97c \uc27d\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub2e4.(@Published\ub294 Class\uc5d0\uc11c\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.&nbsp;\uc544\ub9c8\ub3c4 Published&nbsp;\uc790\uccb4\uac00 Structure\uc774\uae30 \ub54c\ubb38\uc5d0 \uac12 \ubcf5\uc0ac\ub85c \uc778\ud55c \ud63c\ub3c8\uc744 \ubc29\uc9c0\ud558\ub824\uace0 \uadf8\ub7f0 \uc81c\ud55c\uc744 \ub450\uc9c0 \uc54a\uc558\ub0d0\ub294 \uc0dd\uac01\uc774 \ub4e4\uc9c0\ub9cc,&nbsp;\uc815\ud655\ud788 \ub9c9\ud600\uc788\ub294 \uc774\uc720\ub294 \uc54c \uc218 \uc5c6\ub2e4.)<sup class=\"modern-footnotes-footnote \" data-mfn=\"4\" data-mfn-post-scope=\"00000000000005670000000000000000_1090\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005670000000000000000_1090-4\">4<\/a><\/sup><span id=\"mfn-content-00000000000005670000000000000000_1090-4\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"4\">\uc774\ub7ec\ud55c \ucee4\uc2a4\ud140 PropertyWrapper\ub97c \uc791\uc131\ud558\ub294 \uac83\uc740 \uc5b4\ub835\uc9c0 \uc54a\uc9c0\ub9cc,&nbsp;\uc801\uc6a9\ubc94\uc704\ub97c Class\ub85c \ud55c\uc815\uc2dc\ud0a4\ub294 \ubc29\ubc95\uc740 \ub530\ub85c \uacf5\uac1c\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc740 \uac83 \uac19\ub2e4.<\/span><\/p>\n\n\n\n<p>\ub0b4\ubd80\uc801\uc73c\ub85c Published\ub294 \ubcc0\uc218\uc5d0 \ub300\ud55c Storage\ub97c \uac00\uc9c0\uba74\uc11c\ub3c4, \ud0c0\uc785 \ub0b4\ubd80\uc5d0 \uc120\uc5b8\ud55c Publisher \uad6c\ud604\uccb4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uc9c0\ub2cc\ub2e4. \uadf8 Publisher\ub294 ProjectedValue\ub85c \ub178\ucd9c\ub418\uace0,&nbsp;\uad6c\ub3c5\ud560 \uc218 \uc788\ub2e4.($&nbsp;\uc5b4\ub178\ud14c\uc774\uc158) \ub530\ub77c\uc11c, \ubcc4\ub2e4\ub978 \ub178\ub825 \uc5c6\uc774 \ubcc0\uc218\uc758 \ubcc0\ud654\ub97c Subscriber\ub97c \ud1b5\ud574 \uad00\ucc30\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uad6c\ud604\uacfc \uac1c\ub150\uc801\uc73c\ub85c\ub294 \uc0c1\ub2f9\ud788 \ub2e4\ub978 \ubd80\ubd84\uc774 \uc788\uc9c0\ub9cc,&nbsp;\ubaa8\ub378\uc774 \uac00\uc9c4 \uac12\uc744 \uc27d\uac8c \uad6c\ub3c5\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 RX\uc5d0\uc11c\ub294 BehaviorRelay(\u2190BehaviorSubject\uc758 .completed, .error\ub97c \ubb34\uc2dc\ud558\uace0 \uacc4\uc18d \uad6c\ub3d9\ud558\ub294 wrapper)\ub85c \uc791\uc131\ud560 \uc218 \uc788\ub294 \ubd80\ubd84\uc744 Published\ub85c \uc791\uc131\ud560 \uc218 \uc788\uace0, \ub098\uc5d0\uac8c\ub294 \uc774 \ubc29\uc2dd\uc774 \ub354 \uc9c1\uad00\uc801\uc73c\ub85c \ub290\uaef4\uc9c4\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cancellable<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>A protocol indicating that an activity or action supports cancellation.<\/p><p>\ucde8\uc18c\ub97c \uc9c0\uc6d0\ud558\ub294 \ud65c\ub3d9\uc774\ub098 \ud589\ub3d9\uc744 \ub098\ud0c0\ub0b4\ub294 \ud504\ub85c\ud1a0\ucf5c<\/p><\/blockquote>\n\n\n\n<p>Cancellable\ub85c \uac01 \uc778\uc2a4\ud134\uc2a4\uc5d0 \ub300\ud55c \ucde8\uc18c\ub97c \uc9c0\uc6d0\ud560 \uc218 \uc788\ub2e4.<sup class=\"modern-footnotes-footnote \" data-mfn=\"5\" data-mfn-post-scope=\"00000000000005670000000000000000_1090\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005670000000000000000_1090-5\">5<\/a><\/sup><span id=\"mfn-content-00000000000005670000000000000000_1090-5\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"5\">\uc2a4\ud2b8\ub9bc \uad6c\ub3c5\uc744 \ucde8\uc18c\ud55c\ub2e4\ub294 \uc758\ubbf8\uc774\uc9c0,\u00a0\uad6c\ub3c5\ud558\uba74\uc11c \ud65c\ub3d9\ud560 \ub54c \ubc14\ub85c \ud589\ub3d9\uc744 \ucde8\uc18c\uc2dc\ud0ac \uc218 \uc788\ub2e4\ub294 \uc774\uc57c\uae30 \uc544\ub2d8.<\/span> Cancellable\uc774 \uc0dd\uc131\ub41c \uc774\ud6c4 deinit\ub9cc\uc73c\ub85c \uad6c\ub3c5\uc774 \ub05d\ub098\uc9c0\ub294 \uc54a\uace0,\u00a0\uba85\uc2dc\uc801\uc73c\ub85c cancel()\uc744 \ud638\ucd9c\ud574\uc57c\ud55c\ub2e4.\u00a0\ub610\ub294,\u00a0AnyCancellable\uc744 \ud1b5\ud574 Cancellable\uc744 \uac10\uc2f8\uc8fc\uba74 AnyCancellable\uc744 denit\ud558\ub294 \uc2dc\uc810\uc5d0 \uc790\ub3d9\uc73c\ub85c \uc2a4\ud2b8\ub9bc\uad6c\ub3c5\uc744 \ucde8\uc18c\ud55c\ub2e4.<sup class=\"modern-footnotes-footnote \" data-mfn=\"6\" data-mfn-post-scope=\"00000000000005670000000000000000_1090\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005670000000000000000_1090-6\">6<\/a><\/sup><span id=\"mfn-content-00000000000005670000000000000000_1090-6\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"6\">\uadf8\ub7f0\ub370,\u00a0\ud604\uc7ac \ubc84\uc804\uc5d0\uc11c\ub294 Cancellable\ub85c \uc120\uc5b8\ud55c \ud6c4\uc5d0 nil\ub85c \ucd08\uae30\ud654\ud574\ub3c4 \uc798 cancel\ub418\ub294 \uac83\uc73c\ub85c \ubcf4\uc778\ub2e4.\u00a0\uc5b4\ub290 \uc2dc\uc810\uc5d0 \ubcc0\ud654\uac00 \uc788\uc5c8\ub294 \ub4ef \ud568.\u00a0\uac80\uc0c9\ud574\ubcf4\uba74 \ubd84\uba85 cancel()\uc744 \ud638\ucd9c\ud574\uc57c \uad6c\ub3c5\uc774 \ub05d\ub0ac\ub294\ub370,\u00a0\uc9c0\uae08\uc740 AnyCancellable\uc774 \uc544\ub2cc Cancellable\uc758 denit\uc73c\ub85c\ub3c4 cancel\uc774 \ud638\ucd9c\ub418\uace0 \uc788\uc74c.<\/span><\/p>\n\n\n\n<p>RX\uc758 Disposable\uacfc \ub3d9\uc77c\ud55c \uac1c\ub150\uc774\uba70, AnyCancellable\uc744 Collection\uc758 \ud615\ud0dc\ub85c \uc4f0\ub294 \uac83\uc740 DIsposeBag()\uc758 \uc5ed\ud560\uacfc \uc720\uc0ac\ud558\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">ConnectablePublisher<\/h3>\n\n\n\n<p>\ud558\ub098\uc758 Publisher\uc5d0 \uc5ec\ub7ec \uac1c\uc758 Subscriber\uac00 \ubd99\uc744 \ub54c, \ud504\ub85c\uadf8\ub798\uba38\uac00 \ud2b9\uc815 \uc870\uac74\uc774 \ub9cc\uc871\ub420 \uc218 \uc788\uc744 \ub54c\uae4c\uc9c0 \ubc1c\ud589\uc744 \uc9c0\uc5f0\uc2dc\ud0ac \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 \ud37c\ube14\ub9ac\uc154\uc774\ub2e4. makeConnectable() \uc624\ud37c\ub808\uc774\ud130\ub85c \ub9cc\ub4e4 \uc218 \uc788\uc73c\uba70, makeConnectable()\uc774 \ub9cc\ub4e0 \ud37c\ube14\ub9ac\uc154\uc5d0 connect()\ub97c \ud638\ucd9c\ud558\uae30 \uc804\uae4c\uc9c0 \ubc1c\ud589\uc744 \uc9c0\uc5f0\uc2dc\ud0a8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct ExamplePublisher: Publisher {\n    typealias Output = Int\n    typealias Failure = Never\n    \n    func receive<S>(subscriber: S) where S : Subscriber, Never == S.Failure, Int == S.Input {\n        Swift.print(\"\uad6c\ub3c5 \uc694\uccad\ud568!\")\n        let subscription = InternalSubscription(subscriber: subscriber)\n        subscriber.receive(subscription: subscription)\n    }\n}\n \nextension ExamplePublisher {\n    class InternalSubscription<S: Subscriber>: NSObject, Subscription where Never == S.Failure, Int == S.Input {\n        let subscriber: S\n        \n        init(subscriber: S) {\n            self.subscriber = subscriber\n        }\n        \n        func request(_ demand: Subscribers.Demand) {\n            Swift.print(\"\uc11c\ube0c\uc2a4\ud06c\ub9bd\uc158\uc774 \ub9ac\ud018\uc2a4\ud2b8\ub97c \ubc1b\uc74c!\")\n            \n            let demand = subscriber.receive(32)\n        }\n        \n        func cancel() {\n            subscriber.receive(completion: .finished)\n        }\n    }\n}\n \nlet publisher = ExamplePublisher()\nlet connectablePublisher = publisher.makeConnectable()\n \nlet sub1 = connectablePublisher\n    .sink { value in\n        print(\"First subscriber \\(value)\")\n    }\n \nlet sub2 = connectablePublisher\n    .sink { value in\n        print(\"second subscriber \\(value)\")\n    }\n \nprint(\"\ubaa8\ub450 \uad6c\ub3c5\ud568!\")\n \nlet connection = connectablePublisher.connect()\n \nwhile true {\n    RunLoop.main.run()\n}\n \n\ud638\ucd9c \uacb0\uacfc:\n \nconnectablePublisher\ub97c \uc774\uc6a9\ud588\uc744 \ub54c,\n\ubaa8\ub450 \uad6c\ub3c5\ud568!\n\uad6c\ub3c5 \uc694\uccad\ud568!\n\uc11c\ube0c\uc2a4\ud06c\ub9bd\uc158\uc774 \ub9ac\ud018\uc2a4\ud2b8\ub97c \ubc1b\uc74c!\nsecond subscriber 32\nFirst subscriber 32\n \n\uc774\uc6a9\ud558\uc9c0 \uc54a\uc558\uc744 \ub54c,\n\uad6c\ub3c5 \uc694\uccad\ud568!\n\uc11c\ube0c\uc2a4\ud06c\ub9bd\uc158\uc774 \ub9ac\ud018\uc2a4\ud2b8\ub97c \ubc1b\uc74c!\nFirst subscriber 32\n\uad6c\ub3c5 \uc694\uccad\ud568!\n\uc11c\ube0c\uc2a4\ud06c\ub9bd\uc158\uc774 \ub9ac\ud018\uc2a4\ud2b8\ub97c \ubc1b\uc74c!\nsecond subscriber 32\n\ubaa8\ub450 \uad6c\ub3c5\ud568!<\/code><\/pre>\n\n\n\n<p>\uc608\uc2dc\ub85c \uc791\uc131\ud55c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uba74, ConnectablePublisher\ub294 connect() \ud568\uc218\uac00 \ud638\ucd9c\ub420 \ub54c\uae4c\uc9c0, \ub300\uc0c1 Publisher\uc5d0 \ub300\ud55c \uad6c\ub3c5\uc744 \uc9c0\uc5f0\ud558\uace0, connect()\uac00 \ud638\ucd9c\ub418\ub294 \uc21c\uac04 \uad6c\ub3c5\uc744 \uac1c\uc2dc\ud558\uba74\uc11c, \ud558\uc704 Subscriber\uc5d0 \uc2dc\ud000\uc2a4\ub97c \ub098\ub220\uc900\ub2e4.<\/p>\n\n\n\n<p>\uad6c\ub3c5\uc774 \uc9c0\uc5f0\ub418\uae30 \ub54c\ubb38\uc5d0, Apple Document\uc5d0\uc11c\ub294 URLRequest\uc640 \uac19\uc740 \uac83\uc744 Combine\uc73c\ub85c \uc791\uc131\ud560 \ub54c, \ub450 \uac1c \uc774\uc0c1 \uc11c\ube0c\uc2a4\ud06c\ub77c\uc774\ubc84\uac00 \ud574\ub2f9 \uc694\uc18c\ub97c \uc774\uc6a9\ud560 \ud544\uc694\uac00 \uc788\uc744 \uacbd\uc6b0, connect()\uac00 \ud638\ucd9c\ub41c \uc774\ud6c4\ubd80\ud130 \uc694\uccad\uc774 \uc2dc\uc791\ub418\uac8c \ud558\uc5ec \uacbd\uc7c1 \uc0c1\ud0dc\ub97c \ubc29\uc9c0\ud558\ub294\ub370 \uc774\uc6a9\ud558\ub77c\uace0 \uc54c\ub824\uc8fc\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<p>\ub610\ud55c, Mulicast \ud37c\ube14\ub9ac\uc154 \ub610\ub294, TimerPublisher\ub294 \uc560\ucd08\uc5d0 ConnectablePublisher\uc778\ub370, \uc774\ub97c \uc77c\ubc18 Publihser\uc640 \uac19\uc774 \uc774\uc6a9\ud558\ub824\uba74 autoconnect() \uc624\ud37c\ub808\uc774\ud130\ub97c \uc774\uc6a9\ud574\uc11c connect() \uba54\uc18c\ub4dc \ud638\ucd9c \uc5c6\uc774 \uc774\uc6a9\ud560 \uc218 \uc788\ub2e4\uace0 \uc54c\ub824\uc8fc\uace0 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub294 RX \ud648\ud398\uc774\uc9c0\uc5d0\uc11c \uc18c\uac1c\ud558\ub294 &#8220;Hot&#8221; (\uc77c\ubc18\uc801\uc778 Publisher)\uacfc &#8220;Cold&#8221;\uc758 \uac1c\ub150\uacfc \uc720\uc2dc\ud558\uace0, RX\uc5d0\uc11c\ub3c4 \ub3d9\uc77c\ud55c \ubc29\uc2dd\uc758 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud558\uace0 \uc788\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Publisher Declares that a type can transmit a sequence of values over time. \uc2dc\uac04\uc774 \uc9c0\ub0a8\uc5d0 \ub530\ub77c \uac12 \uc2dc\ud000\uc2a4\ub97c \ubcf4\ub0bc \uc218 \uc788\ub294 \ud0c0\uc785\uc744 \uc815\uc758\ud568. Apple Documentation Combine\uc758 \ud37c\ube14\ub9ac\uc154\ub294 Observable\uc758 \uac1c\ub150\uc774\ub2e4. \ud37c\ube14\ub9ac\uc154\ub294 \uc2e4\uc81c \uad6c\ud604\uc774 \uc544\ub2cc Protocol\ub85c \uc815\uc758\ub418\uc5b4 \uc788\ub2e4. RX\uc758 \uacbd\uc6b0\uc5d0\ub294 Observable Class\uc758 \uad6c\ud604\uc744 \uc81c\uacf5\ud558\ub294 \uac83\uacfc \ucc28\uc774\uac00 \uc788\ub2e4. \ub530\ub77c\uc11c, Publisher\ub294 \uc5ec\ub7ec \uad6c\ud604\uccb4\ub97c \uac00\uc9c8 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[19],"class_list":["post-1090","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-combine-"],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts\/1090"}],"collection":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/comments?post=1090"}],"version-history":[{"count":13,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts\/1090\/revisions"}],"predecessor-version":[{"id":1115,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts\/1090\/revisions\/1115"}],"wp:attachment":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/media?parent=1090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/categories?post=1090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/tags?post=1090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}