ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Swift Structs โ€” Property Observers (willSet & didSet) ๐Ÿ‘€
Dev.toDev.to
Frontend

Property Observers๋ฅผ ํ†ตํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ ๋กœ์ง์˜ ์บก์Аํ™” ๋ฐ ์ž๋™ํ™”

Swift Structs โ€” Property Observers (willSet & didSet) ๐Ÿ‘€

Gamya2026๋…„ 6์›” 29์ผ5๋ถ„beginner

Context

์†์„ฑ ๋ณ€๊ฒฝ ์‹œ๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ธํ•œ ๋กœ์ง ๋ˆ„๋ฝ ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ. ๋ถ„์‚ฐ๋œ ์—…๋ฐ์ดํŠธ ์ง€์ ์œผ๋กœ ์ธํ•ด ๋Ÿฐํƒ€์ž„ ๋ฒ„๊ทธ ๋ฐœ์ƒ ํ™•๋ฅ ์ด ๋†’์€ ์•„ํ‚คํ…์ฒ˜์  ํ•œ๊ณ„ ์ง๋ฉด.

Technical Solution

  • Property Observer ๋„์ž…์„ ํ†ตํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ ๋กœ์ง์˜ ์†์„ฑ ๋‚ด๋ถ€ ์บก์Аํ™”
  • didSet์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ’ ๋ณ€๊ฒฝ ์งํ›„ UI ์—…๋ฐ์ดํŠธ ๋ฐ ๋ฐ์ดํ„ฐ ๋กœ๊น… ์ž๋™ํ™”
  • willSet์„ ํ†ตํ•œ ๋ณ€๊ฒฝ ์ „ newValue ์บก์ฒ˜๋กœ ์ƒํƒœ ์Šค๋ƒ…์ƒท ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธฐ๋ฐ˜ ๋งˆ๋ จ
  • oldValue ์ž๋™ ์ œ๊ณต ๊ธฐ๋Šฅ์„ ์ด์šฉํ•œ ์ด์ „ ์ƒํƒœ์™€ ํ˜„์žฌ ์ƒํƒœ์˜ ์ •๋ฐ€ ๋น„๊ต ๊ตฌํ˜„
  • ์ฑ…์ž„ ์ฃผ์ฒด๋ฅผ ๊ฐœ๋ฐœ์ž์—์„œ Swift ๋Ÿฐํƒ€์ž„์œผ๋กœ ์ด์ „ํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ๋ˆ„๋ฝ ๋ฐฉ์ง€
  • ๋ฌด๊ฑฐ์šด ์ž‘์—… ์ œ์™ธ ๋ฐ ๊ฐ€๋ฒผ์šด ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ž‘์—… ์œ„์ฃผ์˜ ์„ค๊ณ„๋กœ ์‹คํ–‰ ์‹œ๊ฐ„ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ ํ™•๋ณด

- ๋‹จ์ˆœ UI ์—…๋ฐ์ดํŠธ๋‚˜ ๋กœ๊น… ๋“ฑ ๊ฒฝ๋Ÿ‰ ์ž‘์—…๋งŒ Property Observer ๋‚ด์— ๋ฐฐ์น˜ํ•  ๊ฒƒ - ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์ด๋‚˜ ๋Œ€๊ทœ๋ชจ ์ •๋ ฌ ๋“ฑ Heavy Operation์€ ๋ช…์‹œ์  ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋ถ„๋ฆฌํ•  ๊ฒƒ - ๋ณ€๊ฒฝ ์ „ํ›„ ์ƒํƒœ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ `oldValue`์™€ `newValue` ํ™œ์šฉ ์—ฌ๋ถ€๋ฅผ ๊ฒ€ํ† ํ•  ๊ฒƒ - ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๋ถ€์ˆ˜ ํšจ๊ณผ(Side Effect)๊ฐ€ ๋นˆ๋ฒˆํ•œ ์†์„ฑ์€ `didSet` ์ ์šฉ์„ ์šฐ์„  ๊ณ ๋ คํ•  ๊ฒƒ

์›๋ฌธ ์ฝ๊ธฐ