Skip to content

Latest commit

ย 

History

History
41 lines (24 loc) ยท 3.4 KB

Combine1.md

File metadata and controls

41 lines (24 loc) ยท 3.4 KB

Combine ์‹œ์ž‘ํ•˜๊ธฐ(1)-Overview

Combine์€ ๋ฌด์—‡์ธ๊ฐ€?

Apple์€ Combine์— ๋Œ€ํ•ด ์ด๋ ‡๊ฒŒ ์ •์˜ํ–ˆ๋‹ค.

A Unified, declarative API for processing values over time ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๊ฐ’๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ†ตํ•ฉ์ ์ด๊ณ  ์„ ์–ธ์ ์ธ API

  • Unified: Apple์€ ๊ธฐ์กด ๋น„๋™๊ธฐ ์ธํ„ฐํŽ˜์ด์Šค๋กœ Target/action, Notification Center, URLSession, KVO, ์ฝœ๋ฐฑ ๋“ฑ์˜ ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด์„œ Combine์ด ์ด๋“ค์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ด๋“ค์„ ๊ฐ™์€ ํ˜•ํƒœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค๋Š” ์ ์—์„œ ํ†ตํ•ฉ์ (Unified)๋ผ๋Š” ํ‘œํ˜„์„ ์‚ฌ์šฉํ–ˆ๋‹ค. (๋‹ค๋งŒ Target/Action์„ SwiftUI๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ฑ„๋กœ Combine์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š”์ง„ ์•„์ง ๋ฐœ๊ฒฌx)
  • Declarative: ๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ๋“ฑ์˜ ์ œ์–ด ํ๋ฆ„(Control Flow)์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋กœ์ง๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ œ์–ด ํ๋ฆ„์€ map, filter ๋“ฑ์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ๋“ค(primitives)์— ์˜ํ•ด ๊ฐ€๋ ค์ง€๊ฒŒ ๋œ๋‹ค.
  • Processing values over time: ๋™์ž‘์— ๋”ฐ๋ผ ๊ฐ’์„ ํ•œ๊บผ๋ฒˆ์— ๋ฐ›์ง€ ์•Š๊ณ , ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์— ๋”ฐ๋ผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ›๊ฒŒ ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

Combine์˜ ์›๋ฆฌ

Combine์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Publisher: ๊ฐ’๊ณผ ์—๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด์ด๋‹ค. Publisher๋Š” ํ”„๋กœํ† ์ฝœ์ด์ง€๋งŒ, ์ด ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋Š” ํƒ€์ž…์€ ๊ฐ•์ œํ•˜๋Š” ๋ถ€๋ถ„์€ ์—†์ง€๋งŒ ๊ฐ’ํƒ€์ž…(struct)์ด ์ ์ ˆํ•˜๋‹ค.
  • Subscriber: Publisher๋กœ๋ถ€ํ„ฐ ๊ฐ’์„ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค. Subscriber๋Š” identity๊ฐ€ ์žˆ์–ด์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ ํƒ€์ž…(class)์œผ๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • Operator: Publisher์˜ ์ผ์ข…์œผ๋กœ, ๋‹ค๋ฅธ Publisher์—์„œ ๋‚˜์˜จ ๊ฐ’์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํŠนํ™”๋˜์–ด ์žˆ๋Š” Publisher์ด๋‹ค. Operator๋Š” ์ง์ ‘ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋Š” ์—†๊ณ , Publisher์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋งŒ๋“ค๋„๋ก ์บก์Šํ™”๋˜์–ด ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ Operator๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์—ฐ๊ฒฐํ•ด์„œ ์›ํ•˜๋Š” ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒŒ Combine์„ ํ™œ์šฉํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ํ•ต์‹ฌ์ด๋‹ค.

Combine์˜ ๋™์ž‘ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Publisher์™€ Subscriber๋ฅผ ๋งŒ๋“ค๊ณ , Subscriber๋Š” Publisherd์˜ Subscribe(_) ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด Publisher๋ฅผ ๊ตฌ๋…ํ•œ๋‹ค.
  2. Publisher๋Š” ์—ฐ์‚ฐ ๋ฐฉ๋ฒ•๊ณผ ์—ฐ์‚ฐ์— ํ•„์š”ํ•œ ์ƒํƒœ๋ฅผ ์บก์Šํ™”ํ•œ Subscription ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ Subscriber์— ๋ณด๋‚ธ๋‹ค.
  3. Subscriber๋Š” Subscription์— ์ž์‹ ์ด ์›ํ•˜๋Š” ์ด๋ฒคํŠธ์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” Demand๋ฅผ ๋งŒ๋“ค์–ด์„œ Subscription์— ๋ณด๋‚ธ๋‹ค.
  4. Subscription์€ Demand๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ์ ˆํ•œ ์–‘์˜ ๊ฐ’ ๋˜๋Š” ์™„๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ธ๋‹ค. Demand๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ง€๋Š” ์™„์ „ํžˆ Subscription์˜ ์žฌ๋Ÿ‰์œผ๋กœ, ์ •ํ™•ํ•œ ์ˆ˜์˜ ๊ฐ’์„ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๊ณ  ๊ทธ๋ณด๋‹ค ์ ์€ ์ˆ˜, ํ˜น์€ ๋งŽ์€ ์ˆ˜๋ฅผ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค. (์• ํ”Œ์˜ API๋Š” ์š”์ฒญ๋Ÿ‰์— ๋งž๊ฒŒ ๋ณด๋‚ด์ฃผ๊ณ , ๋” ์ด์ƒ ๋ณด๋‚ผ ์ˆ˜ ์—†์œผ๋ฉด ์™„๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๋„๋ก ๋˜์–ด)
  5. Subscription์€ ํ•„์š”ํ•œ ๋•Œ์— Subscriber์— ์™„๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  6. ์™„๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์€ Subscriber๋Š” ์ž‘์—…์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋ฉด ํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

https://developer.apple.com/wwdc19/722

https://jcsoohwancho.github.io/2020-01-18-Combine-์‹œ์ž‘ํ•˜๊ธฐ(1)-Overview/