💻 개발/TIL

[TIL] 22.03.23

고도고도 2022. 3. 23. 15:34

공부한 것

코루틴

알게된 것

1. 코루틴

어제에 이어 코루틴 에 대해 학습했다. 코루틴은 코루틴 스코프 를 통해서 실행할 수 있다. 코루틴 스코프 를 사용하지 않고도 코루틴을 실행할 수 있지만 이런 경우에 작업이 종료된 코루틴에 대해 별도의 처리를 해줘야 한다.

Coroutine Scope

Coroutine Scope 는 코루틴의 범위를 정의하는 인터페이스 이다. 말 그대로 코루틴이 실행되는 범위를 지정한다. 모든 코루틴은 Scope 내에서 실행되어야 하고 액티비티프래그먼트생명주기 에 따라 코루틴취소 하여 메모리 릭 을 방지한다. Global ScopeCoroutine Scope 가 존재한다.

 

1. Global Scope : 앱의 생명주기와 함께 동작하기에 별도의 생명 주기 관리가 필요 없다. 앱이 실행되고 종료되기 까지 긴 시간 실행되는 코루틴에 적합
2. Coroutine Scope : 코루틴이 필요할 때 실행하고 종료하기 위한 스코프, 특정 이벤트에 서버와 통신할 때 적합

Coroutine Scope 의 경우 Dispatcher를 통해 코루틴이 실행될 쓰레드를 지정할 수 있다.

Coroutine Dispatcher

코루틴은 Dispatcher 를 통해 쓰레드풀 내의 적절한 쓰레드 에 코루틴을 배분한다.

 

1. Dispatchers.Default : 별도의 Context를 지정하지 않은 경우 해당 디스패쳐로 자동으로 설정되며 CPU를 많이 사용하는 작업을 진행할 때 적합

2. Dispatchers.IO : 디스크 또는 네트워크의 I/O 작업을 실행할 때 적합

3. Dispatchers.Unconfined : 중단된 쓰레드에서 다시 시작하는 디스패쳐로 사용하지 않는 것을 추천

4. Dispatchers.Main : 백그라운드 쓰레드에서 코루틴을 실행하는 디스패쳐로 UI와 상호작용하는 작업을 실행할 때 적합

Coroutine Builder

Coroutine BuilderCoroutine Scope확장 함수 로 새로운 코루틴을 실행하기 위해 사용한다.

 

1. launch : 현재 스레드를 Block 하지 않고 새로운 코루틴을 실행한다. Job 인스턴스를 반환한다.

2. Async : 현재 스레드를 Block 하지 않고 새로운 코루틴을 실행한다. Deferred<T> 인스턴스를 반환하고 await 로 값을 얻는다.

3. runBlocking : 작업이 끝날 때까지 현재 쓰레드를 Block 한다. T 타입의 결과를 반환한다.

공부할 것

MVVM

느낀 점

학습한 코루틴을 실제로 적용해보자

'💻 개발 > TIL' 카테고리의 다른 글

[TIL] 22.04.18  (0) 2022.04.18
[TIL] 22.04.17  (0) 2022.04.17
[TIL] 22.03.23  (0) 2022.03.23
[TIL] 22.03.22  (0) 2022.03.22
[TIL] 22.03.20  (0) 2022.03.20
[TIL] 22.03.19  (0) 2022.03.19