티스토리 뷰
안녕하세요, 개발하는 멍구입니다 😊
오늘은 개발자라면 한 번쯤 마주치는 "중복 이벤트 문제"를 깔끔하게 해결할 수 있는 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로 구현하는 방법 예제를 가볍게 공유드렸습니다.
감사합니다 😊
'iOS 개발 > iOS 개발 팁' 카테고리의 다른 글
App Store Connect 애플 개발자 계정 비밀번호 변경하는 방법 (0) | 2025.09.06 |
---|---|
iOS Xcode16 WebKit, nw_proxy_config_t 컴파일 에러 수정방법 feat. chatGPT (0) | 2025.06.15 |
iOS 개발 팁, Timer로 간단하게 Debounce 구현하는 방법 (0) | 2025.05.22 |
iOS Task 비동기 활용, custom throttle event 구현방법 (Combine 미사용) (0) | 2025.05.20 |
iOS Swift Concurrency, Task Closure 활용 Debouncer 구현방법 (0) | 2025.05.17 |
- Total
- Today
- Yesterday
- 백준알고리즘
- 컬렉션
- swift언어
- swift문제
- uikit
- swift 문자열
- swift string
- 프로그래머스
- 프로토콜
- swift concurrency
- createML
- swift 기초
- Swift 알고리즘
- swift
- Collection
- ios
- CoreML
- Protocol
- 자연어처리
- 프로그래머스swift
- 부스트코스
- swift알고리즘
- SwiftUI
- swift reduce
- 김프매매
- 알고리즘문제
- 스위프트
- 알고리즘
- 백준swift
- 개발자문서
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |