synchronized Block
특정 시점에 오직 하나의 스레드만 이 블록에 접근할 수 있다.
@Synchronized Annotation
메서드나 코드 블록에 적용 가능하며 코틀린이 암시적으로 동기화를 위한 모니터 객체를 생성한다.
Atomic Operation
코틀린은 AtomicInteger, AtomicBoolean 등의 atomic type를 지원한다.
Mutex and Semaphore
Mutex: 한 번에 하나의 lock을 획득하여 리소스에 대한 독점적 액세스를 허용하도록 보장한다. 다른 스레드는 일시 중지 된다. Race condition을 방지하고 스레드 안전을 보장하는 데 도움이 된다.
Semaphore: 고정된 수의 스레드가 동시에 공유 리소스에 액세스하거나 특정 작업을 동시에 수행할 수 있도록 허용 개수를 유지한다.
https://medium.com/@benmansour1992/safe-args-in-compose-navigation-6c9bded78d3d
기존에는 screen_two/{id} 와 같이 string 타입으로 route와 parameter를 관리해야 했다.
Navigation Compose 2.8.0-alpha08 버전부터 type-safe한 객체를 사용할 수 있도록 업데이트 되었다.
사용을 위해 kotlin serialization이 필요하다.
import kotlinx.serialization.Serializable
object Screen {
// Define first destination that doesn't take any arguments
@Serializable
object One
// Define second destination that takes a String parameter
@Serializable
data class Two(val param: String)
}
@Composable
fun MainNavigation(
navController: NavHostController
) {
NavHost(
navController = navController,
startDestination = Screen.One
) {
composable<Screen.One> {
ScreenOne(
onClickAction = {
navController.navigate(
Screen.Two(param = "Param 1")
)
}
)
}
composable<Screen.Two> {
val args = it.toRoute<Screen.Two>()
ScreenTwo(
param = args.param,
)
}
}
}