setTimeout๊ณผ setInterval

setTimeout๊ณผ setInterval

๐ŸŒž setTimeout๊ณผ setInterval

๐ŸŒฅ setTimeout๊ณผ setInterval์„ ์ด์šฉํ•œ ํ˜ธ์ถœ ์Šค์ผ€์ค„๋ง

์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์— ์›ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜ˆ์•ฝ ์‹คํ–‰(ํ˜ธ์ถœ)ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ 'ํ˜ธ์ถœ ์Šค์ผ€์ค„๋ง(scheduling a call)'์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ˜ธ์ถœ ์Šค์ผ€์ค„๋ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • setTimeout์„ ์ด์šฉํ•ด ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์— ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • setInterval์„ ์ด์šฉํ•ด ์ผ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์„ ๋‘๊ณ  ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

๐ŸŒง 1. setInterval

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

  • ๋ณดํ†ต ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.
undefined

//Hello!๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์ฝ˜์†”์— 3์ดˆ์— 1๋ฒˆ์”ฉ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. function test() { console.log("Hello!"); } setInterval(test, 3000);

  • ์œ„ test ํ•จ์ˆ˜์— ์ธ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด?
undefined

function test(string) { console.log(string); } setInterval(function() { test("Hello!"); }, 3000);

  • ์œ„ ๋ฐฉ๋ฒ•์„ ์‘์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„ฃ์–ด์„œ ์‹คํ–‰ํ•ด ๋ณด์ž
undefined

function test1(string) { console.log("test1 : " + string); } function test2(string) { console.log("test2 : " + string); } setInterval(function() { test1("Hello!"); test2("World!"); }, 3000); //์œ„์™€ ๊ฐ™์ด setInterval ํ•จ์ˆ˜ ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„ฃ๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋‘๊ฐœ์˜ ํ•จ์ˆ˜๊ฐ€ 3์ดˆ์— ํ•œ๋ฒˆ์”ฉ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. test1 : Hello! test2 : World! test1 : Hello! test2 : World!

  • clearInterval clearInterval() ํ•จ์ˆ˜๋Š” ํ˜„์žฌ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜์˜ ์ง„ํ–‰์„ ๋ฉˆ์ถ”๋Š”๋ฐ ์“ฐ์ธ๋‹ค.
    • undefined

var interval = setInterval(function() { console.log("Interval"); }, 1000); //์ธ์ž๋กœ ํ•จ์ˆ˜ ์ด๋ฆ„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. clearInterval(interval);

  • undefined

var interval = setInterval(function() { count++; if (count === 10) { clearInterval(interval); } }, 3000);


๐ŸŒง 2. setTimeout

์ผ์ •ํ•œ ์‹œ๊ฐ„ ํ›„์— ์ž‘์—…์„ ํ•œ๋ฒˆ ์‹คํ–‰ํ•œ๋‹ค. ๋ณดํ†ต ์žฌ๊ท€์  ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ setInterval ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ง€์ •๋œ ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฐํ›„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋‹ค์‹œ ์ผ์ •ํ•œ ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฐํ›„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ง€์ •๋œ ์‹œ๊ฐ„ ์‚ฌ์ด์— ์ž‘์—… ์‹œ๊ฐ„์ด ์ถ”๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. clearTimeout() ์„ ์‚ฌ์šฉํ•ด์„œ ์ž‘์—…์„ ์ค‘์ง€ํ•œ๋‹ค.

undefined

//5์ดˆ ํ›„์— oneTime์ด๋ผ๋Š” string๋ฅผ ์ฝ˜์†”์— 1๋ฒˆ ์ฐ๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. setTimeout(function() { console.log("oneTime"); }, 5000); self.scrollState = false; if (!self.scrollState) { self.mainElem.classList.add("running"); } self.scrollState = setTimeout(function() { self.mainElem.classList.remove("running"); }, 500); //setTimeout์ด ์‹คํ–‰๋˜๋ฉด ์ƒ์ˆ˜๋ฅผ ๋ฆฌํ„ด ํ•จ์œผ๋กœ true๋กœ ๋ฐ”๋€๋‹ค.


โ— Point

** clearInterval(), clearTimeout()์ด ์‹คํ–‰์ค‘์ธ ์ž‘์—…์„ ์ค‘์ง€์‹œํ‚ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ง€์ •๋œ ์ž‘์—…์€ ๋ชจ๋‘ ์‹คํ–‰๋˜๊ณ  ๋‹ค์Œ ์ž‘์—… ์Šค์ผ€์ฅด์ด ์ค‘์ง€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.**

  • setInterval(func, delay, ...args)๊ณผ setTimeout(func, delay, ...args)์€ delay๋ฐ€๋ฆฌ์ดˆ ํ›„์— func์„ ๊ทœ์น™์ ์œผ๋กœ, ๋˜๋Š” ํ•œ๋ฒˆ ์‹คํ–‰ํ•˜๋„๋ก ํ•ด์ค€๋‹ค.
  • setIntervalยทsetTimeout์„ ํ˜ธ์ถœํ•˜๊ณ  ๋ฐ˜ํ™˜๋ฐ›์€ ๊ฐ’์„ clearIntervalยทclearTimeout์— ๋„˜๊ฒจ์ฃผ๋ฉด ์Šค์ผ€์ค„๋ง์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ค‘์ฒฉ setTimeout์„ ์‚ฌ์šฉํ•˜๋ฉด setInterval์„ ์‚ฌ์šฉํ•œ ๊ฒƒ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋”ํ•˜์—ฌ ์ง€์—ฐ ๊ฐ„๊ฒฉ ๋ณด์žฅ์ด๋ผ๋Š” ์žฅ์ ๋„ ์žˆ๋‹ค.
  • ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด 0์ธ setTimeout(setTimeout(func, 0) ํ˜น์€ setTimeout(func))์„ ์‚ฌ์šฉํ•˜๋ฉด โ€˜ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰์ด ์™„๋ฃŒ๋œ ํ›„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋น ๋ฅด๊ฒŒโ€™ ์›ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ง€์—ฐ ์—†์ด ์ค‘์ฒฉ setTimeout์„ 5ํšŒ ์ด์ƒ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ง€์—ฐ ์—†๋Š” setInterval์—์„œ ํ˜ธ์ถœ์ด 5ํšŒ ์ด์ƒ ์ด๋ค„์ง€๋ฉด, 4๋ฐ€๋ฆฌ์ดˆ ์ด์ƒ์˜ ์ง€์—ฐ ๊ฐ„๊ฒฉ์ด ๊ฐ•์ œ๋กœ ๋”ํ•ด์ง„๋‹ค. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์—๋งŒ ์ ์šฉ๋˜๋Š” ์‚ฌํ•ญ์ด๋ฉฐ, ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์œ ์ง€๋˜๊ณ  ์žˆ๋‹ค.
JP
์ด์ค‘ํ‘œFrontend Engineer

3๋…„์ฐจ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž. Next.js, React, TypeScript ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ „๋ฌธ. ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์—์„œ SSRยทISR ๋ Œ๋”๋ง ์ „๋žต ์„ค๊ณ„ ๊ฒฝํ—˜.

์ด๋ ฅ์„œ ๋ณด๊ธฐโ†’