EnjoyLife

코루틴 + Job은 언제 사용할까 본문

카테고리 없음

코루틴 + 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 요청을 도중에 멈추고 싶을 때
🌀 반복되는 작업을 중간에 끊고 싶을 때
🧠 여러 코루틴 중 하나만 유지하고 싶을 때
🎮 유저 입력에 따라 작업을 덮어쓰기 하고 싶을 때