J
[SwiftUI] SwiftUI + TCA: Client ํ๊ณ ๊ฐ๊ธฐ… ๋ณธ๋ฌธ
๐ง ์์ํ๊ธฐ ์ ์…
์ด๋ฒ ๊ธ์ TCA์์ ์์กด์ฑ ์ฃผ์ ์ ๋ค๋ฃฐ ๋ ๋ฑ์ฅํ๋ Client์ ๋ํ ๊ฐ๋จํ ์ค๋ช ์ ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก๋ ์์กด์ฑ ์ฃผ์ ์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ ์ ์ ํ ๋ฒ ํ๊ณ ๊ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ์ ์ด๋ ๊ฒ ๋จผ์ ์์ฑํด๋ด ๋๋ค!
๐ Client๋?
TCA์์ Client๋ ํน์ ๊ธฐ๋ฅ(์: ๋คํธ์ํฌ ์์ฒญ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ, ํ์ผ ์ ์ฅ ๋ฑ)์ ์ถ์ํํ ๊ฐ์ฒด์ ๋๋ค.
์ฆ, ์ธ๋ถ ์์คํ (์๋น์ค)์ ์ํธ์์ฉํ๋ ์ญํ ์ ํ๋ ๊ตฌ์กฐ์ฒด(๋๋ ํด๋์ค)๋ก, ์์กด์ฑ ์ฃผ์ (Dependency Injection)์ ์ฝ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
Client์ ํต์ฌ ๊ฐ๋
- ์ธ๋ถ ์์กด์ฑ์ ์ถ์ํ → API ์์ฒญ, DB ์ ๊ทผ ๋ฑ์ ์ง์ ํธ์ถํ๋ ๋์ , ์ด๋ฅผ ์ถ์ํํ Client๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ
- Mocking์ด ์ฉ์ด → ํ ์คํธ ์ ์ค์ API๋ฅผ ํธ์ถํ์ง ์๊ณ , ๊ฐ์ง(Mock) ๋ฐ์ดํฐ๋ฅผ ์ ๊ณต ๊ฐ๋ฅ
- 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์ ๋ํ ์ค๋ช ๊ณผ ํจ๊ป ๋ณด๋ฉด ํจ์ฌ ์ดํด๊ฐ ์ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
'SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] SwiftUI + TCA: Environment vs. DependencyValues (0) | 2024.07.09 |
---|---|
[SwiftUI] SwiftUI + TCA: Effect? DependencyValues? (์์ ํฌํจ) (0) | 2024.07.08 |
[SwiftUI] SwiftUI + TCA: ์ต์ ๋ฒ์ TCA์ ๋์ ๊ณผ์ (์์ ํฌํจ) (0) | 2024.07.05 |
[SwiftUI] SwiftUI + TCA : Redux ํจํด ์ํฅ? ๋จ๋ฐฉํฅ? (0) | 2024.06.30 |
[SwiftUI] @AppStorage (0) | 2024.05.23 |