์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 

SwiftUI์˜ Property Wrapper(@State, @Binding...)

SwiftUI ์ดˆ๋ฐ˜์— ๋“ฑ์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ จ ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ์— ๋Œ€ํ•ด ๋ฐฐ์›๋‹ˆ๋‹ค. @State, @Binding, .constant, ObservableObject, @Published, @ObservedObject, @EnvironmentObject, @Environment

Thumbnail

์ดˆ๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด, ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • SwiftUI์— ๋“ฑ์žฅํ•˜๋Š” Property Wrapper ํ•™์Šต

  • SwiftUI์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹ ํ•™์Šต

ํ˜น์‹œ ์ด๋Ÿฐ ๊ฒฝํ—˜ ์žˆ์œผ์…จ๋‚˜์š”?

๐Ÿ˜ฎ

SwiftUI๋ฅผ ์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๋‹ค๊ฐ€ ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ์—์„œ ๋ง‰ํ˜”์–ด์š”.

๐Ÿฅฒ

@State, @Binding, @ObservedObject ๋“ฑ๋“ฑ ๊ฒ€์ƒ‰ํ•ด๋„ ์‰ฌ์šด ๋‹ต๋ณ€์„ ์ฐพ๊ธฐ ์–ด๋ ค์›Œ์š”.

์•Œ๊ณ  ๋ณด๋ฉด ์–ด๋ ต์ง€ ์•Š์€
Property Wrapper ๐Ÿ’ก

๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ์ง๊ด€์ ์ด์–ด์„œ ์ฝ”๋”ฉ์„ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ๋„ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ SwiftUI. ์ €๋„ SwiftUI๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šธ ๋•Œ UIKit์— ๋น„ํ•ด ๋„ˆ๋ฌด ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•ด์„œ ๋†€๋ž๋˜ ๊ธฐ์–ต์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ๋ฐฐ์šฐ๊ธฐ ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„์€ SwiftUI์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ จ Property Wrapper๋“ค์ธ๋ฐ์š”. ์ด ํ”„๋กœํฌํ„ฐ ๋ž˜ํผ๋Š” ์•ˆ ์“ฐ๋Š” ์ฝ”๋“œ๊ฐ€ ์—†์„ ์ •๋„๋กœ ๋„ˆ๋ฌด ๋งŽ์€ ๊ณณ์—์„œ ์“ฐ์ด๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ์šฉ์–ด์˜ ๊ฐœ๋…์กฐ์ฐจ ๋‚ฏ์„ค์–ด์„œ ํ•™์Šต ์†๋„๊ฐ€ ๋งŽ์ด ๋”๋ŽŒ์กŒ์–ด์š”. ์•Œ๊ณ  ๋‚˜๋ฉด ์‚ฌ์‹ค ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ๊ฒƒ๋„ ์•„๋‹Œ๋ฐ, ์‰ฌ์šด ์„ค๋ช…์„ ์ฐพ๋Š” ๊ฒŒ ํž˜๋“ค์–ด ํ—ค๋งธ๋˜ ๊ฒƒ ๊ฐ™์•„์š”.

๊ฐ•์˜๋ฅผ ๋“ค์œผ์‹œ๋Š” ๋ถ„๋“ค์€ ์ด๋Ÿฐ ์–ด๋ ค์›€์„ ์‰ฝ๊ฒŒ ๊ทน๋ณตํ•˜์‹ค ์ˆ˜ ์žˆ๋„๋ก ์ด ๊ฐ•์˜๋ฅผ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ•์˜์—๋Š” ์ง์ ‘ ๋งŒ๋“  ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ์ž๋ฃŒ(๊ทธ๋ฆผ, ํ‚ค๋…ธํŠธ ๋“ฑ)๋ฅผ ํ†ตํ•ด ๋“ฃ๊ธฐ๋งŒ ํ•ด๋„ ์ดํ•ดํ•˜์‹ค ์ˆ˜ ์žˆ๋„๋ก ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

SwiftUI๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ๋ถ„๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ํ•œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ตœ๋Œ€ํ•œ ์‰ฝ๊ฒŒ ๊ฐ•์˜๋ฅผ ์ œ์ž‘ํ–ˆ์œผ๋‹ˆ, ์ €์™€ ํ•จ๊ป˜ Property Wrapper๋ฅผ ํ™•์‹คํžˆ ์ •๋ณตํ•ด ๋ด…์‹œ๋‹ค.


์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜ ์ถ”์ฒœํ•ด์š” ๐Ÿ™†โ€โ™€๏ธ

SwiftUI๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ๋“ค

UIKit์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, SwiftUI๋กœ ๋œ ๊ฐ•์˜์ž๋ฃŒ๋ฅผ ๋ณด๋Š” ๋ถ„๋“ค

SwiftUI์˜ Property Wrapper๋ฅผ ๋น ๋ฅด๊ฒŒ ํ›‘์–ด๋ด์•ผ ํ•˜๋Š” ๋ถ„๋“ค

