티스토리 뷰

반응형

 

 

안녕하세요, 개발하는 멍구입니다 😊

오늘은 개발자라면 한 번쯤 마주치는 "중복 이벤트 문제"를 깔끔하게 해결할 수 있는 Throttle 기능을 iOS에서 직접 구현해보려 해요.

복잡한 내용 같지만, 걱정 마세요. 오늘은 개발 지식이 많지 않아도 어느정도는 이해할 수 있도록 하나씩 친절하게 설명드릴게요. 중간중간 예제와 함께 설명드리니, 개발에 입문한 분도, 간만에 Swift 다루는 분도 쉽게 따라오실 수 있을 거예요!

 


예제 보기에 앞서서 Throttle이 뭐임?

앱을 만들다 보면, 버튼을 여러 번 누르거나, 스크롤 이벤트가 너무 자주 발생하는 경우가 있어요. 이럴 때, 매번 이벤트를 처리하면 앱이 느려지거나 이상한 동작을 하게 되죠. 😨

이걸 막기 위해 사용하는 게 바로 Throttle 입니다.

한 마디로 설명하면: "일정 시간 동안 최초 1회만 이벤트를 실행하고, 그 이후 발생하는 이벤트는 무시!"

예를 들어, 3초로 설정하면:

  • 처음 발생한 이벤트는 바로 실행
  • 그 후 3초 동안은 아무리 이벤트가 발생해도 무시
  • 3초가 지난 후 다시 이벤트 실행 가능

이렇게 하면 앱의 퍼포먼스를 안정적으로 유지할 수 있어요.

 


Throttler 클래스 구현하기 (Timer 활용)

이번에 직접 구현한 클래스는 Throttler라고 이름 붙였어요. Swift의 Timer를 활용해서 간단하고 깔끔하게 만들 수 있답니다! 동작하는 스레드에서 안전하게 전달될 수 있도록 클로져에 @Sendable 도 명시했어요.

핵심 개념

  • interval: 얼마 동안 이벤트를 무시할지 시간(초 단위)
  • run(handler): 실행하고자 하는 이벤트 (closure 형태)를 넣는 메서드
  • 타이머가 동작 중이면 handler는 무시 (79~81행)
  • 타이머가 없을 때만 handler를 실행하고, 타이머 시작! (83~90행)

 


실제 사용 예시와 결과

이제 만들어둔 Throttler를 어떻게 사용하는지 볼까요?

실행 결과 요약:

  • 첫 번째 이벤트는 바로 실행
  • 두 번째 이벤트는 2.5초 후 → 무시됨 (3초 이내니까)
  • 세 번째 이벤트는 3.5초 후 → 실행됨 (3초 지난 뒤니까)

실제 로그 출력 결과도 아래 참고하세요. 보기 전에 먼저 어떻게 로그가 발생할지 상상해보고 보시길 추천드려요!

 


마무리하며: Timer로 throttle을 만들어보게된 이유

현업에서 Throttle이나 Debounce는 정말 자주 쓰입니다. 특히 검색창 입력 처리, 버튼 연타 방지, 무한 스크롤 등 다양한 상황에서 활용돼요.

물론 iOS 자제적으로 throttle, debounce 등을 함수형 API를 Combine framework 등에서 제공하고 있지만, 심심할때마다 이러한 예제를 만들어보면 Timer와 Closure의 활용법을 익히면 유익할거라고 생각합니다.

이 글이 도움이 되셨다면 댓글로 피드백이나 궁금한 점 남겨주세요. 더 다양한 개발 팁과 실전 예제로 찾아뵐게요!

지금까지 중복 이벤트 방지 방법 중 하나인 throttle event를 Timer와 closure로 구현하는 방법 예제를 가볍게 공유드렸습니다.
감사합니다 😊

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함