| 구분 | 동기(Synchronous) | 비동기(Asynchronous) |
|---|---|---|
| 특징 | 작업이 끝날 때까지 기다림 | 작업이 끝나기 전에 다른 일 수행 가능 |
| 예시 | 택배 도착 전까지 현관 앞에서 기다림 | 택배를 시키고 다른 일을 하다 도착 알림 받음 |
| Android 예 | API 응답 받을 때까지 UI 멈춤 | 응답 기다리며 UI는 계속 작동 |
→ UI가 멈추면 사용자 경험이 안 좋아짐. 그래서 비동기 처리 필수
"앱 내에서 동시에 여러 일을 하게 해주는 실행 단위"
Thread, HandlerThread, AsyncTask 등을 사용했지만 복잡하고 비효율적Kotlin에서 제공하는 가벼운 스레드 대체 비동기 방식
CoroutineScope(Dispatchers.IO).launch {
val data = getDataFromServer() // 백그라운드 처리
withContext(Dispatchers.Main) {
updateUI(data) // UI는 메인에서
}
}
launch: 새로운 코루틴 실행withContext: 다른 스레드(컨텍스트)로 전환Dispatchers.IO: 파일/네트워크 작업용Dispatchers.Main: UI 처리용| 개념 | 의미 | 역할 |
|---|---|---|
| 동기 | 작업 끝날 때까지 기다림 | 간단한 순차 로직에 적합 |
| 비동기 | 기다리지 않고 다음 작업 진행 | 사용자 경험 개선 |
| 스레드 | OS에서 제공하는 실행 단위 | 동시에 여러 일 가능 (무겁고 관리 어려움) |
| 코루틴 | Kotlin 기반의 가벼운 비동기 처리 방식 | 가독성 좋고, 적은 리소스로 동시 처리 |
UI 멈춤 = 비동기 처리가 부족한 것launch, async, suspend 기억해두기