Programming Mechanisms

๋ฌดํ•œ ๋ฃจํ”„(Infinite Loop)์˜ ์œ„ํ—˜์„ฑ

yoooCo 2025. 4. 22. 12:42

๐ŸŒ€ ๋ฌดํ•œ ๋ฐ˜๋ณต๋ฌธ, ์ง„์งœ ๊ดœ์ฐฎ์€ ๊ฑธ๊นŒ?

"while(true) ๋ญ ์–ด๋•Œ์š”, ๊ทธ๋ƒฅ ๊ณ„์† ๋Œ๋ฆฌ๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€์š”?"

๋‹จ์ˆœํžˆ ๊ณ„์† ๋ฐ˜๋ณตํ•œ๋‹ค๋Š” ๊ฑด ์‰ฝ์ง€๋งŒ,
์ปดํ“จํ„ฐ ์ž…์žฅ์—์„œ๋Š” ์–ด๋งˆ์–ด๋งˆํ•œ ์ž์› ์†Œ๋ชจ๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์š”!
์ง€๊ธˆ๋ถ€ํ„ฐ ๋ฌดํ•œ ๋ฃจํ”„์˜ ์œ„ํ—˜์„ฑ๊ณผ ๋˜‘๋˜‘ํ•œ ์‚ฌ์šฉ๋ฒ•์„ ํ•จ๊ป˜ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ์š” ๐Ÿ˜Š


โš ๏ธ ๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ์‹œ์Šคํ…œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

๐Ÿงจ ํ•ญ๋ชฉ ๐Ÿ’ฌ ์„ค๋ช…
๐Ÿง  CPU ํญ์ฃผ ์กฐ๊ฑด ์—†์ด ๊ณ„์† ๋ฐ˜๋ณต๋˜๋ฉด CPU๊ฐ€ 100%๋ฅผ ํ–ฅํ•ด ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์—…์€ ๋ฒ„๋ฒ…์ด๊ณ , ํŒฌ์ด ๋ฏธ์นœ ๋“ฏ์ด ๋Œ์•„๊ฐ€์š”.
๐Ÿ“‰ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ ๊ฐ์ฒด๋ฅผ ๊ณ„์† ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด, GC๊ฐ€ ์ฒ˜๋ฆฌํ•  ํ‹ˆ๋„ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฐ€๋“ ์ฐน๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ OutOfMemoryError๊ฐ€ ํ„ฐ์งˆ ์ˆ˜๋„!
๐Ÿงจ ์•ฑ/์‹œ์Šคํ…œ ๋ฉˆ์ถค UI๊ฐ€ ๋ฌดํ•œ ๋ฃจํ”„์— ๋ฌถ์ด๋ฉด? ์‚ฌ์šฉ์ž๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ๋„ ํด๋ฆญ๋„ ์•ˆ ๋จนํ˜€์š”. (์‘๋‹ต ์—†์Œ!)
๐Ÿšซ ๋น„์ •์ƒ ์ข…๋ฃŒ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ๋œ ๋ฌดํ•œ ๋ฐ˜๋ณต์€ ๊ฐ™์€ ์˜ˆ์™ธ๋ฅผ ๊ณ„์† ๋ฐœ์ƒ์‹œ์ผœ ๋กœ๊ทธ๊ฐ€ ๋„˜์น˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค์šด๋˜๊ธฐ๋„ ํ•ด์š”.
๐Ÿ›‘ ํƒˆ์ถœ ์กฐ๊ฑด ์—†์Œ ์‹ค์ˆ˜๋กœ ๋น ์ง„ ์ข…๋ฃŒ ์กฐ๊ฑด ํ•˜๋‚˜๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์„ ๋ฌด๋„ˆ๋œจ๋ฆด ์ˆ˜ ์žˆ์–ด์š”. ๋””๋ฒ„๊น…? ์ •๋ง ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ ์ฝ”๋“œ๋กœ ๋ณด๋Š” ์œ„ํ—˜ํ•œ ๋ฌดํ•œ ๋ฃจํ”„

while (true) {
    System.out.println("๊ณ„์† ์ถœ๋ ฅ ์ค‘...");
}

โœ… ๋‹จ์ˆœํ•˜์ง€๋งŒ...
โ— ๋ฉˆ์ถ”์ง€ ์•Š์œผ๋ฉด CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž ์‹ํ•˜๋Š” ๊ดด๋ฌผ์ด ๋ฉ๋‹ˆ๋‹ค


๐Ÿ’ฌ ๋ฐ˜๋ณต๋ฌธ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์Šต๊ด€

