ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toFrontend
์๋ฌธ ์ฝ๊ธฐ
Swift Struct Initializer ์ค๊ณ๋ฅผ ํตํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ ๋ฐ ์ ์ฐํ ์ธ์คํด์คํ ์ ๋ต
Swift Structs โ Custom Initializers & the Power of self ๐ง
AI ์์ฝ
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) ์ ์ง