Android, Coroutine이란?

이도현·2023년 8월 13일
0

Android 공부

목록 보기
20/30

0.개요

안드로이드를 공부하며 Coroutine이란 키워드가 자주 발견되었다. 궁금해서 알아보기로 했다.

1. Couroutine이란

  • 일종의 가벼운 스레드로 동시성 작업을 간편하게 처리하게 해줄 수 있게 해주는 역할,
  • 안드로이드 개발에서는 코틀린 코루틴을 통해 UI스레드가 중단되는 문제를 효율적으로 처리
  • 스레드: 프로세스 내에서 실제로 작업을 수행하는 주체

1) Coroutine 정의

  • together를 뜻하는 co와 집합을 뜻하는 Routine이 합쳐져 만들어진 단어, 한국어로 '협동 루틴'이라고 표현하기도 한다. 1958년 도널드 커누스가 자신의 어셈블리 프로그램에 적용하면서 시작

2) 특징

  • 비동기 작업 및 이벤트 루프 등 다양한 프래그래밍 요소에 적용
  • 이전에 실행이 중단된 지점에서 다시 실행을 재개할 수 있는 기능을 가지게 함.

3) Android, Corotuine

  • 구글에서 안드로이드 개발 시 코틀린 코틀린 적용을 권장
  • 장시간 작업으로 인한 메인ㅇ 스레드 블로킹 현상을 줄일 수 있으며, 비동기 작업 중 예외 발생에 따른 메모리 누수르 방지할 수 있기 때문이다.

4) 코틀린 코루틴의 개념

  • 코틀린 스코프: 코루틴이 실행되는 영역,(MainScope, GlobalScope, 별도로 지칭한 Coroutine Scope)

  • 코루틴 컨텍스트: key와 element를 갖는 map,element는 코루틴 컨텍스트의 서브타입으로 Job, Deferred, dispatcher등이 들어감

    코루틴 취소와 같은 작업을 간단히 처리

  • 코루틴 빌더: 코루틴을 생성하는 메서드를 의미(launch, async, withContext, runBlocking 등)

5) Suspend 키워드

코틀린 코루틴에서는 데이터베이스 또는 네트워크 작업 같은 Lon-running tasks에 대해 간편한 코드를 작성할 수있게 해줍니다. 비동기 콜백(async callbacks)작업을 순차적 코드(sequential code)로 간단하게 작성할 수 있다는 장점이 있다.
suspend 키워드를 함수 앞에 기재하여 코루틴이 적용되었다는 것을 명시
코틀린 코루틴 이전의 스레드나 콜백함수를 이용하여 처리, 예외 처리 및 콜백 지옥과 같은 문제에 봉착, suspent를 함수 앞에 붙이는 것으로 순차코드를 작성하듯이 짤 수 있다.

6) 사용방법

GlobalScope.launch(Dispatchers.Main){
	val data1 = async(Dispatchers.Default){
    	fetchData(1)
    }
    val data2 = async(Dispatchers.IO){
    	getchData(2)
    }
    CheckUsers(data1.await(), data2.await())
}

3. 안드로이드 코틀린 코루틴의 안티패턴

1) Asynce-style Functions

  • Asyn메소드를 정의한 코드를 일반 함수로 만들어 재사용하는 것을 말한다.
  • 만약 위와 같이 만든 코드를 main에서 사용한다면 예외상황에도 비동기 작업이 취소되지 않아 메모리 누수가 발생한다.

2) Structured Concurrency

  • Async-style Functions가 가지고 있는 문제를 해결하기 위해서 Structured Concurrency 처리를 권장, suspent함수를 조립해서 사용

4. 학습후기

사실 프로젝트를 끝내고 새로운 것을 개발하며 더 학습하려고 했다. 근데 Corotuine을 학습하며 생각에 변화가 생겼다. 나는 프로젝트를 진행하며 suspend와 Globalscope와 마주한적이 있으며 '아 이게 뭐야 모르는 거잖아'하며 다른 방식으로 프로젝트를 진행했다. 젖소코딩이며 반성해야한다. 만든 어플에대한 기능단위로 코드리뷰를 해봐야겠다.

profile
좋은 지식 나누어요

0개의 댓글