๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
WEB/JavaScript

๋„ˆ setTimeout, setInterval ๋กœ ์‹œ๊ฐ„ ๋ณด์žฅํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด? ์–ด๋–ป๊ฒŒ?

by mingzoo 2024. 1. 16.

ํƒ€์ด๋จธ๋ฅผ ๊ตฌํ˜„ํ•˜๋‹ค๊ฐ€ ๋ฌธ๋“ ๊ทธ๋Ÿฐ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์•„๋ฌด ์ƒ๊ฐ ์—†์ด setTimeout ๊ณผ setInterval์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์–˜๋„ค๋Š” ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”๊ฑฐ์ง€?

์–˜๋„ค๋ฅผ ๋ฏฟ๊ณ  ์จ๋„๋˜๋Š”๊ฑด๊ฐ€? ๊ณผ์—ฐ setTimeout๊ณผ setInterval์ด ์‹œ๊ฐ„์„ ๋ณด์žฅํ•ด์ฃผ๋Š” ๊ฒŒ ๋งž๋‚˜?

๊ทธ๋ž˜์„œ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋๋‹ค.

 

 ๐Ÿ‘€TL; DR

  • setTimeout, setInterval์˜ ์ฐจ์ด์ 
  • ์ง€์—ฐ ๊ฐ„๊ฒฉ์ด ๋ณด์žฅ๋˜๋‚˜?
  • ์‹œ๊ฐ„์„ ์ธก์ •ํ•ด์•ผ๋˜๋Š” ํƒ€์ด๋จธ๋ผ๋ฉด Date๊ฐ€ ํ•ด๊ฒฐ์ฑ…์ด ๋ ์ˆ˜๋„..?

 

setTimeout

์ง€์ •ํ•ด์ค€ ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์— 1ํšŒ ํŠน์ • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋น„๋™๊ธฐ ํ•จ์ˆ˜

setTimeout์ด ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” JS์—”์ง„์ด ์•„๋‹ˆ๋ผ WebAPI์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด์„œ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ธ JS์—์„œ ๋น„๋™๊ธฐ์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

 

setInterval

์ง€์ •ํ•ด์ค€ ์‹œ๊ฐ„์ด ์ง€๋‚ ๋•Œ๋งˆ๋‹ค(๋ฐ˜๋ณต์ ์œผ๋กœ) ํŠน์ • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

๋‘˜์˜ ์ฐจ์ด์ 

setTimeout(function(){
	console.log('setTimeout')
},1000)

setInterval(function(){
	console.log('setInterval')
},1000)

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ setTimeout์€ 1ํšŒ ์‹คํ–‰๋˜๋Š” ๋ฐ˜๋ฉด์— setInterval์€ ์ฃผ๊ธฐ๋งˆ๋‹ค ๊ณ„์† ์‹คํ–‰์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

setInterval์€ clearIntervalํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ณ„์†ํ•ด์„œ ์‹คํ–‰๋˜๊ธฐ๋•Œ๋ฌธ์— clear์ฒ˜๋ฆฌ๋ฅผ ๊ผญ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

์ด์ œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด ๋‹ค์Œ์˜ ๊ฒƒ์ด๋‹ค.

๋ฐ”๋กœ

์ค‘์ฒฉ setTimeout์€ ์ง€์—ฐ ๊ฐ„๊ฒฉ์„ ๋ณด์žฅํ•˜์ง€๋งŒ, setInterval์€ ์ด๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค.

 

setInterval

setInterval์€ ์ง€์ • ์‹œ๊ฐ„์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ๊ธฐ๋งˆ๋‹ค ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์ค€๋‹ค.

๊ธฐ์ค€์ด ์‹œ๊ฐ„์ด ๋˜๊ธฐ๋•Œ๋ฌธ์— ์ค‘์ฒฉ์ด ๋˜์—ˆ์„ ๋•Œ, ์‹œ๊ฐ„ ํ™•๋ณด๋ฅผ ๋ชปํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. -> funcํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์†Œ๋ชจ๋˜๋Š” ์‹œ๊ฐ„๋„ ํฌํ•จ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์ง€์—ฐ ๊ฐ„๊ฒฉ์ด ์‹ค์ œ ์ž‘์„ฑํ•œ ๊ฐ„๊ฒฉ๋ณด๋‹ค ์งง์•„์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค!!

