Coroutine (1)

2023. 12. 6. 17:10· Android

 

코루틴

비동기 경량 스레드

- "Co: 함께" + "routine: 작업 처리단위" = "Coroutine: 어떤 작업을 함께 처리한다."

- 예전에는 ANR 오류를 해결하기 위해 스레드-핸들러나 AsyncTask를 이용했음. 하지만 API 30에서 deprecated되었고 코루틴 이용을 권장하고 있음

- 일반적인 스레드는 자유로운 제어가 힘들고 구현도 복잡하지만, 코루틴은 가볍고 많은 기능을 제공함


CoroutineContext

코루틴 처리를 어떻게 할 것인지에 대한 요소들의 집합

- Dispatcher : 코루틴을 처리할 스레드를 셋팅하고 할당하는 역할

- Job : 생성된 코루틴을 컨트롤 (생명 주기, 부모 자식 관계 정리 및 관리)


Coroutine Dispatcher

- 코루틴을 스레드에 배분하는 역할

- 스레드 풀에서 스레드를 하나 할당해 코루틴을 배당함

- 코루틴은 스레드풀을 생성하지만 직접 제어하지는 않고 오직 Dispatcher를 통해서만 제어 가능

 

Dispatchers 종류

 

1) Dispatchers.Main

- Android Main(UI) Thread에서 Coroutine을 실행하는 Dispatcher

- 반드시 UI와 상호작용하기 위해서만 사용

2) Dispatchers.IO

- File Input/Output, Network IO, Parser 작업에 최적화된 Dispatcher

3) Dispatchers.Default

- 대규모 Sorting, Graphics Rendering 등

- CPU 사용량이 많은 작업에 사용

4) Dispatchers.Unconfined

- 특수한 상황에서 코루틴을 실행 (사용을 권장하지 않음)


CoroutineScope

- 코루틴이 실행되는 범위를 생성

- 다양한 Scope 확장 함수 (= Coroutine Builder)를 이용하여 코루틴을 만듦

 

Coroutine Builder 종류

 

1) launch

- 결과값이 없는 코루틴

- Job 객체를 리턴. 코루틴 관리.

2) async

- 결과값이 있는 코루틴

- Deffered로 감싸서 값 리턴

3) withContext()

- T 반환 (결과값 T를 그대로 반환하는 코루틴)

 

1. 디스패처를 고려하지 않은 코드

CoroutineScope(IO).launch {
	val resultStr = getResultFromApi()
    textView.text = resultStr	// Text를 셋팅하는 부분은 Main Dispatcher에서 진행해야 함.
}

// CRASH 발생

 

2. Coroutine 중복을 통한 해결

// 코루틴 중복으로 인해 가독성이 낮으며 리소스 낭비도 있음

CoroutineScope(IO).launch {
	val resultStr = getResultFromApi()
    
    CoroutineScope(Main).launch {
    	textView.text = resultStr
    }
}

 

3. withContext를 통해 변경

CoroutineScope(IO).launch {
	val resultStr = getResultFromApi()
    
    withContext(Main) {
    	textView.text = resultStr
    }
}

 

4) runBlocking()

- T (코루틴 완료할 때까지 스레드를 점유)

5) actor()

- SendChannel

6) produce()

- ReceiveChannel

저작자표시 비영리 변경금지 (새창열림)

'Android' 카테고리의 다른 글

Serial 통신  (1) 2023.12.22
DataStore  (2) 2023.12.06
Hilt  (2) 2023.12.05
[Kotlin] 코틀린 기본 문법 (3)  (0) 2022.08.12
[Kotlin] 코틀린 기본 문법 (2)  (0) 2022.08.10
'Android' 카테고리의 다른 글
  • Serial 통신
  • DataStore
  • Hilt
  • [Kotlin] 코틀린 기본 문법 (3)
YOONJELLY
YOONJELLY
YOONJELLY
JELLYJELLY
YOONJELLY
전체
오늘
어제
  • 분류 전체보기 (153)
    • Springboot (2)
    • Android (15)
    • Algorithm (126)
      • 개념 (8)
      • BOJ (91)
      • Programmers (15)
      • SWEA (4)
    • 경험_기록 (1)
    • RIM_TIP (4)
    • Github (2)
    • CS (1)
      • 운영체제 (1)
      • 컴퓨터네트워크 (0)
      • 정보처리기사 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 이것이코딩테스트다
  • 액티비티컴포넌트
  • 자료구조
  • 프로그래머스
  • 코딩테스트
  • 안드로이드
  • 문자열
  • 알고리즘
  • 큐
  • 완전탐색
  • 코틀린
  • 백준
  • BOJ
  • Python
  • 스택
  • Android
  • BFS
  • 딕셔너리
  • 정렬
  • programmers
  • 이진탐색
  • 파이썬
  • 그리디
  • kotlin
  • 다이나믹프로그래밍
  • DP
  • DFS
  • 소프티어
  • softeer
  • SWEA

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
YOONJELLY
Coroutine (1)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.