Kotlin Coroutine

Coroutine

πŸ§μ™œ?

  • μ–Όλ§ˆμ „ Kotlin 앱을 ν•˜λ‚˜ λ§Œλ“€μ–΄λ³΄λŠ” 과정에 Http톡신을 ν•˜κ²Œλ˜μ—ˆλŠ”λ°, μ•Œμˆ˜μ—†λŠ” μ—λŸ¬κ°€ 계속 λœ¨λ”λΌ..

πŸ˜¬μ΄λŸ°μ΄μœ κ°€..

  • μ•±μ—μ„œ Http톡신을 ν•  λ•Œμ—, Main threadμ—μ„œ 진행을 ν•  수 μ—†κΈ°λ•Œλ¬Έμ— μ½œλ°±λ“±μ„ ν™œμš©ν•˜μ—¬ λ‹€λ₯Έ λ³„λ„μ˜ threadμ—μ„œ μž‘μ—…μ„ ν•΄μ•Όν•œλ‹€λ”λΌ..
  • 근데 ν”„λ‘ νŠΈμ—μ„œ 많이 κ²ͺμ–΄λ³΄μ•˜λ“―μ΄.. μ½œλ°±μ§€μ˜₯.. κ·ΈλŸ¬λ˜μ€‘ Promise객체처럼 동기, λΉ„λ™κΈ°μž‘μ—…μ„ λ„μ™€μ£ΌλŠ”κ²ƒμ΄ μžˆμ§€μ•Šμ„κΉŒ μ•Œμ•„λ³΄λ˜μ€‘ Coroutine을 μ•Œκ²Œλ˜μ—ˆλ‹€.

Coroutine?

  • μ—¬λŸ¬κ°œμ˜ 루틴듀이 ν˜‘λ™ν•˜μ—¬ λͺ¨μ—¬μžˆλŠ”것이 코루틴이닀.
  • 코루틴은 이전에 μžμ‹ μ˜ 샐행이 λ§ˆμ§€λ§‰μœΌλ‘œ μ€‘λ‹¨λ˜μ—ˆλ˜ 지점 λ‹€μŒμž₯μ†Œμ—μ„œ 싀행을 μž¬κ°œν•œλ‹€.
  1. μΌλ°˜λ£¨ν‹΄ : μ§„μž…ν•œλ²ˆ, μ’…λ£Œν•œλ²ˆ
  2. 코루틴 : μ§„μž…, 쀑단 - 재개, 쀑단 - 재개, μ’…λ£Œ

Coroutine λ“±μž₯λ°°κ²½

  1. κΏˆμ˜μ½”λ“œ1
  val user = fetchUserData()
  textView.text = user.name
  • Http톡신을 톡해 값을 λ°›μ•„μ˜€κ³ , κ·Έ 값을 ν† λŒ€λ‘œ μž‘μ—… 진행.

λ‹Ήμ—°νžˆ μž‘λ™μ•ˆλ¨. 톡신과정에 μ‹œκ°„μ΄ ν•„μš”ν•˜μ§€λ§Œ μ½”λ“œλ₯Ό 읽을 λ•Œ 별닀λ₯Έ μ½”λ“œκ°€ μ—†λ‹€λ©΄ κΈ°λ‹€λ €μ£Όμ§€μ•ŠμŒ.

  1. κΏˆμ˜μ½”λ“œ2
  thread {
    val user = fetchUserData()
    textView.text = user.name
  }
  • λ³„λ„μ˜ μž‘μ—…μ˜μ—­μ„ λ§Œλ“€μ–΄μ„œ 톡신은 λ˜μ§€λ§Œ, UIκ΄€λ ¨μž‘μ—…μ€ main threadμ—μ„œλ§Œ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μ—λŸ¬κ°€ λ°œμƒν•¨
  1. κΏˆμ„ ν¬κΈ°ν•œ ν˜„μ‹€μ μΈ μ½”λ“œ
  fetchUserData { user ->
      textView.text = user.name
  }
  • fetchUserDataλ©”μ†Œλ“œμ— μ½œλ°±ν•¨μˆ˜λ₯Ό 보낸 λ’€, fetchUserData의 μž‘μ—…μ„ μ™„λ£Œν•˜κ³  λ‚˜μ˜€λŠ” 데이터값을 μ½œλ°±ν•¨μˆ˜μ˜ 인자둜 λ³΄λ‚΄μ„œ μž‘μ—…μ„ μ§„ν–‰ν•œλ‹€.

λ¬Έμ œμ—†μ΄ μž‘λ™λ˜μ§€λ§Œ μ½œλ°±μ§€μ˜₯κ³Ό λ©”λͺ¨λ¦¬λ¬Έμ œ λ°œμƒ

  1. 코루틴을 ν†΅ν•œ 꿈 μ‹€ν˜„
  suspend fun loadUser(){
      val user = api.fetchUser()
      show(user)
  }
  • suspendλŠ” 쀑단 λ©”μ†Œλ“œλ‘œ, 코루틴 μ˜μ—­μ΄κ±°λ‚˜ 같은 μ€‘λ‹¨λ©”μ†Œλ“œ μ•ˆμ—μ„œ ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό λ§Œλ‚˜λ©΄ ν•΄λ‹Ή λ©”μ†Œλ“œκ°€ μ™„λ£Œλ λ•ŒκΉŒμ§€ μ΄ν›„μ˜ μ½”λ“œλŠ” μ½νžˆμ§€ μ•ŠλŠ”λ‹€.

마치 λ™κΈ°ν™”λœ μ½”λ“œκ°™μŒ

μ°Έμ‘°

μƒˆμ°¨μ› μ½”ν‹€λ¦° 코루틴


@SangMin
πŸ‘† H'e'story

πŸš€GitHub