상세 컨텐츠

본문 제목

동영상 보며 코루틴동영상 보며 코루틴 요약하기

안드로이드/basic

by 개발혱 2021. 3. 28. 14:21

본문

 

이 글은 새차원님이 만들어 놓은 동영상을 보면서 정리해놓은 글입니다.

새차원, 코틀린 코루틴 1. why coroutines

Kotlin 코루틴

  • 협력형 멀티태스킹을 프로그래밍 언어로 표현 Co+Routine
  • 구글 플레이어 1000개 앱 중에서 70퍼센트가 코틀린
  • 코루틴이 실시간 처리다.
  • 코루틴은 루틴의 일종
  • 협동 루틴이라 할 수 있다.
  • 코루틴의 "Co"는 with 또는 together를 뜻한다.

Couritine

  • 코루틴은 이전에 자신의 실행이 마지막으로 중단되었던 지점이 다음 장소에서 실행을 재개한다.
  • 입구점과 출구점 중단되고 재개가 된다.
  • 협력 작업, 예외, 이벤트 루프, 반복자, 무한 목록 및 파이프
  • 비동기 처리를 하면 간단하게 해준다.
  • 코루틴은 메인쓰레드가 간략하게 해주는걸 도와준다.
  • 컨버트 어싱크 비동기 처리 지역을 쭉 짜게 해준다.
  • 어싱크 코드를 순차적으로 만든다
suspend fun loadUser(){
	val user = api.fetchUSer()//새로운 쓰레드 생성되고
	show(user)//UI 업데이트 가능
}

 

LifeCycle, WorkManager, Room에 코루틴 지원

  • 순차적인 코드는 어렵지 않다.
  • 응용단계가 어려움

새차원, 코틀린 코루틴 2.basic

fun main() {
	GlobalScope.launch{//GlobalScope : 라이프타임이 프로그램 전체를 뜻함. 코루틴 스코프에서 반환됨.
		delay(1000L)
		println("World")
	}
	thread{//쓰레드와 코루틴든 비슷하다.
		Thread.sleep(1000)
		println("World")
	}
	println("Hello,")
	Thread.sleep(1000)
}
fun main() {
	GlobalScope.launch{//
		delay(1000L)
		println("World")
	}
	println("Hello,")
	runBlocking{//런치와 같은 코루틴 빌러
		Thread.sleep(2000)
	}

}

- runBlocking : 메인쓰레드가 런블럭킹 때문에 가독성이 좋아짐.

Waiting For Job

  • runBlocking은 2초 안에 끝나는데 GlobalScope.launch는 3초 뒤에 끝난다고 하면 어떻게 될까? RunBlocking은 끝난다. 이럴 땐 어떻게 해야할까?
fun main() = runBlocking {
	GlobalScope.launch {
		delay(3000L)//3초 뒤에 끝나내? 으잉? 실행도 못 해보고 프로그램 끝나다니!!
		println("World!")
	}
	println("Hello, ")
	delay(2000L)//2초 뒤에 끝난다.
}
fun main() = runBlocking {
	val job = GlobalScope.launch {
		delay(3000L)
		println("World!")
	}
	println("Hello, ")
	job.join()// job이 끝날 때 까지 기다렸다가 종료 됨. 그러나 join을 계속 생성해야함. 더 좋은 방법은 lauch쓰기
}

Structured concurrency

fun main() = runBlocking {
  launch {//runBlocking에 child로 관리하기
     delay(1000L)
     println("World!")
  }
	println("Hello, ")
}

Extract function refactoring

fun main() = runBlocking {
	launch {
		myWorld()
	}
	println("Hello,")
}

suspend fun myWorld() {// suspend 넣으면서 일시중지 할 수 있다.
	delay(1000L)
	println("world")
}

Coroutines ARE light-weight

fun main() = runBlocking {
	repeat(100_000){
		launch {
			delay(1000L)
			print(".")
		}
	}
}
  • It lauches 100K coroutines
  • try that with threads
  • out-of-memory error//시스템이 좋으면 에러 안나지만 갯수 많다면 에러 날 수 있다.

Global coroutines are like daemon threads

fun main()  = runBlocking {
	GlobalScope.launch {
		repeat(1000) { i ->
			println("I'm sleeping $i...")
			delay(500L)
	}
	delay(1300L)
}

Closing Thoughts

좀 어려웠던 개념이 동영상을 보면서 쉽게 다가왔다.

동영상 요약본 정리 후엔  REST API를 코루틴으로 만들기위해서 어떤 식으로 공부해봤고 적용해봤는지 정리해보겠다.

 

참고자료 

- [새차원, 코틀린 코루틴 1](www.youtube.com/watch?v=Vs34wiuJMYk&list=PLbJr8hAHHCP5N6Lsot8SAnC28SoxwAU5A&index=1)

- [새차원, 코틀린 코루틴 2](www.youtube.com/watch?v=14AGUuh8Bp8&list=PLbJr8hAHHCP5N6Lsot8SAnC28SoxwAU5A&index=2)

'안드로이드 > basic' 카테고리의 다른 글

JVM 메모리 구조  (0) 2022.06.15
[Kotlin, Android] let, with, run, apply, also  (0) 2021.05.09
Kotlin Null 체크(? / ?: / !!)  (0) 2021.03.05
Android GPS Tutorial  (0) 2021.02.20
[Android] GPS 동작 원리  (0) 2021.01.29

관련글 더보기