WonderPark 2023. 6. 10. 02:24

 

์–ด๊น€์—†์ด ๋Œ์•„์˜จ Combine ์„ธ๋ฏธ๋‚˜ 3ํƒ„ ๋งˆ์ง€๋ง‰์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Operator ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!!

 

 

Operator ?

Operator ๋Š” Publisher์—๊ฒŒ ๋ฐ›์€ ๊ฐ’์„ ๊ฐ€๊ณตํ•ด์„œ Subscriber์—๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

Combine์—์„œ๋Š” ์ •๋ง ๋‹ค์–‘ํ•œ operator ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ์š”!

Operator ๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์นญ๊ตฌ์ธ์ง€ ์•Œ์•„๋ณด๊ธฐ์œ„ํ•ด์„œ

๋Œ€ํ‘œ์ ์œผ๋กœ Operator์˜ ๋นŒํŠธ์ธ ํƒ€์ž…์ธ map, filter ๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ๊ฒŒ์š”!

 

 

1. map

   Swift ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€๋•Œ ์–ด๋–ค ์—ฐ์†๊ฐ’์„ ์ƒˆ๋กœ ๋งคํ•‘ํ•ด์„œ ๋ณ€ํ™˜ํ•œ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋•Œ map ํ•จ์ˆ˜๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ฃ !

   map ํ•จ์ˆ˜๋Š” ์–ด๋–ค ๋ฐฐ์—ด์ด๋‚˜ ์ปฌ๋ ‰์…˜ ๋Œ€ํ•ด ๋ณ€ํ™˜ ํด๋กœ์ ธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

   ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ map Operator ๋Š” ํผ๋ธ”๋ฆฌ์…”๊ฐ€ ๋ฐฉ์ถœํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ ํด๋กœ์ ธ๋ฅผ ํ†ตํ•ด ๋ณ€ํ™˜ํ•œ ๊ฐ’์„ Subscriber์—๊ฒŒ ์ „ํ•ด์ค๋‹ˆ๋‹ค.

 

// Transform
let numPublisher = PassthroughSubject<Int, Never>()

let subscription1 = numPublisher
    .map { $0 * 2 }
    .sink { value in
        print("Tranformed Value: \(value)")
    }

numPublisher.send(10)
numPublisher.send(20)
numPublisher.send(30)
subscription1.cancel()


// ์ถœ๋ ฅ 
// Tranformed Value: 20
// Tranformed Value: 40
// Tranformed Value: 60

 

 

2. filter

์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์“ฐ๋Š” filter ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์—์„œ ์–ด๋–ค ํ•ญ๋ชฉ๋“ค์„ ํฌํ•จํ•˜๋Š”์ง€๋ฅผ ๋น„๊ตํ•ด์„œ ์›ํ•˜๋Š” ๊ฐ’๋งŒ ๋ชจ์€ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. 

์ด์™€ ๋น„์Šทํ•˜๊ฒŒ filter Operator ๋Š” ํผ๋ธ”๋ฆฌ์…”๊ฐ€ ๋ฐฉ์ถœํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๊ฐ’๋งŒ์„ ํ•„ํ„ฐ๋ง์‹œํ‚จ ๋ฐ์ดํ„ฐ๋ฅผ Subscriber์—๊ฒŒ ์ „ํ•ด์ค๋‹ˆ๋‹ค.

 

// Filter
let stringPublisher = PassthroughSubject<String, Never>()

let subscription2 = stringPublisher
    .filter { $0.contains("a") }
    .sink { value in
        print("Filtered Value: \(value)")
    }

stringPublisher.send("abc")
stringPublisher.send("Jack")
stringPublisher.send("Wonder")
stringPublisher.send("Jenny")
stringPublisher.send("Jason")
subscription2.cancel()

// ์ถœ๋ ฅ 
// Filtered Value: bc
// Filtered Value: jck
// Filtered Value: Wonder
// Filtered Value: Jenny
// Filtered Value: Json

 

 

์—ฌ๊ธฐ๊นŒ์ง€ Combine ์˜ 3๋Œ€์žฅ Publisher, Subscriber, Operator์— ๋Œ€ํ•ด์„œ ๋ชจ๋‘ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค!

์ฝ”๋“œ๋กœ ์ ‘ํ•ด๋ณด๋‹ˆ ๋” ์ดํ•ด๊ฐ€ ์ž˜ ๋˜๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜์š” ?

์—ญ์‹œ ์ฝ”๋”ฉ์€ ๋ฐฑ๋ฌธ์ด ๋ถˆ์—ฌ์ผํƒ€ ์ž…๋‹ˆ๋‹ค!

์ด์ œ Combine ์„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ด…์‹œ๋‹ค!  ๊ฐ€๋ณด์Ÿˆ๊ณ  !!! ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ 

 

 

 

 

์ฐธ๊ณ 

  • ํŒจ์ŠคํŠธ ์บ ํผ์Šค ์™•์ดˆ๋ณด๋ฅผ ์œ„ํ•œ, ํ•œ ๋ฒˆ์— ๋๋‚ด๋Š” iOS ์•ฑ ๊ฐœ๋ฐœ ๋ฐ”์ด๋ธ”