개발을 하다보면 특정 초 지난 후 에 기능이 작동하면 좋겠다는 생각을 할 때가 있다.
그러면 Delay를 줘야하는데 어떻게 줄 수 있을까?
두가지 방법이 있다.
1. Handler
Handler(Looper.getMainLooper()).postDelayed({
// do something
},1000)
하단에 있는 , 뒤에있는 숫자만큼 딜레이를 주고 중괄호 내부에 있는 코드를 실행시킨다. 1000은 1초를 의미한다.
2. LaunchEffect
LaunchedEffect(Unit){
delay(1.seconds)
// do something
}
delay 내부에 있는 시간만큼 시간이 지난 후 밑에있는 코드를 실행시킨다. Handler와 마찬가지로 1000을 적으면 1초가 되고, 위 예시처럼 1.seconds를 사용해도 된다.
이 두 코드는 뭐가 다를까?
사실 다를게 없다. 기능상으로 완전히 똑같은 기능을 수행한다.
비동기 작업을 처리하고, 정한 시간만큼 delay가 지난 후 지정한 작업을 실행시킨다.
그럼 뭘 써야할까?
Jetpack Compose를 사용한다면 2번째 방법인 LaunchEffect를 사용하는 것이 더 좋다.
기능상 문제가 없다면서 왜 두번째 방법을 써야할까?
Handler는 기존 안드로이드에서 사용하던 방법이다.
LaunchEffect는 Jetpack Compose에서 권장하는 방식이기 때문이다.
우리가 쓰는 프레임워크에서 더 권장한다면 그걸 써야지 뭐...
사실 난 Handler를 쓰는 방식을 더 좋아한다. 코드가 직관적이라고 해야하나?
근데 만약 delay를 중복시키거나, 여러번 실행시키려면 LaunchEffect가 더 좋아보이긴 한다.
여기까지 읽으면서 드는 의문점이 있을 것이다.
LaunchEffect는 뭐고 어떻게 쓸까?
이 부분은 나도 공부중이라서 완전히 정리된 상태가 아니다. 그렇기 때문에 좀 더 공부하고 글 쓸게욤..
Material 2에서 Material 3로 바뀌면서 그거 공부하기도 빡세다. 천천히 해보겠슴당