Search
Duplicate
๐Ÿ‘ป

์•ฑ์˜ ์ƒํƒœ: State

Created
2024/02/17 14:59
Tags

ย ์•ฑ์˜ ์ƒํƒœ: 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 ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.