본문 바로가기

분류 전체보기

(60)
[Android Library] Flow (3) - 종류 안녕하세요. 오늘은 Jetpack Library 중 하나인 Flow의 종류에 대해 알아보겠습니다. Cold Flow 이전 포스팅에서 봐왔던 Flow 기본 형식은 Cold Flow 입니다. Cold Flow의 특징은 다음과 같습니다. 특징 - 1 Collector가 있을 때만 data를 emit 함 아래 코드의 출력을 보면 collect()가 있을 때 producer가 data를 stream에 넣기 시작합니다. fun testColdFlow() = flow { println("cold flow is open") for (i in 1..4) { delay(100) emit(i) } println("cold flow is closed\n") } fun main() = runBlocking { val start..
[Android Library] Flow (2) - 사용하기 안녕하세요. 오늘은 Jetpack Library 중 하나인 Flow의 사용 방법에 대해 알아보겠습니다. Flow Flow에 3가지 개념이 존재합니다. Producer (생산자) data를 stream에 보내는 개체입니다. (stream : data stream으로써 위의 그림에서 막대바로 표현한 flow를 의미합니다.) flow block 안에 코드를 작성해야하며, emit function을 이용해 data를 stream에 보냅니다. fun simpleFlow() = flow { for (i in 1..5) { delay(100) emit(i) } } Intermediary (중개자) Producer와 Consumer 사이의 중간 개체입니다. Producer가 만든 data를 수정해서 Consumer에게..
[Android Library] Flow (1) - Suspend Function의 대안 안녕하세요. 오늘은 Jetpack Library 중 Flow에 대해 알아보겠습니다. 정의 안드로이드 공식 문서를 보면 flow를 아래와 같이 정의합니다. In coroutines, a flow is a type that can emit multiple values sequentially, as opposed to suspend functions that return only a single value. (https://developer.android.com/kotlin/flow) 즉, 코루틴(비동기적 프로그래밍)에서 suspend function이 single value만 반환한다는 단점 때문에 flow가 등장했습니다. 공식 문서에서는 이렇게만 설명해주고 넘어가서 이해가 잘 안가서 suspend func..
Splay Tree (2) - find, insert, delete, 최솟값 최댓값 찾기 안녕하세요. Splay Tree 연산 중 find, insert, delete, 그리고 최솟값 최댓값 찾기를 알아보겠습니다. Binary Tree 이진 트리라서 아래 연산이 가능합니다. find insert delete 최솟값, 최댓값 찾기 Find key 값이 Tree에 있는지 없는지를 확인합니다. BST의 특징을 이용해 값을 찾아 나가면 됩니다. node x의 value == key -> 탐색 종료 node x의 value right child of node x 로 이동 node x의 value > key -> left child of node x 로 이동 탐색이 종료됐으면, 마지막으로 access한 노드를 루트로 올려줍니다. 아래 두 그림은 각각 7과 2를 find 한 뒤의 Spla..
Splay Tree (1) - rotate, splay 안녕하세요. 오늘은 Splay Tree에 대해 알아보겠습니다. 이번 글에서는 기본 연산인 rotate와 splay에 대해 알아보겠습니다. AVL Tree 스플레이 트리는 자가 균형 이진 트리에 속합니다. https://ko.wikipedia.org/wiki/AVL_%ED%8A%B8%EB%A6%AC AVL 트리 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 과학에서 AVL 트리(발명자의 이름인 Adelson-Velsky and Landis에서 따온 이름)는 자가 균형 이진 탐색 트리이다. 스스로 균형을 잡는 데이터 구조 중 처음으로 ko.wikipedia.org 일반 이진 탐색 트리의 경우 한쪽으로 노드가 쏠리는 skewed tree가 나타날 수 있습니다. 이렇게 되면 ins..
[Jetpack Compose] 12. by 위임 아래 영상을 보고 정리한 게시글입니다. https://www.youtube.com/watch?v=Fn_xJ_IRHiA&list=PLxTmPHxRH3VV8lJq8WSlBAhmV52O2Lu7n&index=9 by 이전에 이렇게 쓴 적이 있음 @Composable fun HomeScreen(viewModel: MainViewModel = viewModel()) { val (text, setText) = remember { mutableStateOf("Hello World") } Column() { Text(text = text) Button(onClick = { setText("변경") }) { Text("클릭") } } } 위임 키워드 'by'를 쓰면 getter, setter가 재정의 돼서 편하게 쓸 수 ..
[Jetpack Compose] 11. ViewModel 아래 영상을 보고 정리한 게시글입니다. https://www.youtube.com/watch?v=JuIw_SbSpRU&list=PLxTmPHxRH3VV8lJq8WSlBAhmV52O2Lu7n&index=8 Recomposable 아래와 같이 작성하면 버튼을 눌러도 Text의 내용이 변하지 않음 @SuppressLint("UnrememberedMutableState") @Preview(showBackground = true) @Composable fun TestView() { val data = mutableStateOf("Hello") Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalA..
[Jetpack Compose] 10. Navigation - 값 전달하기 아래 영상을 보고 정리한 게시글입니다. https://www.youtube.com/watch?v=sHyQV3Jz_fA&list=PLxTmPHxRH3VV8lJq8WSlBAhmV52O2Lu7n&index=7 To do 첫번째 화면의 TextField에 들어있는 값을 세번째 화면으로 넘길 예정 세번째 화면 매개변수로 value를 받아와서 이 값을 세번째 화면에 나타낼 것임 @Composable fun ThirdScreen(navController: NavHostController, value: String) { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Align..