분류 전체보기

SideEffect란 SideEffect는 Composable의 Composition이 성공적으로 되었을 때 발행하는 Effect이다. SideEffect는 Compose에서 관리하지 않는 객체와 Compose 내부의 데이터를 공유하기 위해 사용한다. SideEffect의 사용 TextField를 보이지 않게(isVisible=false) 했다가. 버튼이 눌렸을 때 보이게(isVisible = true) 만드는 코드가 있다고 하자. 이때 isVisible과 관련된 값은 모두 Compose에서 관리하는 값이므로 다음과 같이 작성이 가능하다. @Composable fun HomeScreen() { var isVisible by remember { mutableStateOf(false) } Column(mod..
Disposable Effect란? DisposableEffect란 Composable이 Dispose된 후에 정리해야 할 Side Effect가 있는 경우에 사용되는 Effect이다. 자세히 이야기 하면 Composable의 Lifecycle에 맞춰 정리되어야 하는 리스너나 작업이 있는 경우에 리스너나 작업을 제거하기 위해 사용되는 Effect가 바로 DisposableEffect이다. 안드로이드에서는 Lifecycle에 따라 Side Effect(부수 효과)를 발생시킨 다음 정리되어야 하는 부분이 많다. 이런 부분에서 제대로 Side Effect에 대한 정리를 하지 않으면 제어권을 잃어 메모리에 leak이 생기거나 예측하지 못한 결과나 나올 수 있다. Disposable Effect 사용 방법 Dis..
remember의 사용과 한계점 Composable에서 remember은 Recomposition이 일어날 때 상태를 관리하기 위해 사용된다.remember의 상태는 remember의 value를 직접 수정해주는 것으로만 가능하다. *by 키워드는 value에 직접 접근하도록 도와주는 delegation이다. 헷갈리지 말자. @Composable private fun TextFieldExample() { val text = remember { mutableStateOf("Kotlin World") } Column(modifier = Modifier.padding(16.dp)) { OutlinedTextField( value = text.value, onValueChange = { text.value = ..
범위 지정 함수(Scope function)란? 범위 지정 함수는 특정 객체에 대한 작업을 블록 안에 넣어 실행할 수 있도록 하는 함수이다. 블록은 특정 객체에 대해 할 작업의 범위가 되며, 따라서 범위 지정 함수라 부른다. 특정 객체에 대한 작업을 블록안에 넣게 되면 가독성이 증가하여 유지 보수가 쉬워진다. 코틀린에서는 let. run, apply. also, with 총 5가지 기본적인 범위 지정함수를 지원한다. 코틀린의 범위 지정 함수 1. apply 2. run 3. with 4. let 5. also 범위 지정함수와 수신객체 지정 람다(함수) 범위 지정함수는 다른 말로 수신객체 지정 람다(함수)라고도 부른다. 이유는 수신객체를 명시하지 않거나 it을 호출하는 것만으로 람다 안에서 수신객체의 메서..
collectLatest를 이용한 최신 데이터 collect의 한계점 그림1과 같이 데이터 발행 시간 사이의 간격보다 데이터를 처리하는 suspend fun이 수행하는 시간이 오래 걸릴 경우, 새로 들어온 데이터는 계속해서 소비되지 못한다. 즉 이런 상황에서 collectLatest를 쓸 경우 중간 데이터를 하나도 얻지 못하고 마지막 데이터만을 얻을 수 있다. 예를 들어 아래 그림2와 같이 데이터 발행에 0.1초가 걸리는데 데이터 소비에 1초가 걸릴 경우 하나도 소비가 안되고 마지막 데이터만이 소비된다. conflate을 이용해 최신 데이터 collect하기 이를 해결하는 방법은 간단하다. 한 번 시작된 데이터 소비는 끝날 때까지 하고 데이터 소비가 끝난 시점에서의 가장 최신 데이터를 다시 소비하는 것이..
Dev.Cho
'분류 전체보기' 카테고리의 글 목록 (54 Page)