๐ŸŽ SwiftUI์—์„œ @Observable์„ ์‚ฌ์šฉํ•˜์ž

2025. 4. 3. 14:46ยท๐Ÿง‘๐Ÿปโ€๐Ÿ’ป Dev
๋ชฉ์ฐจ
  1. ์˜ˆ์ „์—๋Š” ์ด๋žฌ์–ด์š”... ObservableObject + @Published
  2. ์ง€๊ธˆ์€ ์ด๋ ‡๊ฒŒ ๋ฐ”๋€Œ์—ˆ์–ด์š”! @Observable ๋งคํฌ๋กœ
  3. @Observable์ด ์ข‹์€ ์ด์œ  TOP 3
  4. 1. ๋ฌธ๋ฒ•์ด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์š”
  5. 2. ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋์–ด์š”
  6. 3. Optional๋กœ ๋œ ๊ฐ์ฒด๋‚˜ Collectionํƒ€์ž…์˜ ์†์„ฑ๋“ค ํŠธ๋ž˜ํ‚น ๊ฐ€๋Šฅ
  7. ๋งˆ๋ฌด๋ฆฌ
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„~! ์˜ค๋Š˜์€ 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ํƒ€์ž…์˜ ์†์„ฑ๋“ค ํŠธ๋ž˜ํ‚น ๊ฐ€๋Šฅ

๋งˆ๋ฌด๋ฆฌ

์ด์ œ @Observable๋กœ ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์กŒ์ฃ ? 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
  1. ์˜ˆ์ „์—๋Š” ์ด๋žฌ์–ด์š”... ObservableObject + @Published
  2. ์ง€๊ธˆ์€ ์ด๋ ‡๊ฒŒ ๋ฐ”๋€Œ์—ˆ์–ด์š”! @Observable ๋งคํฌ๋กœ
  3. @Observable์ด ์ข‹์€ ์ด์œ  TOP 3
  4. 1. ๋ฌธ๋ฒ•์ด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์š”
  5. 2. ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋์–ด์š”
  6. 3. Optional๋กœ ๋œ ๊ฐ์ฒด๋‚˜ Collectionํƒ€์ž…์˜ ์†์„ฑ๋“ค ํŠธ๋ž˜ํ‚น ๊ฐ€๋Šฅ
  7. ๋งˆ๋ฌด๋ฆฌ
'๐Ÿง‘๐Ÿปโ€๐Ÿ’ป Dev' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • SwiftUI Spacer ์‚ฌ์šฉ ๊ฟ€ํŒ
  • Swift Concurrency์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ฃผ์˜ํ•˜๊ธฐ ๐Ÿง
  • Swift Concurrency: async/await ์™„์ „์ •๋ณต ๐Ÿš€
Jakiki
Jakiki
    ๋ฐ˜์‘ํ˜•
  • Jakiki
    ์ œ์ดํ‚คํ‚ค
    Jakiki
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (18)
      • ๐Ÿฆ† ์ผ์ƒ (0)
      • ๐Ÿ“š ์„œํ‰ (2)
      • โœ๏ธ ๋ฆฌ๋ทฐ (8)
      • ๐Ÿฝ ๋ง›์ง‘ (1)
      • โญ๏ธ Tip (1)
      • ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป Dev (4)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋…ธํŠธ์•ฑ
    ์•Œํ”„๋ ˆ๋“œ
    Dev
    ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ์—ญ
    ์ธ์ฒœ ๋ง›์ง‘
    ์ƒ์‚ฐ์„ฑ
    Swift
    IOS
    Edge ๋ธŒ๋ผ์šฐ์ €
    ์•ฑ
    ์‹ฌํ”Œ
    ํ”„๋กœ๋•ํŠธ
    iosํŒ
    SwiftUI
    ๊ตฌ๊ธ€ ๋ฒˆ์—ญ
    ํฌ๋กฌ ์ต์Šคํ…์…˜
    Alfred
    Arc ๋ธŒ๋ผ์šฐ์ €
    ์„ค๋ ํƒ•
    ๋ฆฌ๋ทฐ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Jakiki
๐ŸŽ SwiftUI์—์„œ @Observable์„ ์‚ฌ์šฉํ•˜์ž
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.