Android에서의 비동기, 스레드, 코루틴 개념 정리

Bluewave·2025년 6월 19일

안드로이드

목록 보기
8/14
post-thumbnail

1. 동기 vs 비동기

구분동기(Synchronous)비동기(Asynchronous)
특징작업이 끝날 때까지 기다림작업이 끝나기 전에 다른 일 수행 가능
예시택배 도착 전까지 현관 앞에서 기다림택배를 시키고 다른 일을 하다 도착 알림 받음
Android 예API 응답 받을 때까지 UI 멈춤응답 기다리며 UI는 계속 작동

→ UI가 멈추면 사용자 경험이 안 좋아짐. 그래서 비동기 처리 필수


2. 스레드(Thread)

"앱 내에서 동시에 여러 일을 하게 해주는 실행 단위"

메인 스레드(UI 스레드)

  • 화면을 그리는 스레드
  • 여기서 시간이 오래 걸리는 작업을 하면 앱이 멈춘 것처럼 보임 (ANR 발생)

백그라운드 스레드

  • 시간이 오래 걸리는 작업(API 호출, 파일 I/O 등)에 사용
  • Thread, HandlerThread, AsyncTask 등을 사용했지만 복잡하고 비효율적

3. 코루틴(Coroutine)

Kotlin에서 제공하는 가벼운 스레드 대체 비동기 방식

왜 코루틴을 쓰는가?

  • 기존 스레드 방식보다 문법이 간결하고 자원 사용이 적음
  • 스레드 수십 개 → 코루틴 수천 개도 가능

간단한 코드 예

CoroutineScope(Dispatchers.IO).launch {
    val data = getDataFromServer() // 백그라운드 처리
    withContext(Dispatchers.Main) {
        updateUI(data) // UI는 메인에서
    }
}
  • launch: 새로운 코루틴 실행
  • withContext: 다른 스레드(컨텍스트)로 전환
  • Dispatchers.IO: 파일/네트워크 작업용
  • Dispatchers.Main: UI 처리용

4. 정리 요약

개념의미역할
동기작업 끝날 때까지 기다림간단한 순차 로직에 적합
비동기기다리지 않고 다음 작업 진행사용자 경험 개선
스레드OS에서 제공하는 실행 단위동시에 여러 일 가능 (무겁고 관리 어려움)
코루틴Kotlin 기반의 가벼운 비동기 처리 방식가독성 좋고, 적은 리소스로 동시 처리

  • 코루틴은 비동기를 쉽게 하기 위한 수단
  • 기존 스레드는 무겁고 복잡 → 코루틴으로 대체
  • UI 멈춤 = 비동기 처리가 부족한 것
  • launch, async, suspend 기억해두기
profile
Developer's Logbook

0개의 댓글