안드로이드 성능 최적화, 왜 경량 스레드(코루틴)를 써야 할까?

2025. 2. 8. 14:45Android/도구 및 라이브러리

728x90
반응형

안드로이드에서는 흔히 API 통신을 할 때 Coroutine을 사용한다.

코루틴은 안드로이드의 대표적인 경량 스레드 방식이다.

그렇다면 스레드는 무엇이고, 그 안에서 경량 스레드는 무엇일까?

 

1. 스레드란?

스레드(Thread) 는 프로세스 내부에서 실행되는 하나의 작업 흐름을 의미한다.

흔히 프로세스와 많이 비교를 하는데 안드로이드로 따지자면 앱이라는 프로세스 안에 여러개의 스레드가 존재하는 것이다.

즉, 스레드는 앱(프로세스)에서 여러개의 작업을 동시에 실행시켜주는 단위라고 생각하면 된다.

안드로이드 앱도 내부적으로 메인 스레드(Main Thread) 를 가지고 있고, UI를 업데이트하는 모든 작업은 여기서 수행이 된다.

✅ 안드로이드에서 Thread

안드로이드 앱에서는 기본적으로 하나의 메인 스레드(UI 스레드) 가 존재한다.

이 메인 스레드는 버튼 클릭 처리, 화면 그리기, UI 업데이트 등을 담당한다.

하지만, 네트워크 요청이나 파일 읽기 같은 무거운 작업을 메인 스레드에서 실행하면 앱이 멈추고 ANR(Application Not Responding) 에러가 발생할 수 있다.

그래서 백그라운드에서 실행할 별도의 스레드가 필요하다.

✅ Thread의 단점

  • 스레드 생성 비용이 큼 → OS 스레드를 직접 생성하므로 리소스를 많이 사용
  • 스레드 간 데이터 공유가 어려움 → 동기화 문제가 발생할 수 있음 (synchronized, volatile 필요)
  • UI 업데이트 불가 → 백그라운드 스레드에서 UI를 변경하려면 Handler 나 runOnUiThread 사용 필요

그래서 스레드보다 가벼운 대안으로 코루틴(Coroutine) 이 많이 사용된다.

 

자, 그러면 가벼운 대안으로 사용되는 코루틴.

바로 그 경량 스레드에 대해 알아보자!

 

2. 경량 스레드

경량 스레드(Lightweight Thread) 는 기존의 운영체제(OS) 수준의 스레드보다 훨씬 적은 비용으로 실행될 수 있는 가상 스레드 개념이다.

코틀린의 코루틴(Coroutine) 이 대표적인 경량 스레드 방식인데, 코루틴을 사용하면 실제 OS 스레드를 적게 사용하면서도 여러 개의 작업을 동시에 실행할 수 있다.

✅ 기존의 스레드(Thread)와 비교

 

  일반 스레드 (Thread) 코루틴 (Coroutine, 경량 스레드)
생성 비용 무거움 (OS에서 직접 관리) 가벼움 (사용자 레벨 관리)
컨텍스트 스위칭 비용 높음 (커널 레벨 스위칭) 낮음 (사용자 레벨에서 스위칭)
동시 실행 다중 스레드 필요 하나의 스레드에서도 여러 개 실행 가능
메모리 사용 많음 (스레드당 스택 할당) 적음 (스택을 공유 가능)
  • 쉽게 말하면, 일반 스레드는 무겁고 관리 비용이 크지만, 코루틴(경량 스레드)은 가벼워서 더 효율적이다.

✅ 왜 경량 스레드가 필요할까?

안드로이드 앱에서 네트워크 요청, DB 처리, 파일 읽기/쓰기 등 비동기 작업을 실행할 때, 기존 방식대로 하면 스레드가 너무 많이 생성되고 관리하기 어려워진다.

그래서 코루틴(경량 스레드)을 사용하면, 적은 리소스로도 많은 작업을 동시에 실행할 수 있다.

✅ 예제 코드로 비교해보자

1️⃣ 일반 스레드 (Thread)

Thread {
    Thread.sleep(2000) // 2초 대기
    println("일반 스레드에서 실행")
}.start()
  • 새로운 OS 스레드를 생성하므로 비용이 큼.

2️⃣ 코루틴 (Coroutine, 경량 스레드)

GlobalScope.launch {
    delay(2000) // 2초 대기
    println("코루틴에서 실행")
}
  • 별도의 OS 스레드를 만들지 않고, 기존 스레드에서 가볍게 실행됨.
  • 스레드보다 적은 리소스를 사용하면서도 같은 동작을 수행 가능.
728x90
반응형