SwiftUI
๏ปฟ๏ปฟ@State: ๋ทฐ ๋ด๋ถ์์ ๊ด๋ฆฌ๋๋ ๋ก์ปฌ ์ํ๊ฐ์ ์ ์ฅ.
๏ปฟ๏ปฟ๏ปฟ@Binding: ๋ถ๋ชจ ๋ทฐ๋ก๋ถํฐ ๋ฐ์ ๊ฐ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง.
๏ปฟ๏ปฟ@observedObject: ์ธ๋ถ ํด๋์ค์ ์ํ๋ฅผ ์ถ์ ํ๊ณ ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธ.
๏ปฟ๏ปฟ@Environmentobject: ์ฑ ์ ์ฒด์์ ๊ณต์ ๋๋ ์ํ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ.
๏ปฟ๏ปฟ@Published:ObservableObject์ ์์ฑ์ ์ ๋ฐ์ดํธํ ๋ View๋ฅผ ์๋ ๋ฆฌํ๋ ์
๏ปฟ๏ปฟ@AppStorage: UserDefaults์ ๊ฐ์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ฌ ๋ ์ฌ์ฉ.
๏ปฟ๏ปฟ๏ปฟ@SceneStorage: ์ฑ์ 'Scene' ์ธ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ.
๏ปฟ๏ปฟ@Environment: ์์คํ ์ ๊ณต ํ๊ฒฝ ์ค์ ์ ์ ๊ทผ.
๏ปฟ๏ปฟ@StateObject: ๋ทฐ๊ฐ ์์ ํ๊ณ ์๋ ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ.
@FetchRequest: Core Data์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ทฐ์ ์ฐ๊ฒฐ.
0. Property Wrapper (ํ๋กํผํฐ ๋ํผ)
โข ์๋ฏธ: ์์ฑ(property)์ ์ถ๊ฐ์ ์ธ ํ๋์ด๋ ๊ณ์ฐ์ ๋ง๋ถ์ฌ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ตฌ์กฐ.
ํ๋กํผํฐ ๋ํผ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ๋ก์ง์ด๋ ๊ณ์ฐ์ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์์ด ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ํฅ์์ํด
1. @State
๏ปฟ๏ปฟ์ ์: ๋ก์ปฌ ์ํ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๊ด๋ฆฌ (๊ฐ๋จํ ๋ฐ์ดํฐ ์ ์ฅ)
๏ปฟ๏ปฟ์ฅ์ : ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ์ดํดํ๊ธฐ ์ฌ์.
๏ปฟ๏ปฟ๋จ์ : ํด๋น View ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ.
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: View์ ๋ก์ปฌ ์ํ๋ฅผ ๊ด๋ฆฌํ ๋.
๏ปฟ๏ปฟ์ ์ฌ์ฉ: ์ํ๋ฅผ ๊ฐ๋จํ๊ฒ ์ถ์ ํ๊ณ ๋น๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ ค๊ณ
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: View ๋ด๋ถ์์ @State ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ์ ์ธ
@State private var count = 0
์ฌ์ฉ ์์์ฝ๋
2. @Binding
๏ปฟ๏ปฟ์ ์: ์์ View์ ์ํ๋ฅผ ํ์ View์์ ์ฐธ์กฐํ๊ณ ์กฐ์
๏ปฟ๏ปฟ์ฅ์ : ๋ฐ์ดํฐ ํ๋ฆ์ ๋ช ํํ๊ฒ ํํ๊ฐ๋ฅ
๏ปฟ๏ปฟ๋จ์ : ์์ View์ ํ์ View๊ฐ ์ํ์ ๋ํด ๊ฐํ๊ฒ ์ฐ๊ฒฐ
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: ์์ View์ ์ํ๋ฅผ ํ์ View์์ ์์ ํ ํ์๊ฐ ์์ ๋.
๏ปฟ๏ปฟ์ ์ฌ์ฉ: ์ํ๋ฅผ ์ ์ฐํ๊ฒ ๊ณต์ ํ๊ณ ๊ด๋ฆฌ
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: ํ์ View์์ @Binding ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์์ View์์ ์ฐ๊ฒฐ
@Binding var isOn: Bool
์ฌ์ฉ ์์์ฝ๋
3. @ObservedObject
๏ปฟ๏ปฟ์ ์: ๋ณต์กํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ View์ ๋ฐ์ธ๋ฉ
๏ปฟ๏ปฟ์ฅ์ : ์ฌ๋ฌ View์์ ๊ณต์ ๊ฐ๋ฅ
๏ปฟ๏ปฟ๋จ์ : Observableobject ํ๋กํ ์ฝ์ ์ ์ฉํ ๋ณ๋์ ํด๋์ค ํ์.
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: ์ฌ๋ฌ ํ๋ฉด์์ ๊ณต์ ํด์ผ ํ๋ ์ ๋ณด๋ ๋ณต์กํ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ ๋ ์ฌ๋ฌView์์ ๊ณต์ ํ ๋ ์ฌ์ฉ ( ex. ์ฌ์ฉ์ ํ๋กํ ์ ๋ณด์ ๊ฐ์ ๋ณต์กํ ๋ฐ์ดํฐ)
๏ปฟ๏ปฟ์ ์ฌ์ฉ: ์ํ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ UI๋ฅผ ์ ๋ฐ์ดํธํจ!
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: @observedobject ์ด๋ ธํ ์ด์ ๊ณผ ํจ๊ป ObservableObject๋ฅผ ์ ์ฉํ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉ
@Observedobject var viewModel: MyViewModel
์ฌ์ฉ ์์์ฝ๋
4. @EnvironmentObject
๏ปฟ๏ปฟ์ ์: ์ฑ ์ ์ฒด์์ ๊ณต์ ๋๋ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃธ!
๏ปฟ๏ปฟ์ฅ์ : ์ฑ ์ ์ฒด์ ์ํ๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌ ๊ฐ๋ฅ
๏ปฟ๏ปฟ๋จ์ : ๋ช ์์ ์ธ ์ด๊ธฐํ๊ฐ ์์ผ๋ฉด ๋ฐํ์ ์๋ฌ ๋ฐ์ ๊ฐ๋ฅ.
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: ์ฑ ์ ์ฒด์์ ๊ณต์ ๋๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋, ์ฑ์ ๋ชจ๋ ๊ณณ์์ ์ ๊ทผํด์ผ ํ๋ ํฐ ์ ๋ณด ๋ด์๋ ์ฌ์ฉ (ex.๋ก๊ทธ์ธ ์ํ, ํ ๋ง ์ค์ )
๏ปฟ๏ปฟ์ ์ฌ์ฉ: ์ฑ ์ ์ฒด์ ์ํ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: @EnvironmentObject ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ์ ์ธ
@EnvironmentObject var appData: AppData
์ฌ์ฉ ์์์ฝ๋
@State, @ObservedObject, @EnvironmentObject ์ฐจ์ด์
โข ๋ชจ๋ SwiftUI์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ UI๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ
@State, @Observedobject, @EnvironmentObject ์ฐจ์ด์
๋ฒ์: @State๋ ํ๋์ View, @0bservedobject๋ ์ฌ๋ฌ View, @EnvironmentObject๋ ์ฑ ์ ์ฒด์์ ์ฌ์ฉ๊ฐ๋ฅ
๋ณต์ก์ฑ: @State๋ ๊ฐ๋จํ ๋ฐ์ดํฐ, @observedObject์ @Ervironmentobject๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ฐ์ฒด ๋ค๋ฃฐ ์ ์์!
@Observedobject์ @EnvironmentObject ๊ณตํต์
์ํ ๊ด๋ฆฌ ๊ฐ์ฒด๋ฅผ View์ ์ฐ๊ฒฐ
@Observedobject์ @EnvironmentObject ์ฐจ์ด์
@observedObject ๋ ๋ช ์์ ์ผ๋ก ์ธ์คํด์ค๋ฅผ ์ ๋ฌํด์ผ ํ๋ฉฐ, @Environmentobject๋ ์ฑ ์ ์ฒด์ ์ฃผ์ ๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฐพ์
@State์ @Binding ๊ณตํต์
์ํ ๋ณ์๋ฅผ ์ ์ธ
@State์ @Binding ์ฐจ์ด์
์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฆ. @State๋ View ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ ์ํ๋ฅผ ๊ด๋ฆฌ, @Binding์ ์์ View์ ํ์ View ์ฌ์ด์์ ์ํ๋ฅผ ๊ณต์
5. @Published
๏ปฟ๏ปฟ์ ์: ObservableObject์ ์์ฑ์ ์ ๋ฐ์ดํธํ ๋ View๋ฅผ ์๋์ผ๋ก ๋ฆฌํ๋ ์(ํด๋น ๋ณ์๊ฐ ๋ณ๊ฒฝ๋๋ฉด "์ฌ๊ธฐ ๋ณํ์ด์! ๋ทฐ ๋ค์ ๊ทธ๋ ค์ฃผ์ธ์!"๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ )
๏ปฟ๏ปฟ์ฅ์ : ์ฝ๋๊ฐ ๊ฐ๊ฒฐ, ObservableObject์ ์ ์ฐ๋๋จ.
๏ปฟ๏ปฟ๋จ์ : ํน์ ์์ฑ์๋ง ์ ์ฉ, ๋ณต์กํ ์ํ ๊ด๋ฆฌ์๋ ์ ํฉํ์ง ์์ ์ ์์
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: Observableobject์ ํน์ ์์ฑ์ด ๋ณ๊ฒฝ๋ ๋ ๋น๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ ๋.
๏ปฟ๏ปฟ์ ์ฌ์ฉ: ์ํ ๋ณํ๋ฅผ ์ฝ๊ฒ ๊ฐ์งํ๊ณ UI๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธ
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: @Published ์ด๋ ธํ ์ด์ ์ ์์ฑ ์์ ์ถ๊ฐ!
๏ปฟ๏ปฟ์ฌ์ฉ ์์์ฝ๋
@Published๋ ๋ณ์๊ฐ ๋ฐ๋๋ฉด ๋ทฐ์ ์๋ ค์ฃผ์ด ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๊ฒ ํ๋ ๋งค์ฐ ์ ์ฉํ ๋๊ตฌ
6. @AppStorage
๏ปฟ๏ปฟ์ ์: ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ค์ ์ ์ฝ๊ฒ ์ ์ฅํ๊ณ ์กฐํ
๏ปฟ๏ปฟ์ฅ์ : UserDefaults๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๊ฐํธ
๏ปฟ๏ปฟ๋จ์ : ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์๋ ์ ํฉํ์ง ์์
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: ์ฌ์ฉ์ ์ค์ ์ ์ ์ฅํ๊ณ ์กฐํํ ๋.
๏ปฟ๏ปฟ์ ์ฌ์ฉ: ๊ฐ๋จํ ๋ฐ์ดํฐ ์ ์ฅ์ด ํ์ํ ๋ ๋น ๋ฅด๊ณ ํจ์จ์
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: @AppStorage ์ด๋ ธํ ์ด์ ๊ณผ ํจ๊ป ์ ์ฅ ํค๋ฅผ ์ง์
@AppStorage ("user_name") var userName: String = "Guest"
์ฌ์ฉ ์์์ฝ๋
7. @SceneStorage
๏ปฟ๏ปฟ์ ์: ์ฑ์ ๋ค์ํ ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์
๏ปฟ์ฅ์ : ์ํ ๋ณต์์ด ์ฌ์
๏ปฟ๏ปฟ๋จ์ : ๋ณต์กํ ๋ฐ์ดํฐ ์ ์ฅ์๋ ์ ํฉํ์ง ์์. (ํ ์ดํฐ ํ์ ์ ํ, ๋ก์ปฌ ์ ์ฅ์ด๋ผ ์ฌ ๋ฌ ๋๋ฐ์ด์ค๊ฐ์ ์ํ ๊ณต์ X)
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: ์ฑ์ ๋ค์ํ '์ฅ๋ฉด'๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ์ ์ฌ์ฉ
๏ปฟ๏ปฟ์ ์ฌ์ฉ: ์ฌ์ฉ์๊ฐ ์ฑ์ ๋ค์ ์ด์์ ๋ ์ด์ ์ํ๋ฅผ ๋ณต์ํ๊ธฐ ์ํด.
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: @SceneStorage๋ฅผ ๋ณ์ ์์ ๋ถ์ฌ ์ฌ์ฉ
๏ปฟ๏ปฟ์ฌ์ฉ ์: ํญ์ ์ ํ ์ํ๋ฅผ ๊ธฐ์ตํ๋ ์ฝ๋์์ ์ฌ์ฉ
์ฐธ๊ณ ๋ก ์ด ์์์์, ํญ์ ์ ํ ์ํ๋ selectedTab ๋ณ์์ ์ ์ฅ๋๊ณ , ์ฑ์ด ์ข ๋ฃ๋ ํ ๋ค์ ์คํ๋ ๋ ์ด ์ํ๋ฅผ ๋ณต์
@AppStorage, @scenestorage ๊ณตํต์ ๊ณผ ์ฐจ์ด์
๏ปฟ๏ปฟ๊ณตํต์ : ๋ ๋ค ์ฑ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋๋ฐ ์ฌ์ฉ
๏ปฟ๏ปฟ์ฐจ์ด์ : @AppStorage๋ ์ฑ ์ ์ฒด์ ๊ฑธ์ณ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋ฉฐ, @SceneStorage๋ ํน์ Scene์์๋ง ๊ตญํ๋ ์ํ๋ฅผ ์ ์ฅ
8. @Environment
๏ปฟ๏ปฟ์ ์: ์์คํ ํ๊ฒฝ ๋ณ์๋ ์ฑ ์ค์ ์ View๋ก ์ฃผ์
๏ปฟ๏ปฟ์ฅ์ : ์ ์ญ ์ค์ ์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์์
๏ปฟ๏ปฟ๋จ์ : ์ฌ์ฉ ๊ฐ๋ฅํ ํค๊ฐ SwiftUI์ ์ํด ์ ํ๋จ.
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: ์์คํ ์ค์ ์ View์์ ํ์๋ก ํ ๋.
๏ปฟ๏ปฟ์ ์ฌ์ฉ: ์์คํ ์ค์ ์ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ์ ๊ทผํ๊ธฐ ์ํด.
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: @Environment ์ด๋ ธํ ์ด์ ๊ณผ ํจ๊ป ํน์ ํค๋ฅผ ์ฌ์ฉ @Environment (l. locale) var locale
์ฌ์ฉ ์์์ฝ๋
@AppStorage, @Environment ๊ณตํต์ ๊ณผ ์ฐจ์ด์
๊ณตํต์ : @AppStorage์ @Environment๋ ๋ ๋ค ์ค์ ๊ฐ์ ์ ์ฅํ๊ณ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ
์ฐจ์ด์ : @AppStorage๋ ์ฌ์ฉ์ ์ค์ ์ UserDefaults์ ์ ์ฅ, @Environment๋ ์์คํ ํ๊ฒฝ ์ค์ ์ ๊ฐ์ ธ์ด
9. @StateObject
๏ปฟ๏ปฟ์ ์: ์์ ๊ถ์ ๊ฐ์ง๋ ์ต์ ๋ฒ๋ธ ์ค๋ธ์ ํธ๋ฅผ ์ ์ฅ(SwiftuI์์ ์ฐธ์กฐ ํ์ ์ ์ํ ๊ฐ์ฒด๋ฅผ ์์ ํ๊ฒ ์์ ํ๊ณ ๊ด๋ฆฌ)
๏ปฟ๏ปฟ์ฅ์ : ์ํ ์์ ๊ถ(์ํ ๊ฐ์ฒด๋ฅผ ์์ ํ๊ฒ ์์ ๋ฐ ๊ด๋ฆฌ), ๋ฐ์ดํฐ ๊ณต์ (์ฌ๋ฌ ๋ทฐ์์ ๊ณต ์ ๊ฐ๋ฅ)
๋จ์ : ๋จ์ผ ๋ทฐ์์๋ง ์์ ํ ์ ์์, ๋ฉ๋ชจ๋ฆฌ๊ด๋ฆฌ(๊ฐ์ฒด๊ฐ ๋ทฐ ์ธ๋ถ์์ ์์ฑ๋์ง ์์ผ ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ํ์์)
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: ๋ทฐ์ ๋ทฐ ๊ณ์ธต์์ ๊ณต์ ๋์ด์ผ ํ๋ ์ํ๊ฐ ์๋ ๊ฒฝ์ฐ.
๏ปฟ๏ปฟ์ ์ฌ์ฉ: ๋ฐ์ดํฐ์ ์์ ๊ถ๊ณผ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด, ๋ฐ์ดํฐ ๋๋ ์ํ๋ฅผ ๋ทฐ ๊ณ์ธต ์ ์์ ํ๊ฒ ๊ณต์ ํ๊ณ ์ถ์๋
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: @StateObject ์ด๋ ธํ ์ด์ ์ ๋ณ์ ์์ ๋ถ์ฌ ์ฌ์ฉ
๏ปฟ๏ปฟ์ฌ์ฉ ์: viewModel์ ๋ทฐ์์ ์ง์ ์์ฑํ๊ณ ๊ด๋ฆฌ ํ ๋.
๏ปฟ๏ปฟ์ฌ์ฉ ์์์ฝ๋ :
@stateobject๋ฅผ ์ฌ์ฉํ์ฌ Counter๋ผ๋ ObservableObject๋ฅผ ContentView ๋ด์์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ฝ๋ ์์
์ด ์์์ Counter๋ ์ํ๋ฅผ ๋ฐํํ๋ ํด๋์ค์ด๋ฉฐ, @Published ํ๋กํผํฐ ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ count ๋ณ์์ ๋ณํ๋ฅผ ๊ฐ์ง.
ContentView๋ ์ด Counter ๊ฐ์ฒด๋ฅผ @StateObject๋ก ์ ์ธํ์ฌ ๋ทฐ๊ฐ ์๋ฉธ๋์ด ๋ค์ ์์ฑ๋ ๋์๋ Counter
๊ฐ์ฒด๊ฐ ์ ์ง๋๊ฒํจ
์ด๋ ๊ฒ ํ๋ฉด Counter์ ์ํ๊ฐ ContentView์ ์์ ํ๊ฒ ๋ฐ์ธ๋ฉ๋๊ณ , "Increment" ๋ฒํผ์ ๋๋ฅด๋ฉด count ๊ฐ์ด ์ฆ๊ฐํ๋ฉด์ UI๊ฐ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋จ
10. @FetchRequest
๏ปฟ๏ปฟ์ ์: Core Dataํจ์น ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ธ๋ฉํจ
๏ปฟ๏ปฟ์ฅ์ : Core Data ํตํฉ์ด ๋งค์ฐ ์ฌ์, ์๋ ์ ๋ฐ์ดํธ(Core Data์ ๋ณ๊ฒฝ ์ฌํญ ์๋ ๋ฐ ์)
๏ปฟ๏ปฟ๋จ์ : Core Data์๋ง ํนํ๋์ด ์์(Only Core Data), ์ฟผ๋ฆฌ์ ํ(๋ณต์กํ ์ฟผ๋ฆฌ ์ํ ํ ์ ์์)
๏ปฟ๏ปฟ์ธ์ ์ฌ์ฉ: Core Data๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์, ์ด๋ฅผ ๋ทฐ์ ํ์ํ ํ์๊ฐ ์์ ๋
๏ปฟ๏ปฟ์ ์ฌ์ฉ: Core Data ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ค๊ณ ๋น๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด
๏ปฟ๏ปฟ์ด๋ป๊ฒ ์ฌ์ฉ: @FetchRequest ์ด๋ ธํ ์ด์ ์ ๋ณ์ ์์ ๋ถ์ฌ ์ฌ์ฉ
๏ปฟ๏ปฟ์ฌ์ฉ ์: Core Data์ ์ํฐํฐ ๋ชฉ๋ก์ ํ ์ด๋ธ ๋ทฐ์ ํ์ํ ๋
๏ปฟ๏ปฟ์ฌ์ฉ ์์์ฝ๋
๋ค๋ฅธ ์ต์ ๊ณผ์ ์ฐจ์ด์
@Observedobject์์ ์ฐจ์ด์
@ObservedObject๋ ์ผ๋ฐ์ ์ธ ObservableObject๋ฅผ ๋ฐ์ธ๋ฉํ ๋ ์ฌ์ฉ๋๋ฉฐ, @FetchRequest๋ Core Data ์ ํนํ๋์ด ์์ต๋๋ค.
@StateObject๊ณผ @FetchRequest์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์
๏ปฟ๏ปฟ๊ณตํต์ : ๋ ๋ค ๋ฐ์ดํฐ๋ฅผ ๋ทฐ์ ๋ฐ์ธ๋ฉํ๋ ๋ฐ ์ฌ์ฉ
๏ปฟ๏ปฟ์ฐจ์ด์ : @StateObject์ ์ผ๋ฐ์ ์ธ ์ํ ๊ด๋ฆฌ์ ์ฌ์ฉ, @FetchRequest๋ Core Data์ ํนํ๋จ
๋ฐ์ดํฐ์ ์์ ์ ๋ฒ์
๏ปฟ๏ปฟ์ํ ๊ด๋ฆฌ(@State, @Binding, @observedobject, @Stateobject, @Environmentobject): ์ด๋ค์ ๋ฐ์ดํฐ์ ์ํ๋ฅผ ๋ทฐ์ ์ฐ๊ฒฐ์ํค๋ ์ญํ
๏ปฟ๏ปฟ๋ฐ์ดํฐ ์ ์ฅ(@Appstorage, @Scenestorage): ์ด ๋ ๋ํผ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์์ ์ผ๋ก ์ ์ฅํ๋ ์ญํ
๏ปฟ๏ปฟ์์คํ ์ ๋ณด ์ ๊ทผ(@Environment, @FetchRequest): ์ด๋ค์ ์ฑ์ ์คํ ํ๊ฒฝ์ด๋ ์ธ ๋ถ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ์ ๋ด๋น
์๋ฆผ ๋ฉ์ปค๋์ฆ
๏ปฟ๏ปฟ์๋ ์๋ฆผ(@State, @Published, @observedobject, @Environmentobject, @StateObject): ์ด๋ค์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ์๋์ผ๋ก ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธ
๏ปฟ๏ปฟ๋ช ์์ ์๋ฆผ(@Binding, @Environment, @FetchRequest, @AppStorage, @SceneStorage): ์ด๋ค์ ์ํ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ธ๋ถ ์์ธ(์ฌ์ฉ์ ์ก์ , ์์คํ ์ค์ ๋ฑ)์ ์์กดํ๋ฉฐ, ๋ทฐ ์ ๋ฐ์ดํธ๋ฅผ ๋ช ์์ ์ผ๋ก ์์ฒญํ ์ ์์
๋ฐ์ดํฐ์ ์๋ช ์ฃผ๊ธฐ
๏ปฟ๏ปฟ๋ทฐ ์๋ช ์ฃผ๊ธฐ(@State, @Binding, @observedobject): ์ด ๋ํผ๋ค์ ๋ทฐ์ ์๋ช ์ฃผ๊ธฐ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๊ฐ ์ ์ง
๏ปฟ๏ปฟ์ฑ ์๋ช ์ฃผ๊ธฐ(@Appstorage, @SceneStorage, @Environmentobject, @StateObject): ์ด ๋ํผ๋ค์ ์ฑ์ด๋ ์ฌ(scene)์ ์๋ช ์ฃผ๊ธฐ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ง
๋ฐ์ดํฐ ์์ค
๏ปฟ๏ปฟ๋ด๋ถ ๋ฐ์ดํฐ(@State, @Binding, @observedobject, @Stateobject): ์ด๋ค์ ์ฃผ ๋ก ์ฑ ๋ด๋ถ์์ ์์ฑ๋๊ฑฐ๋ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃธ
๏ปฟ๏ปฟ์ธ๋ถ ๋ฐ์ดํฐ(@Environment, @FetchRequest, @AppStorage, @SceneStorage, @Environmentobject): ์ด๋ค์ ์ฃผ๋ก ์ฑ ์ธ๋ถ(์์คํ ์ค์ , ํ์ผ, ๋คํธ์ํฌ ๋ฑ)์์ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃธ!
Published์ ์ฌ์ฉ
@Published ์์ฑ์ ๋ํ $ ์ฌ์ฉ์ ์ ๋ฌด๋ ๊ทธ ์์ฑ์ ์ง์ ์ ๊ทผํ ๊ฒ์ธ์ง, ์๋๋ฉด ๊ทธ ์์ฑ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด์ฐฐํ ๊ฒ์ธ์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
With $: @Published ์์ฑ์ Publisher์ ์ ๊ทผํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ฆ, viewModel.$name์ Published<String>.Publisher ํ์ ์ ๋๋ค. ์ด Publisher๋ ๊ฐ์ ๋ณํ๋ฅผ ๊ด์ฐฐ(subscribe)ํ๊ฑฐ๋ ๋ฐ์ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
Without $: @Published ์์ฑ์ ์ค์ ๊ฐ์ ์ ๊ทผํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ฆ, viewModel.name์ String ํ์ ์ ๋๋ค.
์ถ์ฒ
Last updated