ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Swift Closures โ€” Functions You Can Pass Around ๐Ÿ“ฆ
Dev.toDev.to
Frontend

Swift Closure๋ฅผ ํ†ตํ•œ ์ผ๋“ฑ ์‹œ๋ฏผ ํ•จ์ˆ˜ ๊ตฌํ˜„ ๋ฐ ๋น„๋™๊ธฐ ์ œ์–ด ๊ตฌ์กฐ ์„ค๊ณ„

Swift Closures โ€” Functions You Can Pass Around ๐Ÿ“ฆ

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

Context

ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ์ผ๋“ฑ ์‹œ๋ฏผ ํ•จ์ˆ˜(First-class Function) ๊ตฌํ˜„ ํ•„์š”์„ฑ ์ฆ๋Œ€. ์ผ๋ฐ˜์ ์ธ ๋ช…๋ช… ํ•จ์ˆ˜ ๋ฐฉ์‹์œผ๋กœ๋Š” SwiftUI์™€ ๊ฐ™์€ ์„ ์–ธํ˜• UI ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ฝœ๋ฐฑ ๊ตฌ์กฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์šด ์ œ์•ฝ ์กด์žฌ.

Technical Solution

  • ์ต๋ช… ํ•จ์ˆ˜ ํ˜•ํƒœ์˜ Closure expression์„ ๋„์ž…ํ•˜์—ฌ ์ฝ”๋“œ ๋ธ”๋ก์„ ๋ณ€์ˆ˜ํ™”ํ•˜๊ณ  ๋Ÿฐํƒ€์ž„์— ์ „๋‹ฌ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„
  • Tuple๊ณผ์˜ ๊ตฌ๋ฌธ ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ์ค‘๊ด„ํ˜ธ ๋‚ด๋ถ€๋กœ ๋ฐฐ์น˜ํ•˜๊ณ  'in' ํ‚ค์›Œ๋“œ๋กœ ์‹คํ–‰๋ถ€์™€ ๋ถ„๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ ์ฑ„ํƒ
  • ์™ธ๋ถ€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ผ๋ฒจ์„ ์ œ์™ธํ•œ Function Type ์ •์˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜์˜ ํ‘œ์ค€ํ™” ๋ฐ ํ˜ธํ™˜์„ฑ ํ™•๋ณด
  • sorted(by:)์™€ ๊ฐ™์€ ๊ณ ์ฐจ ํ•จ์ˆ˜์— Closure๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„์— ์ •๋ ฌ ๋กœ์ง์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ „๋žต ์ ์šฉ
  • ์ง€์—ฐ ์‹คํ–‰(Deferred Execution) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์‘๋‹ต์ด๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์™„๋ฃŒ ์‹œ์ ์˜ ํ›„์† ์ž‘์—… ์ œ์–ด

- ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ์ด๋‚˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์„ค๊ณ„ ์‹œ Closure๋ฅผ ํ™œ์šฉํ•œ ์ง€์—ฐ ์‹คํ–‰ ๊ตฌ์กฐ ๊ฒ€ํ†  - ํ•จ์ˆ˜ ํƒ€์ž… ์ •์˜ ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ผ๋ฒจ์ด ์ œ์™ธ๋จ์„ ์ธ์ง€ํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„์— ๋ฐ˜์˜ - ๋‹จ์ˆœ ๋กœ์ง์˜ ๋ฐ˜๋ณต ์ „๋‹ฌ ์‹œ ๋ช…๋ช… ํ•จ์ˆ˜๋ณด๋‹ค Closure expression์„ ํ†ตํ•œ ์ธ๋ผ์ธ ๊ตฌํ˜„์œผ๋กœ ์ฝ”๋“œ ์‘์ง‘๋„ ํ–ฅ์ƒ

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