일일 회고
코틀린 비동기 프로그래밍의 꽃 Coroutine을 공부하는 날이다. 비동기 프로그래밍에 RxJava, RxKotlin, RxAndroid 등 Reactive 라이브러리가 있지만 (사실 공부해 본 적은 없다..ㅎ) Kotlin이 공식적으로 사용하고 구글이 권장하는 Coroutine이다.
Coroutine을 공부하기 전 "비동기"에 대해 이해해야 하는데 간단하게 생각할 수 있지만 깊게 들어가면 OS 지식이 꽤 필요한 부분이다..
OS를 다시 한번 복습해보는 시간을 한번 가져야 될 것 같고, 이어서 Coroutine도 계속 학습해야 할 것 같다. (Coroutine 이론도 양이 상당? 한 것 같다.)
+ 선택심화과제를 진행 중이다. 확실히 기본과제보다는 어렵다.
오늘의 Keyword
- asyncrhoronous programming
- Kotlin Coroutine
비동기 프로그래밍
작업을 하나씩 순서대로 수행하는 행위인 동기적 프로그래밍의 반대 개념으로 여러 작업을 동시에 실행하는 것을 뜻한다.
여러 로직이 동시 수행되며 다른 로직들의 완료와 관계없이 실행되는 방식이다.
Thread & Coroutine
Process
- 프로그램이 메모리에 올라가 실행되어 있는 상태
Thread
Process 보다 더 작은 작업 단위
- Task(작업) 단위 : Thread
- 각 작업에 Thread를 할당
- 각 Thread는 자체 Stack 메모리를 가지며, JVM Stack 영역을 차지함- Context Switching
- Blocking: Thread1이 Thread2의 결과가 나올 때까지 기다려야 한다면 Thread1 은 Blocking이 되어 사용하지 못한다.
Coroutine
최적화된 비동기 함수를 사용
효율적으로 자원 할당이 가능
Thread보다 가볍게 사용할 수 있어 Light-Weighted Thread라고도 함Task 단위 : Object(Coroutine)
- 각 작업에 Object(Coroutine)를 할당
- Coroutine은 객체를 담는 JVM Heap 영역에 적재됨
Context Switching -> No Context Switching
- 코드를 통해 Switching 시점을 보장함
- Suspend is NonBlcoking: Coroutine1이 Coroutine2의 결과가 나올 때까지 기다려야 한다면 > Coroutine1은 Suspend 되지만, Coroutine1을 수행하던 Thread는 유효함
Coroutine2도 Coroutine1과 동일한 Thread에서 실행할 수 있음비동기 처리 로직을 위해 콜백함수를 연속해서 야기되는 문제인 콜백 지옥 해소
Suspend(일시 중단 함수)
- fun 키워드 앞에 suspend키워드를 붙여서 함수를 구성하는 방법
- 람다를 구성하여 다른 일시 중단 함수를 호출(runBlocking, launch, async...)
Coroutine Dispatcher
- 코루틴을 시작하거나 재개할 스레드를 결정하기 위한 도구
- 모든 Dispatcher는 CoroutineDispatcher 인터페이스를 구현해야 함
Coroutine Builder
- async() - 결과가 예상되는 코루틴 시작에 사용(결과를 반환함)
- 전역으로 예외 처리 가능
- 결과, 예외 반환 가능한 Deffered 타입으로 반환, 추후 await로 처리하여 대기할 수 있는 코드를 구현할 수 있음
- launch() - 결과를 반환하지 않는 코루틴 시작에 사용(결과 반환 X)
- 자체/자식 코루틴 실행을 취소할 수 있는 Job 객체 반환
- runBlocking() - Blocking 코드를 일지 중지(Suspend) 가능한 코드로 연결하기 위한 용도
- main함수나 Unit Test 때 많이 사용됨
- 코루틴의 실행이 끝날 때까지 현재 쓰레드를 차단함
'내일배움캠프 7기 > TIL' 카테고리의 다른 글
내일배움캠프 7기 Android TIL 7일차 (2023.07.24) (0) | 2023.07.24 |
---|---|
내일배움캠프 7기 Android TIL 6일차 (2023.07.21) (1) | 2023.07.21 |
내일배움캠프 7기 Android TIL 4일차 (2023.07.19) (0) | 2023.07.19 |
내일배움캠프 7기 Android TIL 3일차 (2023.07.18) (0) | 2023.07.18 |
내일배움캠프 7기 Android TIL 2일차 (2023.07.17) (0) | 2023.07.17 |