Android

동기 / 비동기

김한토 2024. 5. 20. 19:35
반응형

동기(synchronous)

동기 작업은 연산이 완료될 때까지 해당 작업을 호출한 스레드가 기다리는 방식이다. 즉, 작업이 완료될 때까지 다음 작업이 시작되지 않는다. 안드로이드에서는 주로 UI 스레드(Main Thread)에서 실행된다. 동기 작업의 예로는 파일 읽기/쓰기, 네트워크 요청 등을 들 수 있다.

특징:

  1. 블로킹(Blocking): 작업이 완료될 때까지 다른 작업을 차단한다.
  2. 직관적: 코드가 순차적으로 실행되므로 이해하기 쉽다.
  3. 잠재적 성능 문제: 긴 시간이 걸리는 작업(예: 네트워크 요청)을 UI 스레드에서 동기적으로 실행하면 애플리케이션이 응답하지 않을 수 있다.

 

비동기(asynchronous)

비동기 작업은 작업을 요청한 후 그 결과를 기다리지 않고, 다른 작업을 계속해서 수행하는 방식이다. 작업이 완료되면 콜백(callback)을 통해 결과를 처리한다. 안드로이드에서는 주로 백그라운드 스레드나 비동기 API를 통해 실행된다.

특징:

  1. 논블로킹(Non-blocking): 작업이 백그라운드에서 실행되므로 다른 작업이 차단되지 않는다.
  2. 복잡한 코드 구조: 콜백, Future, Coroutine 등을 사용하여 코드 구조가 복잡해질 수 있다.
  3. 향상된 사용자 경험: 긴 시간이 걸리는 작업을 백그라운드에서 처리하여 애플리케이션의 응답성을 유지한다.
//코루틴

lifecycleScope.launch {
	val hantoService = HantoService.create()
    ...
    }

suspend 

 

: Kotlin의 suspend 키워드는 코루틴(coroutine) 함수에서 사용되며, 특정 함수가 일시 중단(suspending)될 수 있음을 나타낸다. 코루틴 함수는 비동기 작업을 더 간단하고 직관적으로 처리할 수 있도록 해준다.

 

suspend 함수의 특징

  1. 일시 중단 가능: suspend 함수는 실행 중 일시 중단될 수 있으며, 나중에 다시 재개될 수 있다.
  2. 비동기 작업 처리: 네트워크 요청, 파일 I/O, 데이터베이스 작업 등 시간이 오래 걸리는 작업을 블로킹 없이 처리할 수 있다.
  3. 코드의 가독성 향상: 비동기 코드가 동기 코드처럼 보이게 만들어 가독성을 높인다.

코틀린 코루틴으로 네트워크 통신을 요청할 때는 return 타입을 받아보고 싶은 타입으로 하고 이 함수를 suspender 함수로 선언을 해야지만 retrofit과 결합을 해서 코루틴으로 비동기적인 요청을 수행할 수 있따.

//코루틴으로 네트워크 통신을 요청할 때는 return 타입을 받아보고 싶은 타입으로 하고 비동기 함수로 선언

suspend fun getHantoInfo(@Query("info") info : String, ...) : HantoInfoResponse
반응형

'Android' 카테고리의 다른 글

Room  (1) 2024.06.04
코루틴  (0) 2024.05.24
Json / 직렬화 / 역직렬화  (0) 2024.05.16
Android 리사이클러뷰  (0) 2024.05.06
[삽질][Kotlin] Android Studio Google Social Login  (1) 2024.04.07