ย ์ฑ์ ์ํ: State
State ๋ Reducer ์ ํ์ฌ ์ํ๋ฅผ ๊ฐ๋ ๊ตฌ์กฐ์ฒด์ด๋ค.
โ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ฑฐ๋ UI๋ฅผ ๊ทธ๋ฆด ๋ ํ์ํ ๋ฐ์ดํฐ์ ๋ํ ์ค๋ช
์ ๋ํ๋ผ ๋ ์ฌ์ฉ๋๋ค.
ex) ๋ฒํผ์ ๋๋ฌ์ ์ด๋ค ์ซ์๋ฅผ +1, -1 ํด์ค์ผ ํ๋ ๊ฐ๋จํ View๋ฅผ ๋ง๋ ๋ค
TCA์์ ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์๋์ ๊ฐ์ด ํด๋น ๊ธฐ๋ฅ์ ํ๋ State ๋ฅผ ์ ์
struct CounterFeature: Reducer {
// ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํ ๋ณ์๋ฅผ State์ ๋ง๋ค์ด์ค๋ค.
struct State: Equatable {
var count = 0
}
// ํ์ฌ ์ํ์ ์๋ก์ด ์ํ๋ฅผ ๋น๊ตํ๊ธฐ ์ํด Equatable ํ๋กํ ์ฝ์ ์ฌ์ฉ
enum Action: Equatable { /* code */ }
var body: some ReducerOf<Self> { /* code */ }
}
Swift
๋ณต์ฌ
์ด๋ ๊ฒ ๋ง๋ Reducer ๋ฅผ View์ ์ฐ๊ฒฐ
struct CounterView: View {
// let stroe: Store<CounterFeature.State, CounterFeature.Action>์ ์ถ์ฝํ
let store: StoreOf<CounterFeature>
var body: some View {
withViewStore(self.store, observe: { $0 }) { viewStore in
// SwiftUI์์๋ ์๋ํ๋ View
Form {
Section {
Button("Decrement") {
// code
}
Button("Increment") {
// code
}
}
}
}
}
}
Swift
๋ณต์ฌ
๊ธฐ์กด ๋ฐ๋๋ผ SwiftUI ๋ทฐ์ withViewStore ๋ง ๋ฎ์ด์ฃผ๋ ๊ฒ๋ง์ผ๋ก๋ Reducer ๋ฅผ ๊ฐ์ง View๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
๋ฐ๋๋ผ SwiftUI ?
โ Point-Free ๋ด๋ถ์์ ์ถ๊ฐ์ ์ธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ๊ธฐ๋ณธ SwiftUI ํ๋ ์์ํฌ๋ฅผ ์ง์นญํ ๋ ์ฌ์ฉํ๋ ํํ
์ ์ฝ๋์์ Action ์ Equatable ์ ๋นผ๋ ๋ฌธ์ ๊ฐ ์์ง๋ง, State ์ Equatable ์ ๋นผ๊ฒ ๋๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
Equatable ์ด๋?
Equatable ํ๋กํ ์ฝ์ Swift ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ ํ๋กํ ์ฝ ์ค ํ๋๋ก, ๊ฐ์ด ๋์ผํ์ง ๋น๊ตํ ์ ์๋ ํ์
์ ์ ์ํ๋ค.
Equatable ์ ์ฑํํ๋ ๋ชจ๋ ํ์
์ == ์ฐ์ฐ์๋ฅผ ๊ตฌํํ๋ฉด, ํด๋น ํ์
์ ์ธ์คํด์ค ๊ฐ ๋๋ฑ์ฑ ๋น๊ต๊ฐ ๊ฐ๋ฅํด์ง๋ค.
Equatable ํ๋กํ ์ฝ์ ์ฑํํ๋ ค๋ฉด, ์ต์ํ == ์ฐ์ฐ์ ํจ์๋ฅผ ๊ตฌํํด์ผ ํ๋ค. ์ด ํจ์๋ ๋ ๋งค๊ฐ๋ณ์(๋น๊ตํ ๊ฐ๋ค)๋ฅผ ๋ฐ์์ Bool ๊ฐ์ ๋ฐํํ๋ค.
Equatable ํ๋กํ ์ฝ์ ์ํ์ ์ก์
์ ๋๋ฑ์ฑ ๋น๊ต๋ฅผ ๊ฐ๋ฅํ๊ฒ ํจ์ผ๋ก์จ, ์ํ ๊ด๋ฆฌ ๋ฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ก์ง์ ํจ์จ์ฑ๊ณผ ์ ํ์ฑ์ ๋์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
SwiftUI๋ View์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์ ๋, ํด๋น View๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธ ํ๋ค.
๋ฐ๋ผ์ ์ํ์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ธฐ ์ํด ์ด์ ์ํ์ ํ์ฌ ์ํ๋ฅผ ๋น๊ตํจ์ผ๋ก์จ ๋ถํ์ํ ๋ ๋๋ง์ ๋ฐฉ์งํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ, State ๊ฐ ํด๋์ค์ ๊ฐ์ ์ฐธ์กฐ ํ์
์ผ ๊ฒฝ์ฐ, ๊ฐ์ฒด์ ๋ด๋ถ ์์ฑ์ด ๋ณํด๋ ๊ทธ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ ๋์ผํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ State ๊ฐ ์ฐธ์กฐ ํ์
์ผ ๊ฒฝ์ฐ, ๋ด๋ถ ์์ฑ์ ๋ณํ๊ฐ ๋ฐ์ํด๋ SwiftUI๋ ์ด๋ฅผ ๊ฐ์ ๋ณํ๋ก ๊ฐ์ฃผ ํ์ง ์์ ์ ์๋ค.
์ฆ, ๋ณํ๋ฅผ ๋น ์ง์์ด ์ฒดํฌํ๊ธฐ ์ํด Equatable ํ Struct ๋ก ์ค๊ณ๋์๋ค๊ณ ํ ์ ์๋ค.