์Šต๊ด€ ์„ค๋ช…
โœ… ๋ช…ํ™•ํ•œ ์ข…๋ฃŒ ์กฐ๊ฑด ๋ฐ˜๋ณต ํšŸ์ˆ˜๋‚˜ ํƒˆ์ถœ ์กฐ๊ฑด์„ ๊ผญ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.
โœ… ์ž์› ์‚ฌ์šฉ ์ตœ์†Œํ™” ๋ฃจํ”„ ์•ˆ์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜, ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋งˆ์„ธ์š”.
โœ… break, return ์ ๊ทน ํ™œ์šฉ ํŠน์ • ์กฐ๊ฑด์—์„œ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํƒˆ์ถœ๊ตฌ๋ฅผ ๋งˆ๋ จํ•ด ๋‘์„ธ์š”.
โœ… ๋””๋ฒ„๊น…์šฉ ๋กœ๊ทธ ํ™œ์šฉ ๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ์˜์‹ฌ๋˜๋ฉด ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ณด๋Š” ๊ฒƒ๋„ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
โœ… ๋ฐ˜๋ณต ๊ฐ„ ํœด์‹ (sleep) ์ž๋ฐ”, ํŒŒ์ด์ฌ ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด๋Š” sleep() ์ œ๊ณต โ†’ CPU๋ฅผ ์‰ฌ๊ฒŒ ํ•ด์ค„ ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ›Œ ์Šค๋ ˆ๋“œ๋ฅผ ์‰ฌ๊ฒŒ ํ•˜์ž! sleep()์˜ ํ™œ์šฉ

๋ฌดํ•œ ๋ฃจํ”„๋„ ํœด์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!
๊ณ„์† ๋ฐ˜๋ณตํ•˜๋ฉด ์ง€์น˜๋‹ˆ๊นŒ, ์ ๋‹นํžˆ ์‰ฌ์–ด๊ฐ€๋ฉด์„œ ๋ฐ˜๋ณตํ•˜์„ธ์š” โ˜•

โœ… ํŒจํ„ด ์˜ˆ์‹œ (์–ธ์–ด ๋…๋ฆฝ)

while (true) {
    ์ž‘์—… ์ˆ˜ํ–‰
    1์ดˆ ์‰ฌ๊ธฐ (sleep 1000ms)
}

๐Ÿ’ก ์–ธ์–ด๋ณ„ sleep ์˜ˆ์‹œ

์–ธ์–ด ์‚ฌ์šฉ ์˜ˆ
Java Thread.sleep(1000);
Python time.sleep(1)
JavaScript await new Promise(r => setTimeout(r, 1000)) (async)

๐Ÿงฉ ์–ธ์ œ ์“ฐ๋‚˜์š”?

  • โœ… ์„œ๋ฒ„์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ƒํƒœ ์ฒดํฌํ•  ๋•Œ
  • โœ… ์• ๋‹ˆ๋ฉ”์ด์…˜, ์Šฌ๋ผ์ด๋” ๊ฐ™์€ GUI ์ฒ˜๋ฆฌํ•  ๋•Œ
  • โœ… ์„ผ์„œ, ํ•˜๋“œ์›จ์–ด ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์—๋„ ํ™œ์šฉ๋ผ์š”

๐Ÿ“Œ sleep ์—†์ด ๋ฌดํ•œ ๋ฐ˜๋ณตํ•˜๋ฉด?

์ฆ์ƒ ์„ค๋ช…
๐Ÿ”‹ ์ „๋ ฅ ๋‚ญ๋น„ ๊ณ„์†ํ•ด์„œ CPU๊ฐ€ ์‰ฌ์ง€ ์•Š๊ณ  ์ž‘๋™ํ•ด ๋ฐฐํ„ฐ๋ฆฌ ์†Œ๋ชจโ†‘
๐Ÿ”Š ํŒฌ ๊ณผ์—ด ๋…ธํŠธ๋ถ ํŒฌ์ด ๋ฏธ์นœ ๋“ฏ์ด ๋Œ์•„๊ฐ€๊ณ  ๋ฐœ์—ด ๋ฐœ์ƒ
๐Ÿ˜ต ์‹œ์Šคํ…œ ๋ฒ„๋ฒ…์ž„ ๋‹ค๋ฅธ ์ž‘์—…๊นŒ์ง€ ๋А๋ ค์ง€๊ณ , ์ „์ฒด ์‹œ์Šคํ…œ์— ์•…์˜ํ–ฅ

โ˜• ๋งˆ๋ฌด๋ฆฌ!

"๋ฌดํ•œ ๋ฐ˜๋ณต์€ ์ปดํ“จํ„ฐ์˜ ์—”์ง„์ฒ˜๋Ÿผ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ํ†ต์ œ๋˜์ง€ ์•Š์œผ๋ฉด ์žฌ์•™์ด ๋  ์ˆ˜ ์žˆ๋‹ค!"
ํ•ญ์ƒ ์ข…๋ฃŒ ์กฐ๊ฑด๊ณผ ํœด์‹์„ ๋„ฃ์–ด์ฃผ์„ธ์š” ๐Ÿ™

'Programming Mechanisms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ณ€์ˆ˜ ์„€๋„์ž‰(Shadowing)  (0) 2025.04.04
ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (0) 2025.04.01