Combine
๊ฐ๋
๋ฐ๋ก ์๊ธฐ
1.
Combine ํ๋ ์์ํฌ:
โข
Apple์์ ์ ๊ณตํ๋ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ(Reactive Programming) ํ๋ ์์ํฌ.
โข
๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ์ด๋ฒคํธ๋ฅผ ์ ์ธ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ.
2.
์ฃผ์ ๊ฐ๋
:
โข
Publisher: ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ์ฃผ์ฒด.
โข
Subscriber: ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ฒ๋ฆฌํ๋ ์ฃผ์ฒด.
โข
Operators: ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๊ฑฐ๋ ํํฐ๋งํ๋ ์ค๊ฐ ์ฐ์ฐ์.
3.
Combine์ ํ๋ฆ:
โข
Publisher โ Operator โ Subscriber.
Combine ์์
import Combine
// Publisher ์์ฑ
let numbers = [1, 2, 3, 4, 5].publisher
// Subscriber๋ฅผ ํตํด ๊ฐ ์ถ๋ ฅ
numbers
.map { $0 * 2 } // ๊ฐ ๋ณํ
.sink { print($0) } // ๊ฐ ์ถ๋ ฅ
Swift
๋ณต์ฌ
์ง์ ๊ตฌํํด๋ณด๊ธฐ
Combine์ iOS์์ ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ์ธ์ ์ผ๋ก UI๋ฅผ ์
๋ฐ์ดํธํ๋ ๋ฐ ์ค์ํ ํ๋ ์์ํฌ์
๋๋ค.
Combine์ ํ์ฉํ๋ฉด ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ณ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ ํ๋ฆ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ง์ ๊ตฌํํ๋ฉฐ Combine์ ๋์ ์๋ฆฌ๋ฅผ ์ตํ๋ณด์ธ์!
Step 1: Combine ๊ธฐ๋ณธ ๊ตฌํ
1.
๊ฐ๋จํ Publisher์ Subscriber ๋ง๋ค๊ธฐ:
โข
๋ฐฐ์ด [10, 20, 30, 40, 50]์ Publisher๋ก ์์ฑํ๊ณ , ๊ฐ ๊ฐ์ 2๋ฐฐ๋ก ๋ณํํ ํ ์ถ๋ ฅํ์ธ์.
ํํธ(5๋ถ๊ฐ ๊ณ ๋ฏผํ๊ณ ํผ์ณ๋ณด๊ธฐ!)
2.
Just Publisher ์ฌ์ฉ:
โข
๋จ์ผ ๊ฐ 100์ ์ ๊ณตํ๋ Just๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ณํ(+50)ํ๊ณ ์ถ๋ ฅํ์ธ์.
ํํธ(5๋ถ๊ฐ ๊ณ ๋ฏผํ๊ณ ํผ์ณ๋ณด๊ธฐ!)
Step 2: Combine๋ก ๋น๋๊ธฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
1.
URLSession๊ณผ Combine ์ฌ์ฉ:
โข
Combine์ ์ฌ์ฉํด ๋คํธ์ํฌ ์์ฒญ์ ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ์ธ์.
โข
API: https://jsonplaceholder.typicode.com/todos/1
โข
์์ฒญ ๊ฒฐ๊ณผ์ title ๊ฐ์ ์ถ๋ ฅํ์ธ์.
ํํธ(5๋ถ๊ฐ ๊ณ ๋ฏผํ๊ณ ํผ์ณ๋ณด๊ธฐ!)
2.
Timer Publisher ์ฌ์ฉ:
โข
1์ด๋ง๋ค ํ์ฌ ์๊ฐ์ ์ถ๋ ฅํ๋ Combine ํ์ด๋จธ๋ฅผ ์์ฑํ์ธ์.
โข
5์ด ํ์๋ ๊ตฌ๋
์ ์ทจ์ํ์ธ์.
ํํธ(5๋ถ๊ฐ ๊ณ ๋ฏผํ๊ณ ํผ์ณ๋ณด๊ธฐ!)