41. 타이머

2025. 1. 7. 13:43기록/Modern JavaScript Deep Dive

    목차

호출 스케줄링

함수 호출을 예약하기 위해 타이머 함수를 사용하는 것

자바스크립트 엔진은 싱글 스레드로 동작하기 때문에

타이머 함수 setTimeout, setInterval 은 비동기 처리 방식으로 동작함


타이머 함수

setTimeout / clearTimeout

  • 두 번째 인수로 전달받은 시간(ms, 1/1000ch)으로 단 한 번 동작하는 타이머 생성
  • 이후 타이머가 만료되면 첫 번째 인수로 전달받은 콜백 함수가 호출됨
  • setTimeout 함수는 생성된 타이머를 식별할 수 있는 고유한 타이머 id 를 반환함
  • clearTimout 함수의 인수로 해당 타이머 id를 전달하여 타이머 취소 가능 (호출 스케줄링 취소)

 

const timeoutId = setTimeout(func|code[, delay, param1, param2, ...]);

func

  • 타이머가 만료된 뒤 호출될 콜백 함수

 

delay

  • 타이머 만료 시간
  • setTimeout 함수를 delay 시간으로 단 한 번 동작하는 타이머를 생성함
  • 인수 전달을 생략한 경우 기본값 0이 지정됨

 

param

  • 호출 스케줄링된 콜백 함수에 전달해야 할 인수가 존재하는 경우 세 번째 이후의 인수로 전달 가능

 

setInterval / clearInterval

  • 두 번째 인수로 전달받은 시간으로 반복 동작하는 타이머 생성
  • 이후 타이머가 만료될 때마다 첫 번째 인수로 전달받은 콜백 함수가 반복 호출됨
  • setInterval 함수에 전달할 인수는 setTimeout 함수와 동일함
  • setInterval 함수는 생성된 타이머를 식별할 수 있는 고유한 타이머 id 를 반환함
  • clearInterval 함수의 인수로 해당 타이머 id를 전달하여 타이머 취소 가능 (호출 스케줄링 취소)

디바운스와 스로틀

  • 짧은 시간 간격으로 연속해서 발생하는 이벤트를 그룹화해서
    과도한 이벤트 핸들러의 호출을 방지하는 프로그래밍 기법
  • 구현에는 타이머 함수가 사용됨

 

디바운스

  • 짧은 시간 간격으로 이벤트가 연속해서 발생하면 이벤트 핸들러를 호출하지 않다가
    일정 시간이 경과한 이후에 이벤트 핸들러가 한 번만 호출되도록 함
  • resize 이벤트 처리, 자동완성 UI 구현, 버튼 중복 클릭 방지 처리 등에 사용됨
  • 실무에서는 Lodash 의 debounce 함수 사용을 권장함

 

스로틀

  • 짧은 시간 간격으로 이벤트가 연속해서 발생하더라도
    일정 시간 간격으로 이벤트 핸들러가 최대 한 번만 호출되도록 함
  • scroll 이벤트 처리, 무한 스크롤 UI 구현 등에 사용됨
  • 실무에서는 Lodash 의 throttle 함수 사용을 권장함