ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Swift Structs โ€” Building Your Own Custom Types ๐Ÿ—๏ธ
Dev.toDev.to
Frontend

Swift Struct๋ฅผ ํ†ตํ•œ ํƒ€์ž… ์•ˆ์ „์„ฑ ํ™•๋ณด ๋ฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ์ตœ์ ํ™”

Swift Structs โ€” Building Your Own Custom Types ๐Ÿ—๏ธ

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

Context

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งŒ์œผ๋กœ๋Š” ๋ณต์žกํ•œ ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•จ. ํŠนํžˆ Tuple ์‚ฌ์šฉ ์‹œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜์˜ ์ค‘๋ณต ์ˆ˜์ • ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ.

Technical Solution

  • ์‚ฌ์šฉ์ž ์ •์˜ ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” Struct ๋„์ž…์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์‘์ง‘๋„ ํ–ฅ์ƒ
  • Memberwise Initializer ์ž๋™ ์ƒ์„ฑ์„ ํ†ตํ•œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋กœ์ง์˜ ๋‹จ์ˆœํ™” ๋ฐ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ œ๊ฑฐ
  • mutating ํ‚ค์›Œ๋“œ ๋„์ž…์„ ํ†ตํ•œ Value Type์˜ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์ œ์–ด
  • let๊ณผ var ์„ ์–ธ์— ๋”ฐ๋ฅธ ๋ถˆ๋ณ€์„ฑ ์ œ์–ด๋กœ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ ๋ฐ Side Effect ๋ฐฉ์ง€
  • ๋ฐ˜๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ ์‰์ดํ”„๋ฅผ Struct๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ ํšจ์œจ์„ฑ์„ ๋†’์ธ ์„ค๊ณ„ ์ ์šฉ

- ์ผํšŒ์„ฑ ๋‹ค์ค‘ ๊ฐ’ ๋ฐ˜ํ™˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ Tuple์„ ์‚ฌ์šฉํ•˜๊ณ , ์—ฌ๋Ÿฌ ํ•จ์ˆ˜์—์„œ ๊ณต์œ ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” Struct๋กœ ์ •์˜ํ•  ๊ฒƒ - Struct ๋‚ด์—์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์„œ๋“œ์—๋Š” ๋ฐ˜๋“œ์‹œ mutating ํ‚ค์›Œ๋“œ๋ฅผ ๋ช…์‹œํ•˜์—ฌ ๋ถˆ๋ณ€ ์ธ์Šคํ„ด์Šค์—์„œ์˜ ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•  ๊ฒƒ - ๋„๋ฉ”์ธ ๋ชจ๋ธ ํ™•์žฅ ์‹œ Struct ์ •์˜๋ถ€๋งŒ ์ˆ˜์ •ํ•˜์—ฌ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  ํ•จ์ˆ˜์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ „ํŒŒํ•˜๋Š” ์„ค๊ณ„๋ฅผ ๊ฒ€ํ† ํ•  ๊ฒƒ

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