카테고리 없음
코루틴 + Job은 언제 사용할까
Aiden96
2025. 5. 6. 15:56
기능 예시 | 왜 코루틴+Job이 필요한가요? |
⏱ 타이머 기능 | 중간에 멈추거나 재시작할 수 있어야 해서 |
📡 API 요청 중 사용자가 뒤로 가면 중단 | Job으로 취소 가능해야 함 |
📥 파일 다운로드/업로드 진행 관리 | 중간에 job.cancel()로 멈출 수 있어야 함 |
🧹 자동 저장 / 자동 백업 | 주기적인 반복 작업 (delay + 반복 + 취소) |
⏳ ProgressBar와 연동된 딜레이 애니메이션 | 애니메이션을 멈출 수 있어야 함 |
🎮 게임에서 일정 시간마다 이벤트 발생 | 반복 실행 + 일시중지 가능해야 함 |
🔍 입력 중 실시간 검색 (디바운싱) | 이전 Job을 취소하고 새 검색 시작 |
🔕 알림 예약 후 조건 만족 시 취소 | 예약된 코루틴 취소해야 함 |
🔧 왜 그냥 코루틴 만 쓰지 않고 Job까지 써야 하나요?
상황 | Job이 필요한 이유 |
작업 중에 취소(cancel) 해야 할 때 | job.cancel()로 즉시 멈출 수 있음 |
여러 작업 중 하나만 유지하고 나머지 중단 | 이전 job.cancel() 후 새 작업 시작 |
타이머처럼 상태를 관리하면서 작동해야 할 때 | 시작 → 동작 중 → 종료 상태 분리 가능 |
🎯 실전 예시: 검색창 자동 추천
private var searchJob: Job? = null
fun onSearchTextChanged(query: String) {
searchJob?.cancel() // 이전 검색 취소
searchJob = viewModelScope.launch {
delay(500) // 디바운스
val result = searchApi(query)
_searchResult.postValue(result)
}
}
✅ 사용자가 빠르게 타이핑할 때마다 이전 검색을 취소하고,
마지막 입력에만 검색을 실행할 수 있어요.
✅ 정리 요약
언제 코루틴 + Job을 쓰면 좋을까?
⏱ 타이머 만들 때 |
📶 API 요청을 도중에 멈추고 싶을 때 |
🌀 반복되는 작업을 중간에 끊고 싶을 때 |
🧠 여러 코루틴 중 하나만 유지하고 싶을 때 |
🎮 유저 입력에 따라 작업을 덮어쓰기 하고 싶을 때 |