์ด ๊ฐ•์˜์™€ ํ•จ๊ป˜ํ•ด์š”! ๐Ÿ™Œ

  • SwiftUI ์ฝ”๋“œ์—์„œ ์–ธ์ œ๋‚˜ ๋“ฑ์žฅํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ๋“ค์„ ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ์›๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๊ฐ•์˜์—๋Š” ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์„œ ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•™์Šต ๋‚ด์šฉ ๐Ÿ“š

SwiftUI์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ จ Property Wrapper๋“ค์— ๋Œ€ํ•ด ๋ฐฐ์›๋‹ˆ๋‹ค.

  • @State
  • @Binding
  • .constant
  • ObservableObject
  • @Published
  • @ObservabedObject
  • @StateObject
  • @EnvironmentObject
  • @Environment

2023, Xcode15, iOS17 ๋‚ด์šฉ ๋ฐ˜์˜

  • ObservableObject -> @Observable ๋งคํฌ๋กœ ๋ณ€ํ™˜
  • @StateObject์˜ ๋ณ€ํ™˜
  • @EnvironmentObject์˜ ๋ณ€ํ™˜
  • @Bindable

์˜ˆ์ƒ ์งˆ๋ฌธ Q&A ๐Ÿ’ฌ

Q. ์–ด๋–ค ์ง€์‹์ด ํ•„์š”ํ•œ๊ฐ€์š”?

Swift ๋ฌธ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ๊ฐ•์˜๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์ง€์žฅ์ด ์—†์Šต๋‹ˆ๋‹ค. :D

Q. SwiftUI๊ฐ€ ์ฒ˜์Œ์ธ๋ฐ ์ด ๊ฐ•์˜๋ฅผ ๋“ค์–ด๋„ ๋ ๊นŒ์š”?

์ด ๊ฐ•์˜๋ถ€ํ„ฐ ๋“ค์–ด๋„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ, ํ•œ ๋ฒˆ ์ •๋„ SwiftUI๋ฅผ ์ž ๊น์ด๋ผ๋„ ๊ฒฝํ—˜ํ•œ ์ ์ด ์žˆ๋Š” ๋ถ„๋“ค์—๊ฒŒ ์ตœ์ ์ž…๋‹ˆ๋‹ค.


์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ ๐Ÿ“ข

์‹ค์Šต ํ™˜๊ฒฝ

  • ์šด์˜ ์ฒด์ œ ๋ฐ ๋ฒ„์ „(OS): Xcode ์„ค์น˜๋ฅผ ์œ„ํ•ด mac์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ ๋„๊ตฌ: Xcode

ํ•™์Šต ์ž๋ฃŒ

  • ๊ฐ•์˜๋ณ„ ์ฝ”๋“œ ์˜ˆ์ œ

์„ ์ˆ˜ ์ง€์‹ ๋ฐ ์œ ์˜ ์‚ฌํ•ญ

  • Swift์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ง€์‹๊ณต์œ ์ž ์†Œ๊ฐœ โœ’๏ธ

  • ํ˜„ iOS ๊ฐœ๋ฐœ์ž

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • SwiftUI๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค Property Wrapper์—์„œ ๋ง‰ํžŒ ๋ถ„๋“ค

  • UIKit์„ ์•Œ๊ณ  ์žˆ๋Š”๋ฐ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ SwiftUI๋ฅผ ๋งŒ๋‚œ ๋ถ„๋“ค

  • SwiftUI๋ฅผ ๋น ๋ฅด๊ฒŒ ํ›‘์–ด๋ด์•ผ ํ•˜๋Š” ๋ถ„๋“ค

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • Swift ์–ธ์–ด ์ง€์‹

์•ˆ๋…•ํ•˜์„ธ์š”
์• ๊ตฌ๋งˆ(agmma)์ž…๋‹ˆ๋‹ค.

556

๋ช…

์ˆ˜๊ฐ•์ƒ

51

๊ฐœ

์ˆ˜๊ฐ•ํ‰

74

๊ฐœ

๋‹ต๋ณ€

5.0

์ 

๊ฐ•์˜ ํ‰์ 

4

๊ฐœ

๊ฐ•์˜

์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ˜€

๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ iOS ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ณ  ์‹ถ์€

iOS ๊ฐœ๋ฐœ์ž ์• ๊ตฌ๋งˆ์ž…๋‹ˆ๋‹ค.

๊ฐ•์˜์— ํ•„์š”ํ•œ ์˜ˆ์ œ ๋งŒ๋“œ๋Š”๊ฒƒ์„ ์ข‹์•„ํ•˜๊ณ , ์ž…๋ฌธ์ž์—๊ฒŒ ํ•„์š”ํ•œ ๊ฐ•์˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์—ฐ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

 

 agmma5000@gmail.com 

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

14๊ฐœ โˆ™ (1์‹œ๊ฐ„ 5๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!