공부한 것
코루틴
알게된 것
1. 코루틴
어제에 이어 코루틴
에 대해 학습했다. 코루틴은 코루틴 스코프
를 통해서 실행할 수 있다. 코루틴 스코프
를 사용하지 않고도 코루틴을 실행할 수 있지만 이런 경우에 작업이 종료된 코루틴에 대해 별도의 처리를 해줘야 한다.
Coroutine Scope
Coroutine Scope
는 코루틴의 범위를 정의하는 인터페이스
이다. 말 그대로 코루틴이 실행되는 범위를 지정한다. 모든 코루틴은 Scope
내에서 실행되어야 하고 액티비티
나 프래그먼트
의 생명주기
에 따라 코루틴
을 취소
하여 메모리 릭
을 방지한다. Global Scope
와 Coroutine 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 Builder
는 Coroutine Scope
의 확장 함수
로 새로운 코루틴을 실행하기 위해 사용한다.
1. launch : 현재 스레드를 Block
하지 않고 새로운 코루틴을 실행한다. Job
인스턴스를 반환한다.
2. Async : 현재 스레드를 Block
하지 않고 새로운 코루틴을 실행한다. Deferred<T>
인스턴스를 반환하고 await
로 값을 얻는다.
3. runBlocking : 작업이 끝날 때까지 현재 쓰레드를 Block
한다. T 타입의 결과를 반환한다.
공부할 것
MVVM
느낀 점
학습한 코루틴을 실제로 적용해보자
'💻 개발 > iOS' 카테고리의 다른 글
[TIL] 22.04.18 (0) | 2022.04.18 |
---|---|
[TIL] 22.04.17 (0) | 2022.04.17 |
[TIL] 22.03.22 (0) | 2022.03.22 |
[TIL] 22.03.20 (0) | 2022.03.20 |
[TIL] 22.03.19 (0) | 2022.03.19 |