목록kotlin (5)
안드로이드 개발일기
CoroutineContext1. CoroutineContext- 코루틴의 실행 환경을 설정, 관리하는 인터페이스- 대표적으로 4가지 구성 요소가 있음 (1) CoroutineName: 코루틴 이름 (2) CoroutineDispatcher: 코루틴을 스레드에 할당해서 실행 (3) Job: 코루틴의 추상체, 코루틴을 조작하는데 사용 (4) CoroutineExceptionHandler: 코루틴에서 발생한 예외를 처리- Key, Value 형태로 각 구성요소를 관리 -> 중복 허용 x, 구성 요소는 하나씩만 존재- 더하기 연산(+)으로 객체 구성- 설정되지 않은 구성 요소는 설정되지 않은 상태로 유지- 같은 구성 요소가 둘 이상 더해지면 나중에 추가된 값을 사용val c1 = CoroutineName("M..
async와 Deferred 1. async 코루틴 빌더- Deferred 객체를 반환하는데, 코루틴으로부터 결과값을 수신할 때 사용- cf. launch: 결과값이 없는 Job을 반환 2. Deferred- Job 인터페이스의 서브타입으로 선언된 인터페이스- 그래서 Job 객체의 일종- Job 객체의 모든 함수와 프로퍼티를 사용할 수 있음 3. await - 결과값 수신을 대기할 수 있음 4. awaitAll- 복수의 async 코루틴 빌더를 실행하고 모든 결과값을 기다릴 때 사용 5. withContext- async-await 작업을 대체할 수 있음runBlocking { val job1 = async(Dispatchers.IO) { delay(1000L) return@async..
코루틴 빌더와 Job 1. Job 객체- 코루틴의 상태를 알 수 있는 객체- 코루틴을 제어할 수도 있음- 코루틴 빌더 함수 (runBlocking, launch 등)이 코루틴을 생성하면 Job 객체를 리턴 2. join, joinAll- 코루틴 실행이 완료될 때까지 호출부의 코루틴을 일시 중단함- 코루틴 간에 순차 처리가 필요한 경우 사용- joinAll은 여러 개의 Job 객체가 모두 끝날 때까지 일시 중단함 cf. delay- delay 함수는 Thread.sleep 처럼 일정 시간동안 지연시키는 역할을 하는데,- Thread.sleep은 지연시키는 동안 스레드가 블로킹되어 사용할 수 없는 상태가 되지만- delay는 지연을 수행하는 동안 다른 코루틴이 스레드를 사용할 수 있음 3. 지연 코루틴 (L..
3. CoroutineDispatcher1. CoroutineDispatcher- 코루틴을 스레드로 보내 실행시키는 역할- 자신에게 실행 요청된 코루틴을 작업 대기열에 넣고, 스레드풀에서 사용할 수 있는 스레드가 존재하면 코루틴을 보내 실행하게끔 만드는 역할- cf. 작업 대기열이 없는 CoroutineDispatcher도 존재 2. 제한된 디스패처 (Confined Dispatcher)- 사용할 수 있는 스레드나 스레드풀이 제한된 디스패처 (1) 단일 스레드 디스패처 (Single-Thread Dispatcher)- 사용할 수 있는 스레드가 하나인 디스패처== 스레드풀에 스레드가 하나val dispatcher: CoroutineDispatcher = newSingleThreadContext(name =..
1. 스레드 기반 작업의 한계와 코루틴의 등장1. JVM 스레드- 기본적으로 메인 스레드를 단일 스레드로 해서 실행- 보통 메인 스레드가 종료되면 종료-> 더 정확히는 사용자 스레드가 모두 종료될 때 종료되는데, 보통은 메인 스레드 하나에서 수행되므로 위와 같이 표현사용자 스레드- 우선 순위가 높은 스레드데몬 스레드ExampleThread().apply { isDaemon = true}.start()- 데몬 스레드는 우선 순위가 낮음- 사용자 스레드가 종료됐을 때 데몬 스레드가 강제 종료하지만 프로세스는 정상 종료 (Process finished with exit code 0) 2. 단일 스레드- 스레드 하나만을 사용하며, 다른 작업을 동시에 수행하지 못함-> 메인 스레드에서 시간이 오래 걸리는 작업을 ..