Tech| 읽는 데 5분

Debounce(디바운스)란?

Debounce(디바운스)에 관한 정리

#React#Debounce
목차

사용자의 입력에 따른 반응을 처리하는 것은 중요하다. 디바운스는 사용자 입력 이벤트를 효과적으로 제어할 수 있는 방법 중 하나이다.

디바운스

디바운스는 사용자의 입력 이벤트(예: 키보드 입력, 마우스 클릭)를 일정 시간 동안 모아두었다가, 해당 시간 내에 추가 입력이 없을 때에만 이벤트를 처리하는 기법이다. 이를 통해 사용자가 연속해서 입력을 하는 경우에 발생할 수 있는 불필요한 이벤트 처리를 방지하고, 성능과 사용자 경험을 향상시킬 수 있다.

디바운스를 사용하는 이유

사용자 입력에 대한 즉각적인 반응은 중요하지만, 연속적인 입력으로 인해 발생하는 불필요한 이벤트 처리는 성능 저하와 예기치 않은 동작을 초래할 수 있다. 따라서, 디바운스를 사용하여 입력 이벤트를 제어함으로써 이러한 문제를 해결할 수 있다.

디바운스를 구현하는 방법

가장 일반적인 방식은 타이머를 이용하는 것이다. 입력 이벤트가 발생할 때마다 타이머를 초기화하고, 일정 시간(딜레이)이 경과한 후에만 이벤트를 처리한다. 이때, 추가 입력이 들어오면 타이머를 다시 초기화하여 딜레이 시간을 연장시킬 수 있다.

디바운스를 사용하는 상황

사용자 입력에 대한 검색 기능, 자동완성, 무한 스크롤, 리사이징 이벤트 등 다양한 상황에서 유용하다. 사용자 입력에 의해 서버에 요청을 보내는 경우나 복잡한 연산을 수행해야 하는 경우에 특히 디바운스를 적용하는 것이 좋다.

디바운스 사용 시 주의사항

디바운스를 사용할 때에는 딜레이 시간을 적절하게 설정하는 것이 중요하다. 너무 짧은 딜레이 시간은 입력을 놓치고 너무 긴 딜레이 시간은 사용자 경험을 저하시킬 수 있다. 또한, 디바운스를 적용하는 대상과 상황에 따라 디바운스의 동작 방식을 조정해야 할 수도 있다.

예시 코드

import { useCallback, useRef } from 'react';
 
type DebounceCallback = (...args: any[]) => void;
 
export const useDebounce = (
  callback: DebounceCallback,
  delay: number
): DebounceCallback => {
  const timeoutRef = useRef<NodeJS.Timeout | null>(null);
 
  const debounceCallback = useCallback(
    (...args: any[]) => {
      if (timeoutRef.current) {
        clearTimeout(timeoutRef.current);
      }
      timeoutRef.current = setTimeout(() => {
        callback(...args);
      }, delay);
    },
    [callback, delay]
  );
 
  return debounceCallback;
};

=> 해당 훅을 사용한 토이 프로젝트

결론

디바운스는 프론트엔드 개발에서 사용자 입력 이벤트를 효과적으로 제어하기 위한 중요한 기법 중 하나이다. 올바르게 구현하면 성능 개선사용자 경험 향상에 큰 도움이 된다. 디바운스를 적용할 상황을 판단하고, 적절한 딜레이 시간을 설정하여 사용자의 입력을 민감하게 처리할 수 있도록 노력해야 한다.