운기의 블로그
코루틴 - 기능 본문
이전 두편에서는 코루틴이란 무엇인지에 대해서 이름의 정의부터 알아봤다.
이번부터는 안드로이드 개발자 문서 가이드에 따라서 하나하나 알아보도록 하겠다.
안드로이드 개발자 가이드에서는 비동기 프로그래밍에 코루틴을 권장하는 이유는 4가지이다.
경량?
경량은 가벼운 무게라는 뜻을 가지고있다.
그렇다면 뭐가 가벼운지에 대해서 생각해 볼 필요가 있다.
안드로이드 개발자 가이드 문서에서 설명하기로는 스레드를 차단하지 않는 정지를 지원하므로 단일 스레드에서 많은 코루틴을 실행 할 수 있다고 한다.
여기서 중요한건
스레드를 정지하지 않고, 단일 스레드로 많은 코루틴을 실행한다는거다.
해당 문구에 대해서 알아기 위해서는 우리는 이전편에서 알았단 비동기에 대해서 알아야지 이해를 할 수 있다.
우선 기존에 비동기 처리방법에 대해서 알아보자.
일단 유저가 앱을 실행시켰을때, 어떤일이 벌어질까?
안드로이드 시스템에 있는 앱(프로그램)이 메모리에 올라가면서 프로세스가 실행된다.
위와 같은 형태로 프로세스가 실행된다.
비동기를 처리할 때 모습이다.task1과 task2는 각각의 스레드에서 작업하는데 병렬로 실행되는건 아니다. 각각의 task를 처리하기 위해서는 thread를 번갈아가면서 작업을 진행하는데 이때 contextSwitch가 발생하면서 많은 비용이들게 된다.
그렇다면 코루틴은 어떤식으로 진행될까?
코루틴에서 비동기는 하나의 테스크를 공유영역인 heap 영역에서 관리한다.
그렇기에 비동기로 처리할때,
heap영역에 있는 task를 가져다 스레드에서 사용하는데
서로 다른 2개의 작업을 하나의 스레드만으로 처리가 가능하기도 하고 여러 스레드에서 처리가 가능하기도 하다.
그래서 무슨 차이가 있다는거야??
기존의 비동기와 코루틴의 비동기의 동작 방식에 대해서 잠시 알아 봤으니
다시 안드로이드 개발자 가이드에서 설명해준 경량에 대해서 다시 보자.
기존의 비동기에서는 하나의 스레드에서 작업이 진행되면 다른 스레드에서 다른 작업을 처리했어야 했지만,
코루틴은 하나의 스레드에서도 일시정지(SUSPEND)를 통해서 해당 작업의 위치를 기억 해놓고 다른작업을 진행 할 수도 있다. 이렇게되면 기존의 컨텍스트 스위칭은 줄어들게 되고, 자원을 덜 소모하게 되고, 스택에 작업이 올라갈 필요가 없기 떄문에 메모리도 절약한다.
그렇기에 스레드를 바꿔가면서 비동기 처리하는것 보다
코루틴 자체를 바꿔가면서 처리하는게 보다 가볍다 라는걸 설명한다.
메모리 누수 감소?
기존 사용되던 asyncTask에서는 작업이 완료되거나 innerClass로 선언하고 다른 화면으로 넘어갔을때,
해제해주지 않으면 메모리에 남아 있어서 누수가 발생을 했었다.
하지만 코루틴 같은 경우에는 안드로이드 생명주기에 맞춰서 나왔기에
생명주기에 맞춰 해제 되기 때문에 메모리 누수를 줄여준다.
기본으로 제공되는 취소?
코루틴은 예외가 발생했을 때, 내부에서 예외에 대한걸 알 수 있다.
예외가 발생하면 코루틴은 자동으로 코루틴이 취소되게 되는데,
예외에 대해서 안전하게 코루틴이 취소가되면 위의 장점인 메모리누수를 줄여주는데에도 큰 도움을 준다.
JetPack 통합
jetpack 통합은 안드로이드에서 사용되는 아키텍처나 이러한 부분에 잘 사용 될 수 있도록 만들어졌다고 생각하면 될거같아서 설명은 패스하려고 한다.
이렇게 코루틴에 대해서 기본만 살펴봤다.
다음은 코루틴 사용법에 대해서 적어볼 예정이다.
'안드로이드' 카테고리의 다른 글
안드로이드 모듈 (0) | 2024.08.18 |
---|---|
코루틴 - 비동기 / 동시성 (1) | 2023.12.26 |
코루틴 - 코루틴의 뜻 (0) | 2023.12.26 |
안드로이드 - ROOM 사용하기 (0) | 2022.05.02 |
안드로이드 - tableLayout 자동 정렬 (0) | 2022.04.09 |