setTimeout

 

๊ทธ์— ๋น„ํ•ด setTimeout์€ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๊ณ  ๋‚œ ํ›„์— ๋‹ค์Œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๊ณ„ํš์ด ์„ธ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ง€์—ฐ ๊ฐ„๊ฒฉ์ด ๋ณด์žฅ๋œ๋‹ค.

 

 

๊ทธ๋Ÿฐ๋ฐ, ์ด ์™ธ์—๋„ ์ง€์—ฐ ๊ฐ„๊ฒฉ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•ด์•ผํ•œ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋ธŒ๋ผ์šฐ์ € ๋‚ด ํƒ€์ด๋จธ๊ฐ€ ๋Š๋ ค์ง€๋ฉด ์ง€์—ฐ ๊ฐ„๊ฒฉ์ด ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

- CPU๊ฐ€ ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์ธ ๊ฒฝ์šฐ
- ๋ธŒ๋ผ์šฐ์ € ํƒญ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋“œ์ธ ๊ฒฝ์šฐ
- ๋…ธํŠธ๋ถ์ด ๋ฐฐํ„ฐ๋ฆฌ์— ์˜์กดํ•ด์„œ ๊ตฌ๋™ ์ค‘์ธ ๊ฒฝ์šฐ

 

์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์ง€์—ฐ์ด ๋งŽ์ด ๋˜๊ธฐ๋„ ํ•ด์„œ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ํƒ€์ด๋จธ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด Date๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์˜ค์ฐจ๋ฒ”์œ„๊ฐ€ ํ›จ์”ฌ ์ ์–ด์งˆ ๊ฑฐ๋‹ค.

์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ์ •์ง€ ์‹œ๊ฐ„์„ Date.now()๋กœ ๋ถˆ๋Ÿฌ์™€์„œ ๊ทธ ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

Date.now()๋Š” UTC ๊ธฐ์ค€์œผ๋กœ 1970๋…„ 1์›” 1์ผ 0์‹œ 0๋ถ„ 0์ดˆ๋ถ€ํ„ฐ ํ˜„์žฌ๊นŒ์ง€ ๊ฒฝ๊ณผ๋œ ๋ฐ€๋ฆฌ ์ดˆ(Number)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” Web API์— ์˜์กดํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๊ตญ์ œ์‹œ๊ฐ„ ๊ธฐ์ค€์ธ Date๋ฅผ ๊ฐ€์ง€๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๊ฒŒ ๋” ์ •ํ™•์„ฑ์„ ๊ฐ€์ ธ๋‹ค ์ค„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค.

 

๊ฒฐ๋ก 

์‹œ๊ฐ„ ์ง€์—ฐ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

3๋ถ„ ํƒ€์ด๋จธ์™€ ๊ฐ™์€ ํ๋ฆ„์ด๋ผ๋ฉด ์ด ์ •ํ™•๋„๊ฐ€ ํฌ๋ฆฌํ‹ฐ์ปฌ ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹œ๊ฐ„ ์ธก์ •์ด ๋ฉ”์ธ ๊ธฐ๋Šฅ์ธ ํƒ€์ด๋จธ๋ผ๋ฉด setTimeout, setInterval๋ณด๋‹ค๋Š” ๊ฐ๊ด€์ ์ธ Date๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹œ๊ฐ„ ์ฐจ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ธก์ •์„ ํ•˜๋Š”๊ฒŒ ๋” ์ข‹์ง€ ์•Š์„๊นŒ..?


์ถœ์ฒ˜

https://developer.mozilla.org/ko/docs/Web/API/setTimeout

https://developer.mozilla.org/ko/docs/Web/API/setInterval

https://ko.javascript.info/settimeout-setinterval#ref-28

https://ssocoit.tistory.com/249 

 

728x90

'WEB > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JavaScript] map ํ•จ์ˆ˜  (0) 2021.02.01
[JavaScript] filter()  (0) 2021.01.24
[JavaScript] push() & concat()  (0) 2021.01.20