ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Swift Closures โ€” Accepting Functions as Parameters ๐ŸŽฏ
Dev.toDev.to
Frontend

Swift Closure ๊ธฐ๋ฐ˜ ๊ณ ์ฐจ ํ•จ์ˆ˜ ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐ UI ์œ ์—ฐ์„ฑ ํ™•๋ณด

Swift Closures โ€” Accepting Functions as Parameters ๐ŸŽฏ

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

Context

์„œ๋ฒ„ ์‘๋‹ต ๋Œ€๊ธฐ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•œ UI Thread Freeze ํ˜„์ƒ ๋ฐœ์ƒ. ๊ณ ์ •๋œ ํ•จ์ˆ˜ ๊ตฌ์กฐ๋กœ๋Š” ๋‹ค์–‘ํ•œ ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ์™€ ๋™์  UI ์ปดํฌ๋„ŒํŠธ ๊ตฌ์„ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•œ๊ณ„๊ฐ€ ์žˆ์Œ.

Technical Solution

  • ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” Higher-Order Function ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ๋กœ์ง ์ฃผ์ž… ๊ตฌ์กฐ ์ฑ„ํƒ
  • Closure Type () -> T ์ •์˜๋ฅผ ํ†ตํ•œ ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜์˜ ์ถ”์ƒํ™” ๋ฐ ํƒ€์ž… ์•ˆ์ „์„ฑ ํ™•๋ณด
  • Trailing Closure ๋ฌธ๋ฒ• ์ ์šฉ์œผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ถ€์˜ ๊ฐ€๋…์„ฑ ๋ฐ ์„ ์–ธ์  ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ตฌํ˜„
  • Multiple Trailing Closures ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ ๋‹จ๊ณ„๋ณ„ ์‹คํ–‰ ์ œ์–ด ๋ฐ ๋‹ค์ค‘ ์„ค์ • ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•
  • Named Function๊ณผ Closure์˜ ์ƒํ˜ธ ๊ต์ฒด ๊ฐ€๋Šฅ ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ๊ทน๋Œ€ํ™”
  • SwiftUI์˜ View Builder ํŒจํ„ด๊ณผ ์œ ์‚ฌํ•œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ๊ตฌ์„ฑ ๋ฐฉ์‹ ์ ์šฉ

1. ๋น„๋™๊ธฐ ์ž‘์—… ์™„๋ฃŒ ํ›„ ์‹คํ–‰๋  ๋กœ์ง์„ Closure ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜์—ฌ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ธ”๋กœํ‚น ๋ฐฉ์ง€

2. ๋‹ค์ค‘ ์„ค์ •์ด ํ•„์š”ํ•œ ํ•จ์ˆ˜ ์„ค๊ณ„ ์‹œ Multiple Trailing Closures๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„ ์–ธ์  ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•

3. ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜ `(Input) -> Output`์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜์—ฌ ํƒ€์ž… ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์•ฝ ์ค€์ˆ˜

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