본문 바로가기
android

[Android] 안드로이드를 한다면 꼭 알아야 하는 개념 | 동기, 비동기

by liz_devel 2024. 8. 25.

안드로이드 개발자가 되기 위해 공부를 시작했을 무렵 동기, 비동기라는 개념이 자주 등장했고 지금까지도 공식 문서에 자주 등장한다. 이 개념을 초반에 잘못된 블로그에서 잘못된 개념을 접하여 많이 혼란스러웠었다. 당시 선임이었던 개발자분께서 내가 개념을 반대로 알고 있는 것을 알려주셨고 그때부터 블로그의 모든 글을 신뢰하지 않을 뿐더러 공식 문서 위주로 확인하는 습관이 생겼다. 나처럼 비슷하게 이 개념을 헷갈려 했던 사람이 있을 것 같아 이번 기회에 정리해 보려고 한다.

 


 

동기란?

Synchronous

  • 코드가 한 줄씩 순차적으로 실행된다.
  • 한 작업이 완료되어야 다음 작업이 실행된다.

예시 - 네트워크 요청 후 응답받을 때까지 다음 코드가 실행되지 않는다.

네트워크 요청이나 파일 읽기처럼 시간이 오래 걸리는 작업을 동기적으로 실행하게 되면 앱이 멈춘 것처럼 보일 수 있다.

 

 


 

비동기란?

Asynchronous

  • 작업 요청 후 그 작업이 완료될 때까지 기다리지 않고 다음 작업을 계속해서 실행한다.
  • 작업이 완료되면 결과를 처리하는 콜백이나 이벤트를 사용한다.

예시 - 네트워크 요청을 보내는 동시에 다른 작업을 계속 진행할 수 있으며, 요청이 완료되면 결과를 처리하는 콜백이나 이벤트가 호출된다.

비동기 처리는 앱의 반응성을 유지하고, 사용자 경험을 개선하는 데 중요하다.

 

 

안드로이드에서 비동기 처리 방법

  • AsyncTask:
    • AsyncTask는 비동기 작업을 처리하기 위해 설계된 클래스였지만, API 30부터 deprecated되었습니다. 이 클래스는 간단한 비동기 작업에 유용했으나, 복잡한 작업이나 라이프사이클 관리를 위해 더 현대적인 방법으로 대체되고 있습니다.
  • Executor와 ExecutorService:
    • 스레드 풀을 사용하여 비동기 작업을 관리할 수 있습니다. Executor는 스레드 작업을 관리하고, ExecutorService는 작업의 제출과 종료를 관리합니다.
  • Handler와 HandlerThread:
    • Handler는 특정 스레드의 메시지를 처리하고, HandlerThread는 별도의 스레드에서 작업을 수행할 수 있도록 합니다. 이는 주로 메인 스레드와 백그라운드 스레드 간의 통신에 사용됩니다.
  • LiveData:
    • LiveData는 데이터의 변화를 관찰할 수 있는 클래스입니다. 데이터가 변경될 때 자동으로 UI를 업데이트하는 데 유용합니다. 이는 앱의 라이프사이클에 안전하게 데이터를 전달할 수 있게 해줍니다.
  • Kotlin Coroutines:
    • Kotlin Coroutines는 비동기 작업을 간단하고 효율적으로 처리하는 현대적인 방법입니다. 코루틴을 사용하면 비동기 코드를 동기 코드처럼 작성할 수 있으며, suspend 함수와 CoroutineScope를 통해 비동기 작업을 쉽게 관리할 수 있습니다.
    • 코루틴은 Dispatchers를 사용하여 IO 작업, 계산 작업 등 다양한 작업을 병렬로 처리할 수 있게 합니다.
  • WorkManager:
    • WorkManager는 백그라운드 작업을 예약하고 관리하는 라이브러리로, 작업이 정확하게 수행되도록 보장합니다. 특히, 앱이 종료되거나 기기가 재부팅되더라도 작업이 계속 수행되도록 설정할 수 있습니다.
  • RxJava:
    • RxJava는 반응형 프로그래밍을 지원하는 라이브러리로, 데이터 스트림과 이벤트를 비동기적으로 처리할 수 있습니다. 하지만 최근에는 코루틴이 선호되는 추세입니다.

 

반응형