이번에는 코루틴으로 재시도하는 동작을 구현해보려한다. 주로 "API 요청을 보내고 정상적인 응답이 오지 않으면 최대 n회 재시도한다" 같은 시나리오에 유용하게 사용할 수 있다. 샘플 코드와 함께 살펴보자. viewModelScope.launch { val retryNumber = 2 try { repeat(retryNumber) { try { loadRecentVersion() return@launch } catch (e: Exception) { e.printStackTrace() } } loadRecentVersion() } c..
가장 먼저 나는 작년 5월 초의 기억을 떠올려 이 글을 작성하니 부정확할 수 있다. 나는 극한의 편식러로서 초록색의 무언가를 보면 먼저 기피하는 경향이 있다. "그런 사람이 왜 여길...?" 이라고 생각할 수 있지만, 내 의견은 0퍼센트인 상태로 정해진 약속 장소였다. 친가 쪽 친척들이 놀러오게 되었는데 괜찮은 음식점이 없을까 찾다보니 아빠가 이 음식점을 선택했다. 식당 입장식당에 들어갈 때 생각보다 힘들었던 것이 있었다. 요즘 감성으로는 당연히 이해할 수 있는 부분인데우리 가족은 식당을 가면 대부분 예약을 전날에 해두고 가기 때문이다. 식당 앞에 키오스크로 입장 대기를 등록해야 했다. 그렇게 등록을 마치고 앞에 의자에 앉아 기다렸다. 이 조차도 사람이 몰렸다면 의자에 앉아 있을수도 없었을 것이다. 메뉴..
이번에는 코루틴에서 타임아웃 기능을 구현해보자. 너무 뜬금없이 타임아웃 얘기를 해서 살짝 첨언해보자면,API request를 보내고 response에 기본 타임아웃이 있듯 타임아웃을 만들어보자는 것이다. 따라서 내가 소개할 메소드는 withTimeout, withTimeoutOrNull 총 2가지이다. 가장 큰 차이는 예외 발생 여부이다.(여기서 말하는 예외는 TimeoutCancellationException으로 기타 다른 예외들은 당연히 발생할 수 있다.) 코드와 함께 살펴보도록 하자. withTimeoutfun main() = runBlocking { try { withTimeout(1000L) { // some behaviors } } catch(e: TimeoutCance..