안드로이드 멀티스레딩

오늘 안드로이드 멀티스레딩 책을 선물 받았다. 이 책의 제목은 “Efficient Android Threading” 이다. 번역서에 영문 제목을 그대로 사용하고 있어서 책을 받아 든 순간 원서인가? 라는 느낌을 살짝 받았다. 이 책의 제목을 굳이 번역해 보자면 “효율적인 안드로이드 스레드”라고 할 수 있겠다. 이 책의 제목만으로 안드로이드에서 스레드를 효율적으로 사용하는 기법에 대한 내용을 살펴볼 수 있을 것으로 기대하게 된다. 이 책은 처음 원서로 접했을 때도 관심이 있었고, 더욱이 같이 일하는 동료가 번역해서 더 기대하고 읽어보게 되었다.

이 책의 저자는 안데스 예란손(트위터)이고, 구글링 해보면 외부 활동을 많이 하신 분은 아닌듯 하다. 이 분의 유투브 발표영상(https://www.youtube.com/watch?v=_q12gb7OwsA)도 참고하면 좋겠다.

이 책은 2개의 파트로 크게 구분하고 있다. 첫 번째 파트는 안드로이드 프로세스와 스레드에 대한 기본 지식에 대한 내용을 살펴볼 수 있다. 두 번째 파트는 본격적으로 안드로이드 스레드와 사용방법 그리고 비교적 효율적인 방법에 대한 내용을 살펴볼 수 있다.

파트의 구성인 개별 장의 내용에 대해서 간략하게 살펴보면 다음과 같다.

1장에서 안드로이드를 구성하는 구성요소(액티비티, 브로드캐스트 리시버, 서비스, 컨텐트 프로바이더)를 살펴본다.

파트 1 : 기초
– 2~6장까지 구성되어 있고, 개별 장은 다음의 내용으로 구성되어 있다.
2장에서는 안드로이드 스레드의 기본인 자바에서 사용하는 스레드에 대해서 살펴본다. 자바 스레드에 대한 내용이 좀 부실해서 다른 책을 읽어서 잘 알아둘 필요가 있다.
3장에서는 안드로이드 프레임웍을 사용하는 앱이 사용하는 리눅스 프로세스와 스레드를 살펴본다.
4장에서는 스레드 간의 통신하는 방법으로 파이프, 공유 메모리 그리고 핸들러를 살펴볼 수 있다. 이 장에서 핸들러는 안드로이드 내부에서 일반 스레드가 UI 스레드에 데이터를 전달하는 기본 방법으로 자세히 알아둘 필요가 있다.
5장에서는 안드로이드 앱의 프로세스 간 통신 방법을 알 수 있다. RPC를 사용하는 방법
6장에서는 메모리 누수에 대한 내용을 살펴본다. 결론으로 내부 클래스는 정적으로 사용한다. 그리고 안드로이드 메모리 누수도 자바의 일반적인 메모리 누수와 같아서 자바의 메모리 누수에 대한 내용을 살펴볼 필요가 있다. 그리고 안드로이드에서 많이 발생하는 Bitmap의 메모리 누수에 대한 내용이 없는 게 아쉽다.

파트 2 : 비동기 기법
– – 7~15장까지 구성되어 있고, 개별 장은 다음의 내용으로 구성되어 있다.
7장에서는 스레드 생명주기에 대해서 살펴보고 있고, 액티비티와 프래그먼트에서 사용되는 스레드를 살펴볼 수 있다.
8장에서는 핸들러 스레드(HandlerThread)를 사용하는 형태를 확인할 수 있다.
9장에서는 Executor 프레임웍을 살펴보고 있다. 이 프레임웍은 자바 5.0에서 추가된 전형적인 생산자/소비자(Producer/Consumer) 패턴 처리를 쉽게 지원한다. 자바언어를 기본으로 동작하는 많은 환경(JVM위에서 동작하는 스크립트 언어 포함)도 병행(Concurrent) 처리를 위해서 Executor 프레임웍을 사용하기 때문에 개인적으로는 안드로이드 스레드를 이해하는데 가장 중요한 기술적 배경을 살펴볼 수 있다.
10장에서는 AsyncTask에 대한 내용을 살펴보고 있다. 이 클래스는 사용하기 편리해서 안드로이드 앱이 비동기로 태스크를 처리하는 데 가장 많이 사용되고 있다. 가장 많이 사용하고 있는 이 클래스는 잘 알아둘 필요가 있다.
11장에서는 서비스.
12장에서는 인텐트 서비스.
13장에서는 AsyncQueryHandler.
14장에서는 로더(Loader)를 살펴보자. 로더는 허니콤 이후에 추가된 클래스로 기존에 사용하던 비동기 태스크를 액티비티나 프레그먼트의 생명주기와 같이 연동해서 사용하는 방법에 대해서 살펴볼 수 있다.
15장에서는 비동기 기술을 어떻게 선택할 것인지를 확인할 수 있다. 이 장의 내용은 좀 추상적인 면이 있어서 안드로이드에서 여러 가지 스레드 사용을 경험해 보고 상황에 맞는 스레드를 사용하면 되겠다. 개인적으로는 로더와 AsyncTask를 같이 사용해서 비동기 태스크를 처리하는 걸 추천한다.

이 책의 장단점을 살펴보자.

장점
이 책은 앱을 더 잘 만들 수 있는 안드로이드 스레드의 기본과 +알파를 제공한다.
많은 안드로이드 책들이 UI를 기준으로 쓰여 있어서 UX를 잘 만들기 위한 성능 개선에 대한 내용은 쉽게 접하기 힘든 부분이라서 이 책에 대한 내용이 매우 좋다.

단점
안드로이드 스레드를 사용하는 기본 내용에 충실하게 내용을 기술하고 있다.
제목에 걸맞는 “효율적인 안드로이드 스레드”에 대한 내용은 약간 부족하지 않나 싶다.
편집이 약간 아쉽다.

이 책은 처음부터 읽는 것을 추천하지만, 개인적으로는 11, 12, 13 그리고 15장은 해당 구성요소를 사용하거나 AsyncQueryHandler를 사용하는 경우에 읽어봐도 무방할 것으로 본다.

이 책을 읽으시는 초보 개발자분은 자바 스레드 책과 같이 읽어보면 좋을 것 같다.
그리고, 중/고급의 개발자에게는 다시 한번 안드로이드 앱이 동작하는 프로세스/스레드에 대한 기본 지식과 안드로이드 스레드를 잘 사용하기 위한 지식을 다시 한번 생각해 볼 수 있어서 좋을 것 같다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.