kotlin/coroutine
-
Actor의 생명주기 (공유 자원은 언제까지 살아있는가?)kotlin/coroutine 2025. 11. 9. 15:41
Actor의 내부에서 관리하는 공유 자원(lifecycle-managed resource) 은 “Actor 코루틴의 생명주기(lifecycle)”에 종속적으로 존재합니다.Actor의 생명주기가 곧 그 내부 상태(State)와 자원의 생명주기다.1️⃣ Actor의 생명주기(Lifecycle)란?Kotlin에서 Actor는 CoroutineScope.actor 로 생성되죠.fun CoroutineScope.counterActor() = actor { var count = 0 // 내부 상태 for (msg in channel) { when (msg) { is Inc -> count++ is Get -> msg.response.complete(c..
-
Actor 모델을 통한 동시성 문제 해결kotlin/coroutine 2025. 11. 9. 15:35
1️⃣ Actor 모델의 본질개념 요약Actor = 독립된 코루틴 + 메시지 큐(Channel)외부에서는 actor.send(Message) 로만 상호작용 가능내부 상태는 오직 해당 Actor 코루틴 안에서만 수정 가능즉, 여러 스레드가 동시에 Actor의 내부 상태를 건드릴 수 없습니다.→ 이게 Actor가 race condition을 구조적으로 줄이는 핵심 원리입니다.2️⃣ 일반적인 race condition 예시일반 코드 (shared mutable state)var counter = 0fun main() = runBlocking { val jobs = List(1000) { launch { repeat(1000) { counter++ } // race 발생 가..
-
비동기 의존 완화 (Asynchronous Dependency Mitigation) 가이드kotlin/coroutine 2025. 11. 9. 15:07
Objective비동기 로직에서 발생하는 양방향 의존성(circular dependency) 을 제거하고, caller → callee 단방향 구조로 유지한다.즉, “콜백 기반 제어”를 “결과 반환 기반 구조”로 전환함으로써 테스트 가능한 단방향 의존 설계를 실현한다.Key Results[KR1] 콜백 기반 구조에서 caller와 callee 간의 순환 참조를 제거한다.[KR2] Promise / Future / Coroutine / Actor / async-await 같은비동기 패턴을 활용해 단방향 데이터 흐름을 만든다.[KR3] 비동기 결과를 반환값(return value) 으로 표현한다.[KR4] 모든 비동기 함수는 “caller는 관찰자, callee는 수행자” 역할로 명확히 분리한다.[KR5] ..
-
코루틴 테스트 환경(runTest vs UnconfinedTestDispatcher) 완벽 이해하기kotlin/coroutine 2025. 10. 31. 22:48
ObjectiveCompose 및 ViewModel 테스트에서 적절한 코루틴 테스트 환경을 선택하고, 안정적이고 예측 가능한 테스트를 구현한다.Key ResultsKR1. runTest 와 TestScope + TestDispatcher 의 차이를 명확히 이해한다.항목runTestTestScope + TestDispatcher스코프 생성자동 생성수동 생성시간 제어가상 시간 (advanceTimeBy 등) 가능실제 시간 기반정리(cleanup)자동 정리직접 관리 필요DI 주입제한적명시적 주입 용이권장 사용처단순 비동기 단위 테스트ViewModel, Compose, DI 환경핵심 요약:runTest → 테스트 코루틴의 표준 진입점, 가상 시간 제어 가능TestScope + TestDispatcher → 유연..