일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- keystore
- 2레벨
- 성빈랜드
- suspend programming
- 최댓값 최솟값
- 브론즈 1
- LazyRow
- 프로그래머스
- 실버2
- 개발하는 정대리
- LazyColumn
- 백준
- kotlin
- 데이터베이스 첫걸음
- compose
- DB 기능
- gradlew
- github action
- capitalize
- 실버 4
- Myungpyo Shim
- 데이터베이스
- DB
- Activirty
- 브론즈1
- .github
- navigation component
- Android
- 피보나치 수 2
- Bitrise
- Today
- Total
목록Android (19)
plzy의 개발 블로그
이 블로그 포스팅은 https://myungpyo.medium.com/reading-coroutine-official-guide-thoroughly-part-1-98f6e792bd5b 를 참고하여 만들었습니다. #1 중단 함수에 대해 알아보자. package com.smp.coroutinesample.basic import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch fun main(args: Array) { GlobalScope.launch { delay(1000L) println("World!") } println("Hello,") Thread.sleep(2000L) } 위의..
Coroutine에서 suspend는 빠트릴 수 없는 중요한 키워드이다. 하지만 붙이는 경우가 있고 붙이지 않는 경우도 있다. ex) flow 어떠한 경우에 붙이고 어떤 역할을 하는지 알아보자. suspend의 뜻 suspend를 구글 번역기를 돌려보면 중지하다 라는 뜻이 보일 것이다. 말 그대로 suspend를 붙인 함수는 중지할 수 있는 상태가 되는 것이다. suspend의 기능 코 루틴은 일시 중단할 수 있다. 예를 들어 A 코 루틴과 B 코 루틴이 있다고 가정했을 때 A코 루틴에서 B의 코 루틴의 결괏값이 필요한 경우가 생길 수 있다. 이런 경우 A 코 루틴을 일시 중지 한 후 B의 결과값을 가져온 후 다시 A 코루틴을 실행한다. 이와 같은 경우가 callback 지옥을 해결해준다! suspend..
Compose를 사용하기 전에는 Splash Theme를 사용하거나, startActivity 등 사용해서 만들면 됐었다. 하지만 Compose에서는 조금 방법이 다르다. 바로 Navigation을 사용해야한다. 먼저 splash로 사용할 화면과, splash 후에 나올 화면을 NavHost에 정의해 준다. startDestination 에서 어느 화면이 가장 먼저 실행될 것인지 명시해준다. @Composable fun BosoDiaryApp() { // navigation 설정 val navController = rememberNavController() NavHost( navController = navController, startDestination = Screen.Splash.route ) { ..
Android에서 LiveData는 ViewModel에서의 데이터 값을 가지고 있어 view를 최신 값으로 유지해준다. 이러한 개념은 Android 개발을 한 단면 익숙할 것이다. 자주 사용하고 있는 LiveData가 Flow로 대체될 위기에 처했다. 어떠한 이유 때문에 그러는 걸까? 먼저 LiveData의 장단점에 대해 알아보자 LiveData의 장점 Observer 패턴을 사용하기 때문에, 데이터의 변화를 실시간으로 구독자에게 알려 최신 값으로 유지할 수 있다. 라이프사이클을 알고 있기 때문에 생명주기에 따라 변한다. viewModel과 같이 사용할 경우 화면 회전 같은 현상이 일어나도 view의 데이터 값을 유지할 수 있다. LiveData의 장점만 보면 flow가 나올 이유가 없을 것 같다. 하지..
코루틴을 알기 전에 먼저 스레드에 대해 알아야 한다. 스레드란 하나의 프로세스 내에서 일하는 작업 단위라고 생각하면 된다. Android에서는 비즈니스 로직을 UI 스레드에 쓰면 안 되고 Work스레드에 써야 하는 건 다들 알 고 있을 것이다. 이때 Work스레드를 이용하는 방법에는 여러 가지가 있다. ex) rx , coroutine 하지만 정확히 말하자면 코루틴과 스레드는 다른 개념이다. 코루틴과 스레드의 차이 코루틴은 하나의 실행이 시작할 때부터 끝날 때까지의 주기를 나타낸다고 한다면 스레드는 그 일이 실행되는 곳이다. 그래서 하나의 스레드에 여러 코 루틴이 존재할 수 있다. 코루틴 이란. 코루틴을 처음 들었을 때 kotlin + 루틴 해서 코 루틴인 줄 아는 사람들이 있을 것이다. 하지만 그것은 ..
기존에 list 뷰를 만들려면 RecyclerView.Adapter, RecyclerView.ViewHolder 등을 만들어야 했다. 무척 번거로웠지만 compose에서는 어떻게 만들면 될까? LazyColumn LazyColumn이란 compose에서 list를 만들 때 쓰는 layout이다. 이름부터 볼 수 있듯이 세로형 list를 만들 수 있는 것인데 한번 코드를 살펴보자. @Composable fun Greetings(name: List = List(1000) { "${it}" }) { LazyColumn(Modifier.padding(vertical = 4.dp)) { items(name) { name -> Greeting(name = name) } } } items에 어떠한 데이터가 들어갈지 ..
기존 리사이클러뷰를 사용할 때 리사이클러뷰 어뎁터로 가져왔을 것이다. 데이터가 적다면 상관없지만 리사이클러뷰 아이템의 데이터가 1만 개, 10만 개 등등 커지면 어떻게 될까? 데이터를 불러오는데의 작업이 오래 걸리고 서버에 과부하가 될 수 있다. 이를 해결하기위해 Android에서는 paging이라는 라이브러리가 존재한다. paging이란? 페이징이란 network나 database에 있는 데이터를 불러올 때 page대로 데이터를 분리해서 가져오는 것이다. 기존 데이터를 한꺼번에 가져왔다면 page대로 가져와 리소스 관리에 효율적이다. Android에서는? Android에서 flow, liveData로 비동기 작업까지 쉽게 할 수 있다. 또한 하나의 page의 데이터에 끝에 도달했을 때 자동으로 adap..
나는 기존 프로젝트에 LiveData를 중점적으로 썼었다. 이로 인해 여러 에러 사항이 많았는데 특히 A의 activity에 데이터를 호출 한 후 B의 Activity로 이동했다가 다시 돌아오면 기존에 있던 observe가 남아 있어 다시 호출되는 현상이 있었다. 이를 해결하기 위해 SingleLiveData, EventLiveData 등 여러 해결책이 있었지만, 각각 해결책마다 또 다른 이슈가 있어 이번 기회에 flow에 대해 공부하고 정리한다. flow를 알기 전에 먼저 리액티브 프로그래밍의 개념부터 알아야 한다. 왜냐하면 flow는 기존 중단 함수와 달리 여러 값을 순차적으로 내보낼 수 있다. 리액티브 프로그래밍의 개념을 다시 짚어보자면 리액티브 프로그래밍이란? 리액티브 프로그래밍이란 함수형 프로그..