Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

운기의 블로그

코루틴 - 코루틴의 뜻 본문

안드로이드

코루틴 - 코루틴의 뜻

운띠야 2023. 12. 26. 17:48

처음 코루틴을 봤을 때 

안드로이드 개발자 가이드 문서에서는

개발자 가이드 문서에서 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해
Android에서 사용할 수 있는 동시 실행 설계 패턴이라고 설명한다.

 

코루틴의 장점

  1. 경량 : 코루틴을 실행 중인 스레드를 차단하지 않는 정지를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다.
    정지는 많은 동시 작업을 지원하면서도 차단보다 메모리를 절약합니다.
  2. 메모리 누수 감소 : 구조화된 동시 실행을 사용하여 범위 내에서 작업을 실행합니다.
  3. 기본으로 제공되는 취소 지원 : 실행중인 코루틴 계층 구조를 통해 자동으로 취소가 전달됩니다.
  4. jetPack 통합 : 구조화된 동시 실행에 사용할 수 있는 자체 코루틴 범위도 제공합니다. 

라고 설명되어 있다.

 

스레드를 차단하지 않는 정지?

단일 스레드에서 많은 코루틴 실행?

스레드랑은 다른 개념인지?

 

스레드랑 다른데 어떻게 비동기 처리를 하는지 정말 모르겠다...


Coroutine 이란 ?  

문서에 적힌 내용을 이해하기 위해서

비동기가 무엇인지 ?
동시 실행 설계 패턴 ?

 

이 무엇인지에 대해 순차적으로 알아보고 왜 저런 장점이 있는지에 대해서 적어보려고 한다.

우선 코루틴이 무엇인지 부터 시작한다.

 

코루틴 뜻

Coroutine = co + routine
협력 + 작업

 

많은 글을 찾아보고 이해하려고해도 이렇게만 설명해서는 도저히 무슨 뜻인지 이해가 되지 않아서 루틴에 대해서 좀 더 알아봤다.

컴퓨터 언어에서 루틴은 하나의 작업 블록을 의미했고, 메인 루틴과 서브 루틴으로 구성되어져있다.

 

메인 루틴이란? 

main 함수에 의해서 실행되는 프로그램의 흐름

 

서브 루틴이란?

메인 루틴에서 호출되어 부분적으로 실행되는 코드 블록이라고 생각하면된다.

간단한 예시로는 함수나 메서드를 의미한다.

위의 이미지를 통해서 확인해보자

 

안드로이드에서는 메인 액티비티가 실행되면서 각각의 생명주기가 호출되는데 이러한 생명주기도 서브루틴에 속한다고 보면된다.

그리고 이러한 생명주기를 일련의 흐름으로 실행시켜주는 흐름을 메인 루틴이라고 보면된다. 

 

그러면 코루틴은 뭐야??

 

위에서 본 코루틴은 협력하는 하나의 작업블록이라고 했고, 메인 루틴이 아닌걸 봐서는 서브 루틴에 가깝다는걸 알 수 있다. 

그러면 왜 코루틴은 서브루틴과 어떤 차이점이 있어서 따로 독립적인 용어가 생겨난 것일까?

 

서브 루틴

 

서브루틴들은 진입이 가능한 지점과 마무리되어 나오는 지점이 명확하게 존재한다.

함수를 호출하는 지점과, 리턴 되거나 함수가 끝나는지점은 각각 하나의 진입점과 나오는 점이 존재한다.

여기서 코루틴과 서브루틴의 큰 차이가 난다. 

코루틴

코루틴은 서브루틴 처럼 진입하는 지점도 끝나는 지점도 존재한다. 

하지만 큰 차이점은

진입 후에 멈추고 다른 루틴을 진행하다가 다시 멈춘 지점에 돌아와서 실행 할 수 있다는 점이다.

 

위의 이미지를 보면

suspend를 선언하면서

task1로 진입 했다가 delay를 만나서 task1을 나가고

task2를 실행하고

이전에 task1에서 멈췄던 지점으로 돌아가서 다시 task1을 처리하게된다. 

 

위와 같은 동작이 코루틴이라는 용어를 가장 잘 표현하면서 가장 큰 장점이라고 생각한다.

 

1부는 여기서 마감 

2부에서는 비동기와 코루틴에 대해서 적어보도록하겠습니다~

 

'안드로이드' 카테고리의 다른 글

코루틴 - 기능  (1) 2024.01.01
코루틴 - 비동기 / 동시성  (1) 2023.12.26
안드로이드 - ROOM 사용하기  (0) 2022.05.02
안드로이드 - tableLayout 자동 정렬  (0) 2022.04.09
안드로이드 - SharedPreference  (0) 2022.04.08