์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ~! ์ค๋์ iOS 17๋ถํฐ ๋์
๋ @Observable
๋งคํฌ๋ก๊ฐ ๊ธฐ์กด์ ObservableObject
๋ฅผ ์ด๋ป๊ฒ ๋์ฒดํ๊ณ ์๋์ง ํจ๊ป ์ดํด๋ด
์๋ค! ๐
์์ ์๋ ์ด๋ฌ์ด์... ObservableObject + @Published
iOS 13๋ถํฐ SwiftUI๊ฐ ์ฒ์ ๋์์ ๋, ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ํด ObservableObject
ํ๋กํ ์ฝ๊ณผ @Published
ํ๋กํผํฐ ๋ํผ๋ฅผ ์ฌ์ฉํ์ด์. ์ด๊ฑฐ ์จ๋ณธ ์ฌ๋? ์! โ
class UserProfile: ObservableObject {
@Published var username: String = "์ ํ๋น "
@Published var level: Int = 1
@Published var isOnline: Bool = false
}
struct ProfileView: View {
@ObservedObject var profile = UserProfile()
var body: some View {
VStack {
Text("์ ์ ๋ช
: \(profile.username)")
Text("๋ ๋ฒจ: \(profile.level)")
Text("์ ์์ํ: \(profile.isOnline ? "์จ๋ผ์ธ" : "์คํ๋ผ์ธ")")
}
}
}
๊ทผ๋ฐ ์ด๊ฑฐ ๋ฌธ์ ์ ์ด ์ข ์์์ด์. ๋ณต์กํ ์ฑ์์๋ @ObservedObject
, @StateObject
, @EnvironmentObject
๋ฑ ๋๋ฌด ๋ง์ ํ๋กํผํฐ ๋ํผ๊ฐ ์์ด์ ํท๊ฐ๋ ธ์ฃ . ๊ฒ๋ค๊ฐ ํด๋์ค๋ง ์ง์ํ๋ค๋ ํ๊ณ๋ ์์๊ณ ์.
์ง๊ธ์ ์ด๋ ๊ฒ ๋ฐ๋์์ด์! @Observable ๋งคํฌ๋ก
iOS 17๋ถํฐ๋ @Observable
๋งคํฌ๋ก๊ฐ ๋ฑ์ฅํ์ด์! ์ด์ ๊ฐ๋จํ๊ฒ ํด๋์ค์ ์ด ๋งคํฌ๋ก๋ง ๋ถ์ด๋ฉด ๋! ๐
@Observable
class UserProfile {
var username: String = "์ ํ๋น "
var level: Int = 1
var isOnline: Bool = false
// @Published ๋ ์ด์ ํ์ ์์!
}
struct ProfileView: View {
var profile = UserProfile()
var body: some View {
VStack {
Text("์ ์ ๋ช
: \(profile.username)")
Text("๋ ๋ฒจ: \(profile.level)")
Text("์ ์์ํ: \(profile.isOnline ? "์จ๋ผ์ธ" : "์คํ๋ผ์ธ")")
}
}
}
๋ณด์ด์๋์? ์ผ๋ง๋ ๊น๋ํด์ก๋์ง! ๐คฉ
@Observable์ด ์ข์ ์ด์ TOP 3
1. ๋ฌธ๋ฒ์ด ํจ์ฌ ๊ฐ๊ฒฐํด์
@Published
ํ๋กํผํฐ ๋ํผ๋ฅผ ๊ฐ ํ๋กํผํฐ๋ง๋ค ๋ถ์ผ ํ์ ์์ด, ํด๋์ค์ @Observable
ํ ๋ฒ๋ง ์ ์ธํ๋ฉด ๋ชจ๋ ํ๋กํผํฐ๊ฐ ์๋์ผ๋ก ๊ด์ฐฐ ๋์์ด ๋ฉ๋๋ค.
2. ์ฑ๋ฅ์ด ๊ฐ์ ๋์ด์
ObservableObject
๋ ๊ฐ์ฒด ์ ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋ฆผ์ ๋ณด๋ด์ง๋ง, @Observable
์ ํน์ ํ๋กํผํฐ์ ๋ํ ์ ๊ทผ๋ง ์ถ์ ํด์ ํ์ํ ๋ถ๋ถ๋ง ์
๋ฐ์ดํธํฉ๋๋ค. ์ด๊ฑด ์ฑ๋ฅ ์ธก๋ฉด์์ ์ง์ง ์นญ์ฐฌํด~ ๐
3. Optional๋ก ๋ ๊ฐ์ฒด๋ Collectionํ์ ์ ์์ฑ๋ค ํธ๋ํน ๊ฐ๋ฅ
๋ง๋ฌด๋ฆฌ
์ด์ @Observabl
e๋ก ์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๊ฒฐํด์ก์ฃ ? iOS 17 ์ด์์ ํ๊ฒ์ผ๋ก ํ๋ ์ ํ๋ก์ ํธ๋ผ๋ฉด ObservableObject
๋์ @Observable
์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ ฅ ์ถ์ฒํฉ๋๋ค! ๐
ํน์ ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํ๊ณ ์ถ๋ค๋ฉด, ์ ์ง์ ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ ์ข์์. ์ฑ์ ํ ๋ถ๋ถ๋ถํฐ ์์ํด์ ์ฒ์ฒํ ํ์ฅํด ๋๊ฐ์ธ์. ๋ ๋ฐฉ์์ ๋น๋ถ๊ฐ ๊ณต์กดํ ์ ์์ผ๋๊น์.
์ฌ๋ฌ๋ถ๋ @Observable๋ก ์ฝ๋ ํ ๋ฒ ๊ฐ์ํ๋ณด์ธ์! ํจ์ฌ ํธํด์ง SwiftUI ๊ฐ๋ฐ์ ๊ฒฝํํ ์ ์์ ๊ฑฐ์์~
๋ค์์ ๋ ๋ง๋์! ๐ iOS/Swift ๊ฟํ์ด ํ์ํ๋ฉด ์ธ์ ๋ ์ฐพ์์์~ ์๋
~
'๐ง๐ปโ๐ป Dev' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SwiftUI Spacer ์ฌ์ฉ ๊ฟํ (0) | 2025.03.27 |
---|---|
Swift Concurrency์์ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ฃผ์ํ๊ธฐ ๐ง (0) | 2025.03.12 |
Swift Concurrency: async/await ์์ ์ ๋ณต ๐ (1) | 2025.03.11 |