시배's Android
Kotlin Coroutines Deep Dive | 1장. 코틀린 코루틴을 배워야 하는 이유 본문
Book/Kotlin Coroutines Deep Dive
Kotlin Coroutines Deep Dive | 1장. 코틀린 코루틴을 배워야 하는 이유
si8ae 2024. 1. 15. 21:26fun onCreate() {
val new = getNewsFromApi()
val sortedNews = news
.sortedByDescending { it.publishedAt }
view.showNews( sortedNews )
}
- 안드로이드에서는 하나의 앱에서 뷰를 다루는 스레드가 단 하나만 존재합니다.
- 이 스레드는 앱에서 가장 중요한 스레드라 블로킹되면 안 되기 때문에, 이런 방법으로 구현할 수 없습니다.
- 스레드 전환 : 블로킹이 가능한 스레드를 먼저 사용하고, 이후에 메인 스레드로 전환하면 된다.
- 스레드가 실행되었을 때 멈출 수 있는 방법이 없어 메모리 누수로 이어질 수 있습니다.
- 스레드를 많이 생성하면 비용이 많이 듭니다.
- 스레드를 자주 전환하면 복잡도를 증가시키며 관리하기도 어렵습니다.
- 코드가 쓸데없이 길어지고 이해하기 어려워집니다.
fun onCreate() {
getNewsFromApi { news ->
val sortedNews = news
.sortedByDescending { it.publishedAt }
view.showNews( sortedNews )
}
}
- 콜백 : 함수를 논블로킹으로 만들고, 함수의 작어빙 끝났을 때 호출될 콜백 함수를 넘겨주는 것입니다.
- 콜백을 이용해 구현한 방식 또한 중간에 작업을 취소할 수 없습니다.
fun onCreate() {
disposables += getNewsFromApi()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map { news ->
news.sortedByDescending { it.publishedAt }
}
.subscribe { sortedNews ->
view.showNews(sortedNews)
}
}
- RxJava : 리액티브 스트림을 사용합니다.
- 데이터 스트림 내에서 일어나는 모든 연산을 시작, 처리, 관찰할 수 있습니다.
- 리액티브 스트림은 스레드 전환과 동시성 처리를 지원하기 때문에 애플리케이션 내의 연산을 병렬 처리하는 데 사용됩니다.
- subscribeOn, observeOn, map, subscribe와 같은 함수들을 배워야 합니다.
- 취소하는 작업 또한 명시적으로 표시해야 합니다.
- 객체를 반환하는 함수들은 Observable이나 Single 클래스로 래핑해야 합니다.
코틀린 코루틴의 사용
- 코루틴을 특정 지점에서 멈추고 이후에 재개할 수 있다는 것입니다.
- 코루틴을 사용하면 우리가 짠 코드를 메인 스레드에서 실행하고 API에서 데이터를 얻어올 때 잠깐 중단시킬 수도 있습니다.
- 스레드는 블로킹되지 않으며 뷰를 바꾸거나 다른 코루틴을 실행하는 등의 또 다른 작업이 가능합니다.
- 코루틴을 사용하는 가장 중요한 이유는 스레드를 사용하는 비용이 크기 때문입니다.
- 스레드는 명시적으로 생성해야 하고, 유지되어야 하며, 스레드를 위한 메모리 또한 할당되어야 합니다.
'Book > Kotlin Coroutines Deep Dive' 카테고리의 다른 글
Kotlin Coroutines Deep Dive | 6장. 코루틴 빌더 (0) | 2024.01.21 |
---|---|
Kotlin Coroutines Deep Dive | 5장. 언어차원에서의 지원 vs 라이브러리 (0) | 2024.01.19 |
Kotlin Coroutines Deep Dive | 4장. 코루틴의 실제 구현 (0) | 2024.01.18 |
Kotlin Coroutines Deep Dive | 3장. 중단은 어떻게 작동할까? (0) | 2024.01.18 |
Kotlin Coroutines Deep Dive | 2장. 시퀀스 빌더 (0) | 2024.01.15 |