티스토리 뷰
안녕하세요~
개발자 멍구입니다 😊
오늘은 iOS 개발을 하다 보면 한 번쯤 꼭 마주치는 "debounce 처리", 그중에서도 Timer를 활용한 간단한 구현 방법을 공유해보려 해요.
너무 무거운 Combine은 부담스럽고, 간단한 기능 하나 때문에 복잡한 구조 짜긴 애매할 때!
이럴 때 오늘 소개하는 방식이 깔끔하고 딱입니다.
프론트엔드에서도 자주 쓰이는 debounce 개념, 함께 쉽게 이해해볼게요!
Debounce란 뭘까? 쉽게 이해하기
Debounce는 ‘이벤트가 연달아 들어올 때, 마지막 것만 실행’하는 기능이에요.
대표적인 예시는 자동 검색창이 있겠네요.
- 사용자가 키보드를 칠 때마다 검색을 하지 않고,
- 타이핑이 멈춘 뒤 일정 시간이 지나면 한 번만 검색 요청을 보내는 것!
즉, 이벤트가 너무 자주 발생하는 상황에서 불필요한 호출을 줄이고, 성능을 최적화해주는 아주 중요한 개념이에요.
⏱️ 왜 Timer로 구현할까?
사실 Combine 프레임워크의 Timer.publish를 써도 debounce를 만들 수 있어요.
하지만 Combine은 학습 난이도도 높고, 코드도 다소 무거울 수 있습니다.
이번에는 간단하고 가벼운 방식으로, Timer 만으로 debounce를 구현해볼게요!
Timer.scheduledTimer를 활용하면,
기존에 실행 중이던 타이머를 중단하고 새로운 타이머를 다시 시작하는 구조로 debounce 효과를 만들 수 있어요.
//
💡 핵심 개념: Debouncer 클래스
간단한 예제 클래스를 하나 만들어볼게요:
- timer?.invalidate()를 통해 이전 타이머를 정리하고,
- 새로운 타이머를 다시 설정합니다.
- 이렇게 하면 이전 이벤트는 무시되고, 마지막 이벤트만 실행되죠!
💡 주의사항:
Timer의 block 클로저는 @Sendable 요구가 있기 때문에, handler도 @Sendable을 명시해주는 게 안전합니다.
Xcode에서 노란 경고가 발생한다면 이걸 의심해보세요!
⏳ 실행 예제: 타이머가 어떻게 동작하나?

결과는 어떻게 될까요?
- 0초에 run 실행 → 하지만 2.5초에 새로운 이벤트 발생
- → 0초의 이벤트는 무시됨
- 2.5초 이벤트는 3초 후인 5.5초에 실행
- 이후 6초 시점에서 또 이벤트가 들어오면,
→ 다시 3초 후인 9초에 실행됨
즉, 연속된 이벤트 중 마지막만 실행되는 구조예요! 아래는 실제 출력결과에요.
✍️ 마무리
Combine, Task, DispatchQueue 등 다양한 비동기 처리 방식들이 있지만,
간단한 기능 구현시에는 이렇게 러닝커브 낮고, 심플한 Timer 한 줄이 깔끔하고 유지보수에 좋을 수도 있는 것 같아요. 다양한 옵션을 활용할 줄 아는게 좋은 것 같습니다. Combine framework에서 기본적으로 debounce, throttle operator를 제공하긴 하니까요. 여러 옵션 알아두시면 좋을 것 같습니다.
특히 검색 기능, 버튼 연타 방지, 설정 저장 등 다양한 곳에서 활용할 수 있으니,
이번 기회에 꼭 한 번 구현해보시길 추천드려요!
궁금한 점이나 개선 아이디어가 있다면 댓글이나 피드백 환영입니다 🙌
그럼 또 좋은 개발 팁으로 찾아올게요! 지금까지 iOS 팁, Timer로 Debouncer 구현하는 방법이었습니다.
'iOS 개발 > iOS 개발 팁' 카테고리의 다른 글
iOS 중복 이벤트 방지 방법, Timer와 closure로 throttle event 구현방법 (0) | 2025.05.23 |
---|---|
iOS Task 비동기 활용, custom throttle event 구현방법 (Combine 미사용) (0) | 2025.05.20 |
iOS Swift Concurrency, Task Closure 활용 Debouncer 구현방법 (0) | 2025.05.17 |
개발한 사이드프로젝트 서비스를 무료로 홍보하는 방법들 (0) | 2025.01.23 |
개발자로서 공부한 내용을 기록하고 공유, 증명하는 방법 (2) | 2025.01.05 |
- Total
- Today
- Yesterday
- 김프매매
- 프로토콜
- swift concurrency
- swift문제
- 부스트코스
- swift 기초
- swift reduce
- Protocol
- 자연어처리
- ios
- uikit
- swift알고리즘
- swift 문자열
- Swift 알고리즘
- 개발자문서
- 컬렉션
- Collection
- createML
- SwiftUI
- 프로그래머스swift
- 백준알고리즘
- swift
- swift string
- 프로그래머스
- 스위프트
- swift언어
- 알고리즘문제
- 백준swift
- 알고리즘
- CoreML
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |