ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Swift Break, Continue and Infinite Loops โ€” Taking Control of Your Loops ๐ŸŽฎ
Dev.toDev.to
Frontend

Swift ๋ฃจํ”„ ์ œ์–ด๋ฌธ์„ ํ†ตํ•œ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ ์ œ๊ฑฐ ๋ฐ ์‹œ์Šคํ…œ ์ƒ๋ช…์ฃผ๊ธฐ ์„ค๊ณ„

Swift Break, Continue and Infinite Loops โ€” Taking Control of Your Loops ๐ŸŽฎ

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

Context

์ˆœ์ฐจ์  ๋ฃจํ”„ ์‹คํ–‰ ๋ฐฉ์‹์€ ์กฐ๊ฑด ์ถฉ์กฑ ํ›„์—๋„ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต์„ ์ง€์†ํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ. ํŠนํžˆ ์ค‘์ฒฉ ๋ฃจํ”„ ๊ตฌ์กฐ์—์„œ ๋‚ด๋ถ€ ๋ฃจํ”„๋งŒ ํƒˆ์ถœํ•˜๋Š” ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ์ „์ฒด ํ”„๋กœ์„ธ์Šค์˜ ํšจ์œจ์  ์ข…๋ฃŒ๊ฐ€ ์–ด๋ ค์›€.

Technical Solution

  • continue๋ฅผ ํ™œ์šฉํ•œ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ๋ฐ ๋‹ค์Œ ๋ฐ˜๋ณต์œผ๋กœ์˜ ์ฆ‰๊ฐ์ ์ธ ์ „์ด ๊ตฌ์กฐ ์„ค๊ณ„
  • break๋ฅผ ํ†ตํ•œ ๋ชฉํ‘œ ๋ฐ์ดํ„ฐ ๋ฐœ๊ฒฌ ์ฆ‰์‹œ ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋‚˜๋จธ์ง€ ๋ฐ˜๋ณต ์—ฐ์‚ฐ ์ œ๊ฑฐ
  • while true ๊ธฐ๋ฐ˜์˜ Infinite Loop ์„ค๊ณ„๋ฅผ ํ†ตํ•œ App Lifecycle ๋ฐ Game Loop์˜ ์ง€์†์  ์ƒํƒœ ์œ ์ง€ ๋ฐ ๋ Œ๋”๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ตฌํ˜„
  • ๊ฐ€๋ณ€ ์ƒํƒœ๊ฐ’์— ์˜์กดํ•˜๋Š” Pseudo-infinite Loop ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์˜ ๋™์  ์ข…๋ฃŒ ์ œ์–ด ๊ฐ€๋Šฅ์„ฑ ํ™•๋ณด
  • Labeled Statements ๋„์ž…์œผ๋กœ ์ค‘์ฒฉ๋œ ๋‹ค์ค‘ ๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ์— ํƒˆ์ถœํ•˜๋Š” ์ œ์–ด ํ๋ฆ„ ์ตœ์ ํ™”

Key Takeaway

์ œ์–ด๋ฌธ์˜ ์ ์ ˆํ•œ ์„ ํƒ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์„ ๋„˜์–ด CPU ์‚ฌ์ดํด ๋‚ญ๋น„๋ฅผ ๋ง‰๋Š” ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ์ž„. ์‹œ์Šคํ…œ์˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ๊ณ ์ • ๋ฐ˜๋ณต๊ณผ ๋ฌดํ•œ ๋ฃจํ”„์˜ ์„ค๊ณ„ ์ „๋žต์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ ์šฉํ•ด์•ผ ํ•จ.


1. ํ•„ํ„ฐ๋ง ์กฐ๊ฑด ๋ฐœ์ƒ ์‹œ `continue`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฃจํ”„ ๋ฐ”๋””์˜ ๋‚˜๋จธ์ง€ ๋กœ์ง ์‹คํ–‰์„ ๋ฐฉ์ง€ํ–ˆ๋Š”๊ฐ€

2. ๋ชฉํ‘œ ๊ฐ’ ๋ฐœ๊ฒฌ ์ฆ‰์‹œ `break`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ–ˆ๋Š”๊ฐ€

3. ์ค‘์ฒฉ ๋ฃจํ”„ ํƒˆ์ถœ ์‹œ ๋‚ด๋ถ€ ๋ฃจํ”„๋งŒ ์ข…๋ฃŒ๋˜๋Š” ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Labeled Statement๋ฅผ ๊ฒ€ํ† ํ–ˆ๋Š”๊ฐ€

4. ์•ฑ์˜ ๋ฉ”์ธ ๋ฃจํ”„ ์„ค๊ณ„ ์‹œ ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์ข…๋ฃŒ ๊ฐ€๋Šฅํ•œ Pseudo-infinite Loop ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ–ˆ๋Š”๊ฐ€

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