Notice
Recent Posts
Recent Comments
Link
ยซ   2025/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

J

[SwiftUI] SwiftUI + TCA: Client ํ›‘๊ณ  ๊ฐ€๊ธฐ… ๋ณธ๋ฌธ

SwiftUI

[SwiftUI] SwiftUI + TCA: Client ํ›‘๊ณ  ๊ฐ€๊ธฐ…

yujaehui 2024. 7. 5. 16:51

๐Ÿง˜ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—…

์ด๋ฒˆ ๊ธ€์€ TCA์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…์„ ๋‹ค๋ฃฐ ๋•Œ ๋“ฑ์žฅํ•˜๋Š” Client์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์ „์— ํ•œ ๋ฒˆ ํ›‘๊ณ  ๊ฐ€๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ์ด๋ ‡๊ฒŒ ๋จผ์ € ์ž‘์„ฑํ•ด๋ด…๋‹ˆ๋‹ค!

๐Ÿ“Œ Client๋ž€?

TCA์—์„œ Client๋Š” ํŠน์ • ๊ธฐ๋Šฅ(์˜ˆ: ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ, ํŒŒ์ผ ์ €์žฅ ๋“ฑ)์„ ์ถ”์ƒํ™”ํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์™ธ๋ถ€ ์‹œ์Šคํ…œ(์„œ๋น„์Šค)์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ตฌ์กฐ์ฒด(๋˜๋Š” ํด๋ž˜์Šค)๋กœ, ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


Client์˜ ํ•ต์‹ฌ ๊ฐœ๋…

  1. ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ์ถ”์ƒํ™” → API ์š”์ฒญ, DB ์ ‘๊ทผ ๋“ฑ์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹ , ์ด๋ฅผ ์ถ”์ƒํ™”ํ•œ Client๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ
  2. Mocking์ด ์šฉ์ด → ํ…Œ์ŠคํŠธ ์‹œ ์‹ค์ œ API๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ , ๊ฐ€์งœ(Mock) ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต ๊ฐ€๋Šฅ
  3. TCA์˜ DependencyValues์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ → @Dependency(\\.someClient) ํ˜•์‹์œผ๋กœ Reducer์—์„œ ์‰ฝ๊ฒŒ ์ฃผ์ž… ๊ฐ€๋Šฅ

Client๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

TCA์—์„œ๋Š” Reducer๊ฐ€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜(Pure Function) ์—ฌ์•ผ ํ•˜๋ฏ€๋กœ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

โžก ๋”ฐ๋ผ์„œ, ์ด๋Ÿฌํ•œ ์ž‘์—…์„ Client๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , Effect์—์„œ ์‹คํ–‰ํ•œ ํ›„ Reducer๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.


Client์˜ ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ

struct SomeClient {
    var fetchData: () async throws -> String
}
  • SomeClient๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜(fetchData)๋ฅผ ํฌํ•จํ•œ ๊ตฌ์กฐ์ฒด
  • ์ดํ›„, DependencyValues์— ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

โžก Client๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, Reducer๋Š” SomeClient.fetchData()๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ณ , ์‹ค์ œ ๊ตฌํ˜„์€ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Œ.


๐Ÿง˜ ๋งˆ์น˜๋ฉฐ…

์˜ค๋กœ์ง€ Client์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…๋งŒ ๋‹ด๊ณ  ์žˆ๋‹ค๋ณด๋‹ˆ ๋ถ€์กฑํ•œ ๋‚ด์šฉ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ธ€์˜ Effect, DependencyValues์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ๋ณด๋ฉด ํ›จ์”ฌ ์ดํ•ด๊ฐ€ ์ž˜ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.