Skip to content

Latest commit

ย 

History

History
35 lines (21 loc) ยท 2.56 KB

File metadata and controls

35 lines (21 loc) ยท 2.56 KB

Combine ์‹œ์ž‘ํ•˜๊ธฐ(4)-Scheduler

Scheduler๋Š” ๋ฌด์—‡์ธ๊ฐ€?

Scheduler๋Š” ์–ธ์ œ(์‹œ๊ฐ„), ์–ด๋–ป๊ฒŒ(์Šค๋ ˆ๋“œ) Publisher์˜ ์ž‘์—…๋“ค์ด ์ˆ˜ํ–‰๋ ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ด๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ์žˆ์–ด์„œ ์‹œ๊ฐ„๊ณผ ์Šค๋ ˆ๋“œ ์ „ํ™˜ ๋“ฑ์˜ ์˜ต์…˜์€ ํ•„์ˆ˜์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š”๋ฐ, ์‹œ๊ฐ„ ํ˜น์€ ์Šค๋ ˆ๋“œ ๊ด€๋ จ Operator๋Š” ์ด Scheduler๋ฅผ ์ธ์ž๋กœ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฐ์ฒด์ด๊ธฐ๋„ ํ•˜๋‹ค.

Scheduler ์‚ฌ์šฉํ•˜๊ธฐ

Scheduler๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žˆ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹๋‹ค. Apple์ด ์ œ๊ณตํ•˜๋Š” Schedulerํƒ€์ž… ๊ฐ์ฒด๋Š” DispatchQueue, OperationQueue, RunLoop ๋“ฑ์œผ๋กœ, ์ด๋ฏธ ์ด์ „๋ถ€ํ„ฐ ์‹œ๊ฐ„๊ณผ ์Šค๋ ˆ๋“œ ์ „ํ™˜์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋˜ ๊ฐ์ฒด๋“ค์ด๋‹ค. ์ฆ‰, ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ ๊ฐ์ฒด๋“ค ๊ทธ๋Œ€๋กœ Combine์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์กด์— DispatchQueue๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Closure๋ฅผ ์ง์ ‘ ์ธ์ž๋กœ ๋„˜๊ฒจ์•ผ ํ•ด์„œ ์ค‘์ฒฉ๋œ ํ˜•ํƒœ๋กœ ์“ฐ๋‹ค๋ณด๋‹ˆ ์—ฌ๋Ÿฌ๋ฒˆ ์Šค๋ ˆ๋“œ ์ „ํ™˜์„ ํ•˜๊ฒŒ๋˜๋ฉด ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋˜ ๊ฒƒ์„ Combine์˜ ํ•ฉ์„ฑ ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ์–ด์ฃผ๋ฉด์„œ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

[1,2,3,4,5,6,7,8,9,10].publisher
      .subscribe(on:DispatchQueue.main) // ์ „์ฒด Publisher์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ง„ํ–‰ํ•œ๋‹ค.(๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘)
      .delay(for: 2, scheduler: DispatchQueue.global()) // ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ 2์ดˆ๊ฐ„ delay๋ฅผ ์ค€๋‹ค. ์ด๋•Œ ์Šค๋ ˆ๋“œ๋„ ๋ฐ”๋€๋‹ค.(๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘)
      .map({"\($0)"}) // Int๋ฅผ String์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.(๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘)
      .receive(on: DispatchQueue.main) // ์ดํ›„ ๋™์ž‘์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ง„ํ–‰ํ•œ๋‹ค.
      .sink(receiveValue: { s in 
          self.label.text = s // ๊ฐ’์„ ๋ฐ›์•„์„œ, label์— ์„ธํŒ…ํ•œ๋‹ค(๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘)
      }).store(in: &self.cancelBag)

์ด์™ธ์— ๊ฐ•์ œ๋กœ ๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ImmediateScheduler๊ฐ€ ์žˆ๋‹ค. ํ•ด๋‹น ์Šค์ผ€์ฅด๋Ÿฌ์—๋Š” ์‹œ๊ฐ„ ์˜ต์…˜์„ ์ฃผ์–ด๋„ ์ด๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Scheduler๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ ์ ˆํ•œ ์Šค๋ ˆ๋“œ์—์„œ, ์ ์ ˆํ•œ ํƒ€์ด๋ฐ์—์„œ ๋™์ž‘ํ•˜๋„๋ก ์กฐ์ ˆํ•˜๋ฉด ์กฐ๊ธˆ ๋” ํšจ๊ณผ์ ์ธ ๋กœ์ง์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.


์ฐธ๊ณ ์ž๋ฃŒ

https://developer.apple.com/documentation/combine/scheduler

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