오늘은 안드로이드에서 지원하는 코루틴이라는 것에 대해 알아볼 것이다.
코루틴이란?
백그라운드에서 사용하는 스레드를 조금더 가볍게 사용할 수 있게 하는 기능
코루틴은 스레드 안에서 스레드와 비슷한 개념으로 코루틴을 동작 하는 것으로 같은 동작을 멀티 스레드만으로 구현한 것보다 하나의 스레드 안에서 여러 코루틴으로 설정하는 것이 훨씬 (컨텍스트 스위칭 측면에서)효율적이다.
코루틴 사용 방법
스레드에서 Thread(start=true)로 시작하는 것 처럼 코루틴은 GlobalScope.launch를 사용해 실행 할 수 있다.
코루틴 스코프의 종류
글로벌 스코프: 앱의 생명주기와 함께 동작한다. 장기간 실행되어야하는 일을 수행할 때 사용한다.
코루틴 스코프: 서버 정보를 가져오거나 파일을 여는 용도를 사용할 때(ex 버튼클릭시)처럼 짧게 사용하고 마는 것은 CoroutineScope(Dispatchers.IO)를 사용한다.
코루틴 스코프에는 위에처럼 디스패쳐라는 것을 괄호안에 입력해야한는데 이는 스레드를 지정해서 사용할 수 있게 한다.
Thread Dispatchers
Dispatchers.Main
메인 쓰레드, 화면 UI작업을 할 때 사용한다. handler와 비슷하다.
Dispatchers.IO
네트워크, DB 등 백그라운드에서 필요한 작업을 할 때 사용한다.
주로 이미지 다운로드, 파일 입출력에 최적화 되어 있다.
Dispatchers.Default
정렬이나 여러 복잡한 계산 작업을 할 때 사용한다.
CPU를 많이 사용하는 작업을 사용할 때 사용하고 안드로이드의 기본 Thread Pool을 사용한다.
코루틴 사용 방법 및 상태 관리
코루틴은 두가지 방법으로 코루틴 스코프 내에서 사용할 수 있다.
launch
실행만하고 결과는 반환하지 않는다.
join을 통해 완료 대기를 할 수 있다.
async
결과나 예외를 반환한다.
코루틴 스코프 안에 사용하여 변수에 값을 저장하고 변수명.await() 함수를 이용해 결과 처리가 완료되면 출력하겠끔 지정할 수 있다.
상태 관리 함수
cancel
코루틴의 동작을 멈추는 상태 관리 메소드이다. 해당 스코프에 있는 모든 코루틴의 동작을 멈추게 한다.
join
하나의 코루틴 스코프 안에 선언된 여러 launch 블록이 있으면 동시에 처리 되어 순서를 정할 수 없다. 이럴 경우 join()을 사용해 분기 처리를 할 수 있다.
suspend
suspend 키워드로 작성된 함수를 코루틴 스코프 안에서 사용하면
중간에 suspend 함수를 호출하면 현재 코루틴안에서 작동 되던 것은 잠시 멈추고 suspend 함수가 종료되면 다시 이어서 실행 한다.
코루틴 참고 자료 : https://todaycode.tistory.com/23
코루틴 VS 쓰레드 참고자료 : https://aaronryu.github.io/2019/05/27/coroutine-and-thread/
오늘은 안드로이드에서 거의 필수로 사용되는 코루틴에 대해 정리해 보았다. 스레드에 대한 개념이 있으면 이해하고 사용하기 쉬운 개념인 것 같다.
'android' 카테고리의 다른 글
Android - 리사이클러뷰 뽀개기(2) - 리사이클러뷰 아이템 클릭이벤트, CRUD (0) | 2022.10.27 |
---|---|
Android - 리사이클러뷰 뽀개기(1) - 리사이클러뷰 사용법 (0) | 2022.10.24 |
Android Manifest 와 4대 컴포넌트 (0) | 2022.10.02 |
Kotlin 추상화 & 상속 (1) | 2022.09.08 |