์๋ ์ฝ๋๋ฅผ ๋ณด๊ณ ๋ฌธ๋ ๊ถ๊ธํด์ก๋ค. envirionmentObject๋ ๊ทธ๋ฅ property์ฒ๋ผ ๋ฃ์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น??
struct LandmarkList_Previews: PreviewProvider {
static var previews: some View {
LandmarkList()
.environmentObject(ModelData())
}
}
๊ทธ๋์ ์๋ฌ๋ฅผ ํ๋ฒ ๋ง๋ค์ด๋ณด์๋ค.
LandmarkList_Previews์์ LandmarkList(modelData: ModelData)๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ @EnvironmentObject ์์ฑ์ ํ๊ฒฝ(environment)์ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๊ธฐ ์ํ ์์ฑ(property) ๋ํผ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ์ง์ ์ ๋ฌํ๋ ๋์ ์ .environmentObject๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ํ๊ฒฝ์ ์ฃผ์ ํด์ผ ํ๋ค.
๊ทธ๋ผ ์ผ๋ฐ ํ๋กํผํฐ์์ ์ฐจ์ด์ ์ ๋ฌด์์ด ์์๊น!
์ผ๋ฐ ํ๋กํผํฐ์ @EnvironmentObject ์์ฑ์ ์ฐจ์ด์ ์ ์ฃผ์
๋๋ ๊ฐ์ฒด์ ์๋ช
๊ณผ ์
๋ฐ์ดํธ ๊ด๋ฆฌ ๋ฐฉ์์ด๋ค.
๊ฐ์ฒด์ ์๋ช
์ผ๋ฐ ํ๋กํผํฐ: ์ผ๋ฐ ํ๋กํผํฐ๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด ํด๋น ๊ฐ์ฒด๋ ์์ฑ๋ ์ธ์คํด์ค์ ์ผ๋ถ๋ก ์ ์ง๋๋ค. ์ด๋ ํด๋น ์ธ์คํด์ค๊ฐ ์กด์ฌํ๋ ๋์ ๊ฐ์ฒด๊ฐ ์ ์ง๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
@EnvironmentObject ์์ฑ: @EnvironmentObject ์์ฑ์ ํตํด ๊ฐ์ฒด๋ฅผ ์ฃผ์
ํ๋ฉด ํด๋น ๊ฐ์ฒด๋ ํ๊ฒฝ(environment)์ ์ ์ฅ๋๋ค. ํ๊ฒฝ์ SwiftUI์ ์ํด ๊ด๋ฆฌ๋๋ ์ ์ญ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์์ด๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด๋ ํ๊ฒฝ์ ์ ์ฅ๋์ด ์ฑ ์ ๋ฐ์์ ๊ณต์ ๋๋ฉฐ, ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์ ์ฌ๋ฌ ๋ทฐ์์ ๋์ผํ ๊ฐ์ฒด์ ์ก์ธ์คํ ์ ์๋ค.
์
๋ฐ์ดํธ ๊ด๋ฆฌ
์ผ๋ฐ ํ๋กํผํฐ: ์ผ๋ฐ ํ๋กํผํฐ๋ฅผ ํตํด ์ ๋ฌ๋ ๊ฐ์ฒด๋ ๋ทฐ๊ฐ ๋ ๋๋ง๋ ๋๋ง๋ค ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์ด๋ ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ด ๋ทฐ์ ๋ฐ์๋์ง ์์ต๋๋ค. ์ง์ ์
๋ฐ์ดํธ ๋ก์ง์ ๊ตฌํํด์ผ ํฉ๋๋ค.
@EnvironmentObject ์์ฑ: @EnvironmentObject ์์ฑ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ผ๋ก ๋ทฐ์ ๋ฐ์๋ฉ๋๋ค. ๊ฐ์ฒด๊ฐ ์
๋ฐ์ดํธ๋๋ฉด SwiftUI๋ ํ๊ฒฝ์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ทฐ๋ฅผ ๋ค์ ๊ทธ๋ฆฝ๋๋ค. ์ด๋ฅผ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ์ฆ์ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ @EnvironmentObject ์์ฑ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ ์ ์ญ์ ์ผ๋ก ๊ณต์ ํ๊ณ ์ ๋ฐ์ดํธ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ผ๋ฐ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ํธ๋ฆฌํ๊ณ ๊ฐ๋ ฅํ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๊ทธ๋ ๋ค๋ฉด @EnvironmentObject์ @State, @Binding์ ์ฐจ์ด๋ ?
EnvironmentObject, State, ๊ทธ๋ฆฌ๊ณ Binding์ SwiftUI์์ ์ํ๋ฅผ ๊ณต์ ํ๊ณ ์
๋ฐ์ดํธ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ธ ๊ฐ์ง ์์ฑ์ด๋ค.
@EnvironmentObject
- ๊ฐ์: EnvironmentObject๋ ์ ์ญ์ ์ผ๋ก ๊ณต์ ๋๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ ์์ฑ์
๋๋ค. ํด๋น ๊ฐ์ฒด๋ ํ๊ฒฝ(environment)์ ์ ์ฅ๋์ด ์ฑ ์ ์ฒด์์ ๊ณต์ ๋๋ค.
- ์ํ ๊ณต์ : EnvironmentObject๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ , ํด๋น ๊ฐ์ฒด๋ฅผ ํ๊ฒฝ์ ์ฃผ์
ํ์ฌ ๋ชจ๋ ํ์ ๋ทฐ์์ ๊ณต์ ํ ์ ์๋ค.
- ์
๋ฐ์ดํธ ๊ด๋ฆฌ: ํด๋น ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ทฐ๊ฐ ์๋์ผ๋ก ์
๋ฐ์ดํธ๋๋ค.
@State
- ๊ฐ์: @State๋ ๋ทฐ ๋ด์์ ๊ด๋ฆฌ๋๋ ๋ก์ปฌํ ์ํ๋ฅผ ๋ํ๋ด๋ ์์ฑ์ด๋ค. ํด๋น ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค SwiftUI๋ ๋ทฐ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ์ฆ์ ๋ฐ์ํ๋ค.
- ์ํ ๊ณต์ : @State๋ ๋ทฐ ๋ด์์ ๋ก์ปฌํ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ํด๋น ์ํ๋ ๋ทฐ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ค. ๋ฐ๋ผ์ ์ํ๋ฅผ ๋ค๋ฅธ ๋ทฐ์ ๊ณต์ ํ๊ธฐ ์ํด์๋ Binding์ ์ฌ์ฉํด์ผ ํ๋ค.
- ์
๋ฐ์ดํธ ๊ด๋ฆฌ: @State๋ ์์ฒด์ ์ผ๋ก ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋ทฐ๋ฅผ ์
๋ฐ์ดํธํ์ง๋ง, ๋ค๋ฅธ ๋ทฐ์ ์ํ๋ฅผ ๊ณต์ ํ๋ ค๋ฉด `Binding`์ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ์ ๋ฌํด์ผ ํ๋ค.
@Binding
- ๊ฐ์: Binding์ ๊ฐ์ ๋ํํ๊ณ ํด๋น ๊ฐ์ ์ฝ๊ณ ์ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ฑ์ด๋ค. Binding์ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํ๋ฉฐ, ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ํด๋น ๋ณ๊ฒฝ์ ์ถ์ ํ์ฌ ์
๋ฐ์ดํธํ๋ค.
- ์ํ ๊ณต์ : Binding์ ์ํ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์์ ๋ทฐ์์ @State๋ฅผ ์ ์ธํ๊ณ Binding์ผ๋ก ํ์ ๋ทฐ์ ์ ๋ฌํ์ฌ ํ์ ๋ทฐ์์๋ ํด๋น ์ํ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๊ฒ ํ๋ค.
- ์
๋ฐ์ดํธ ๊ด๋ฆฌ: Binding์ ์ฌ์ฉํ๋ฉด ์ํ๋ฅผ ๊ณต์ ํ๊ณ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ํด๋น ๋ณ๊ฒฝ์ ์ถ์ ํ์ฌ ๋ทฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค.
์ฐจ์ด์
- ๋ฒ์: EnvironmentObject๋ ์ ์ญ์ ์ผ๋ก ๊ณต์ ๋๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ , State๋ ๋ทฐ ๋ด์์ ๋ก์ปฌํ ์ํ๋ฅผ ์ฌ์ฉํ๋ค. Binding์ ์์ ๋ทฐ์์ ํ์ ๋ทฐ๋ก ๊ฐ์ ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- ์
๋ฐ์ดํธ ๊ด๋ฆฌ: EnvironmentObject๋ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๋ SwiftUI๊ฐ ์๋์ผ๋ก ๋ทฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค. State๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ทฐ๋ฅผ ์๋์ผ๋ก ๋ค์ ๊ทธ๋ฆฐ๋ค. Binding์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ํด๋น ๋ณ๊ฒฝ์ ์ถ์ ํ์ฌ ๋ทฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค.
- ์ํ ๊ณต์ : EnvironmentObject๋ ๊ฐ์ฒด๋ฅผ ํ๊ฒฝ์ ์ฃผ์
ํ์ฌ ์ ์ญ์ ์ผ๋ก ๊ณต์ ํ๋ค. State๋ ๋ทฐ ๋ด์์ ๋ก์ปฌํ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , Binding์ ์์ ๋ทฐ์์ ํ์ ๋ทฐ๋ก ๊ฐ์ ์ ๋ฌํ์ฌ ์ํ๋ฅผ ๊ณต์ ํ๋ค.
'๐ฑ App > ๐ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] how to create multiple preview (0) | 2023.06.08 |
---|---|
[Swift] ๋ฐ๋ณต๋ฌธ์์ id: \.id ์ ์๋ฏธ (0) | 2023.06.08 |
[Swift] load(_:) method (fetching JSON data) ๋ฏ์ด๋ณด๊ธฐ (0) | 2023.06.07 |
[Swift] Swift ์์ Hashable, Codable์ ๋ญ๊น? Protocol ์์๋ณด๊ธฐ (0) | 2023.06.03 |
[SwiftUI] ํท๊น๋ฆฌ๋ State, Binding, ObservedObject, EnvironmentObject ์ด์ ๋ฆฌ (0) | 2023.05.31 |
๋๊ธ