Table of contents
Open Table of contents
코틀린 코루틴을 배워야하는 이유
안드로이드에서 코루틴 사용
안드로이드에서는 뷰를 다루는 스레드가 단 하나만 존재합니다.
이 스레드는 앱에서 가장 중요한 스레드라 블로킹되면 안 됩니다.
블로킹이 가능한 스레드를 먼저 사용하고 이후에 메인스레드로 전환합니다.
하지만 이 방식은 문제가 있습니다.
- 스레드가 실행되었을 때 멈출 수 있는 방법이 없어 메모리 누수로 이어질 수 있습니다.
- 스레드를 많이 생성하면 비용이 많이 듭니다.
- 스레드를 자주 전환하면 복잡도를 증가시키면 관리하기도 어렵습니다.
- 코드가 쓸데없이 길어지고 이해하기 어려워집니다.
뷰를 열고 재빨리 닫으면 뷰가 열렸을 때 데이터를 가져와 처리하기 위해 스레드가 다수 생성됩니다. 생성된 스레드를 제거하지 않으면 스레드는 주어진 작업을 수행할 후 더 이상 존재하지 않는 뷰를 수정하려고 시도할 것입니다.
콜백
- 콜백의 기본적인 방법은 함수를 논블로킹으로 만들고 함수의 작업이 끝났을 때 호출될 콜백함수를 넘겨주는 것입니다.
- 콜백을 이용해 구현한 방식 또한 중간에 작업을 취소할 수 없습니다.
- 취소할 수 있는 콜백함수를 만들 수도 있지만 쉬운 일은 아닙니다.
스레드의 비용 문제
대부분 스레드 스택의 기본 크기는 1MB입니다. 자바 최적화 덕분에 스레드의 메모리를 사용량이 1MB에 반드시 비례하지는 않지만, 스레드를 만들 때마다 여분의 메로리를 더 많이 사용하게 됩니다.
스레드의 비용 문제는 10만 명의 사용자가 데이터를 요청하는 백엔드 서비스를 모식화한 다음 코드를 통해 살펴볼 수 있습니다.
- 10만개의 스레드를 만들고 1초 동안 잠을 자게 만듭니다.
- 이 프로그램을 실행시키면 상당한 시간이 걸리거나 OutOfMemoryError 예외로 프로그램이 종료되는 것을 볼 수 있습니다. → 많은 수의 스레드를 실행하는데 드는 비용이 크기 떄문입니다.
코루틴
- 스레드를 재우는 대신 코루틴을 중단시킵니다.
- 1초 기다린 뒤에 모든 점을 출력하게 됩니다.