[짧][kotlin]Debounce vs Throttle

우발자·2025년 9월 3일
1
post-thumbnail

Debounce 와 Throttle이 어떻게 다르고 어떤 방식으로 쓰이는 지 간단하게 알아볼것이다.

Debounce란?

이벤트를 발생시키고나서 일정시간 동안에 다른 이벤트가 들어오면 delay를 초기화 시킨 후 마지막에 들어온 이벤트를 전달한다.

그럼 어디에 쓰일까?

딱 생각나는건 뻔하다. 검색 필터에 많이 쓰인다. 검색을 할 때 타자 하나하나를 칠 때마다 이벤트를 받아서 api호출을 하면 자원 낭비를 하게된다.
그래서 일정시간 딜레이를 준 후 사용자가 타자를 끝냈을 때 마지막으로 입력받은 검색어로 api호출하는 게 가장 효율적인 방식일 것이다.

searchQuery
	.debounce(500)
    .filter { it.isNotBlank() }
	.onEach { query ->
    	api.requestSearch(query)
    }
    .launchIn(viewModelscope)

이런식으로 보통 쓸 것이다. 위에 debounce(500)에서 500이 0.5초동안 다른 이벤트가 없으면 마지막으로 들어온 이벤트를 전달하겠다는 의미이다.


Throttle이란?

Throttle은 간단하게 말해서 이벤트를 전달하면 일정시간동안 다른 이벤트를 전달하지 않는다. 그래서 쉽게말하면 이벤트 발행 후 잠시 딜레이를 갖는다고 생각하면 된다.
이건 어디에 쓰일까? 아마 안드로이드 개발을 하면서 Throttle을 구현했을 것이다. 바로 중복클릭을 방지하는 로직에 들어가 있을 것이다.

	val throttleTime = 500
    val currentTime = System.currentTimeMillis()
        if (currentTime - lastClickTime > throttleTime) {
            lastClickTime = currentTime
            onClick()
        }

0.5초씩 딜레이를 줘서 현재시간과 마지막으로 클릭했던 시간을 계산하여 0.5초동안 다른 이벤트가 들어오면 무시하는 로직을 구현해봤을 것이다.

profile
나는 안드로이드 개발자다.

0개의 댓글