ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Swift Structs โ€” Custom Initializers & the Power of self ๐Ÿ”ง
Dev.toDev.to
Frontend

Swift Struct Initializer ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ ๋ฐ ์œ ์—ฐํ•œ ์ธ์Šคํ„ด์Šคํ™” ์ „๋žต

Swift Structs โ€” Custom Initializers & the Power of self ๐Ÿ”ง

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

Context

Swift์˜ Memberwise Initializer๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•˜๋‚˜, ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฐ˜์˜์ด๋‚˜ ํŠน์ • ํ”„๋กœํผํ‹ฐ์˜ ์ž๋™ ํ• ๋‹น ์ œ์–ด์— ํ•œ๊ณ„ ์กด์žฌ. ๋‹จ์ˆœ ์ƒ์„ฑ์ž๋ฅผ ๋„˜์–ด์„  ์„ธ๋ฐ€ํ•œ ์ƒํƒœ ์ œ์–ด ๋ฐ ์ดˆ๊ธฐํ™” ์ „๋žต ์ˆ˜๋ฆฝ์ด ํ•„์š”ํ•œ ์ƒํ™ฉ.

Technical Solution

  • Memberwise Initializer์˜ ํ•œ๊ณ„ ๊ทน๋ณต์„ ์œ„ํ•œ Custom Initializer ์ •์˜ ๋ฐ self ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•œ Property์™€ Parameter ๊ฐ„์˜ Name Collision ํ•ด๊ฒฐ
  • ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐ๊ฐ’ ํ• ๋‹น์„ ๊ฐ•์ œํ•˜๋Š” Golden Rule ์ ์šฉ์œผ๋กœ ๋Ÿฐํƒ€์ž„ Null Reference ๋ฐฉ์ง€ ๋ฐ Compile-time ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ํ™•๋ณด
  • Int.random ๋“ฑ ๋‚ด๋ถ€ ๋กœ์ง์„ ํ†ตํ•œ ํ”„๋กœํผํ‹ฐ ์ž๋™ ํ• ๋‹น ๊ตฌ์กฐ ์„ค๊ณ„๋กœ ์™ธ๋ถ€ ์˜์กด์„ฑ ์ œ๊ฑฐ ๋ฐ ๊ฐ์ฒด ์ƒ์„ฑ ์บก์Аํ™” ๊ตฌํ˜„
  • Overloading ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•œ ๋‹ค์ค‘ Initializer ๊ตฌ์„ฑ์œผ๋กœ ๋‹ค์–‘ํ•œ ์ปจํ…์ŠคํŠธ์˜ ๊ฐ์ฒด ์ƒ์„ฑ ๊ฒฝ๋กœ ์ œ๊ณต
  • Extension ๋‚ด Custom Initializer ์ •์˜๋ฅผ ํ†ตํ•œ Default Memberwise Initializer ์œ ์ง€ ์ „๋žต์œผ๋กœ ์ƒ์„ฑ์ž ๊ฐ€์šฉ์„ฑ ๊ทน๋Œ€ํ™”

- Custom Initializer ์ž‘์„ฑ ์‹œ memberwise ์ƒ์„ฑ์ž๊ฐ€ ์ œ๊ฑฐ๋จ์„ ์ธ์ง€ํ•˜๊ณ  ํ•„์š” ์‹œ Extension ํ™œ์šฉ ๊ฒ€ํ†  - ํ”„๋กœํผํ‹ฐ์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ช…์ด ๋™์ผํ•  ๊ฒฝ์šฐ self ๋ช…์‹œ๋ฅผ ํ†ตํ•ด ๊ฐ€๋…์„ฑ ๋ฐ ์ฝ”๋“œ ๋ช…ํ™•์„ฑ ํ™•๋ณด - ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ดˆ๊ธฐํ™” ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๊ฒ€์ฆํ•˜์—ฌ ๊ฐ์ฒด ๋ถˆ๋ณ€์„ฑ(Immutability) ์œ ์ง€

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