이 책은 모바일 시대 가장 큰 점유율을 갖고 있는 안드로이드 OS의 앱을 만들기 위한 기초를 안내하는 책이다. 다른 책은 대부분 안드로이드나 모바일의 역사 그리고 개발 환경 설정이 1장이 된다.
책의 독특함은 바로 1장부터 시작된다.
가장 첫 내용이 프로그래밍의 즐거움이라니...
1장 앱 개발을 시작하기 전에
아래의 구절로 이 책의 어떤 책이고, 어떻게 진행될지를 가늠해 볼 수 있었다.
| | |
| 이 책에서는 완성된 앱을 한 번에 만들지 않고 조금씩 개량하면서 앱을 성장시킵니다. 그래서 조금씩 변경하는 내용을 확인해 봄으로써 어떤 일이 일어나는지 1대1로 알 수 있게 구성했습니다. (p15 중에서) | |
| | |
뒤에 자세히 이야기하겠지만 정말 다른 일반 책들과 다르다.
보통 안드로이드 책이면, 위젯과 뷰, 레이아웃, 액티비티, 프레그먼트, 뷰 등의 Life Cycle을 먼저 언급할 테지만 정말 지금 만드는데 필요한 것만 언급하고 진행해가면서 설명한다.
2장 개발 환경 설정
오래된 책들은 Eclipse에 ADT 설치하는 부분도 언급되겠지만, 제목답게 JDK 설치, 안드로이드 스튜디오 설치, 개발용으로 앱을 실행할 스마트폰의 개발자 모드 활성화, 안드로이드 폰이 없는 경우를 위한 에뮬레이터 사용법만으로 간단히 끝난다.
3장 처음 만드는 안드로이드 프로그램
첫 시작은 안드로이드 스튜디오 설치하고 선택만으로 바로 만들어주는 Hello World!로 표시해주는 프로그램을 Hello New World!!로 바꾸는 쉬운 첫 변형으로 시작하고, 이를 바탕으로 출력되는 부분에 대한 변형으로 덧셈 계산하는 것을 추가한다.
일부러 오류를 내면서, 어떻게 오류를 수정하는지 알려주기 시작한다.
4장 디버깅을 해보자
보통 디버깅은 마지막에 다루는데, 다소 빠른 타이밍에, 기본 프로그램을 소개 한 후 바로 디버깅에 대한 내용을 상당 부분 할애하였다.
간단한 코드 오류부터 시작해서 안드로이드 스튜디오에서의 디버거 사용법, Watches 사용법 등을 실습하고, 전통적으로 많이 사용되는 로그을 출력하는 법, logcat을 사용하는 법과 예외 처리에 대해서도 언급한다.
메모리와 CPU 사용률 확인하는 방법까지 소개하고, 초보자들이 자주 발생시키고, 만나게 되는 R 오류에 대한 대처법이 잘 정리되어 있다.
앞에서 언급했듯이 이 책은 조금씩 개량하면서 앱을 성장시키고자 하고, 오류 등에 대한 해결 능력 또한 중요하게 생각하기 때문에 앞에 힘을 주어 설명하는 느낌이었다.
5장 채팅앱을 만들자
네트워크 통신을 하는 진짜 채팅 앱은 아니지만 사용자가 입력하는 내용을 보고 앱이 응답하는 것처럼 보이는 (심심이 같은) 앱을 만든다.
앞서 단순히 생성된 TextView가 어떻게 보이는지만 확인했지만, 이제 직접 design을 통해 레이아웃을 디자인하게 되고, 각각의 properties에 대한 설명과 설정하는 법을 배운다.
그리고 이러한 과정으로 생성된 레이아웃의 xml을 통한 추가적인 설명이 이어진다.
안드로이드 개발 서적으로는 가장 늦게 View에 설명하는 듯하지만, 이제야 View에 대한 설명이 이루어지면서, Click을 처리하기 위한 OnClickListener도 언급한다.
앞에 이야기한 응답을 구현하기 위한 특정 키워드 시간에 대한 응답, 특정 키워드 행운에 대한 랜덤 값에 대한 응답 등 안드로이드만의 특성과는 관계없는 Java 코드들이 진행된다.
(예를 들어 안녕, 피곤, 운세, 시간 등 특정 문자열이 포함되어있다면 지정된 응답을 출력하도록 만든다.)
컴퓨터의 응답이 보여질때 TranslateAnimation 추가하여 좀더 부드럽게 만들면서 채팅앱은 마무리된다.
6장 앱을 개량하자.
노골적으로 기존 앱을 개량하자고 하는 부분이다.
Asset Studio를 이용해서 기본으로 만들어지는 안드로이드 아이콘 말고 다른 아이콘으로 변경하는 법과 아이콘을 새롭게 추가함에 따라 필수로 알아야 할 dpi 개념을 설명한다.
이미지 리소스를 추가하여 개선하는 것이 아니라 안드로이드가 지원하는 다양한 drawable 중 shape 을 이용하여 디자인을 개선하고, 여백과 글자색 등을 바꾼다.
스마트폰에 비해 화면이 큰 태블릿, 패블릿에서도 좋은 디자인으로 보이는 방법(여백제거)도 소개된다.
소스나 레이아웃 내에 고정적으로 있었던 텍스트들을 리소스에 strings.xml에 등록하여, 안드로이드가 다국어 지원을 이용하는 법을 소개한다.
추가적으로 음성으로 입력받기 위해 Intent를 이용하여 음성인식할 수 있는 외부 앱을 호출하여 결과를 받아서 사용하는 법을 알려주고 있다.
음성지원을 위해서 외부 앱에서 결과를 받아 와서 처리하는 로직이 추가되어야 하는데, 추가적으로 기존 로직과 중복되므로 이를 리팩토링해서 같이 쓸 수 있도록 수정하는 법을 안내한다.
7장 벽돌깨기 게임을 만들자
흔히 알카노이드로 알고 있는 벽돌깨기 게임을 만들기 시작한다.
앞에서 언급한 내용만으로는 쉽지 않아 보였지만 화면에 표시하기 위해, canvas에 도형을 그리는 것, 사용자의 터치에 따른 처리, UI Thread와 별도로 Thread에 대한 설명이 순서대로 이어진다.
차근차근 우리가 벽돌깨기 게임을 만든다고 생각했을 때 중요하다고 한 순서대로 벽돌깨기에 관련된 벽돌 그리기, 움직이기 위한 패드 그리기, 공 그리기 등이 진행된다.
핵심적인 공의 움직임 처리, 벽돌의 없어짐, 점수 처리 및 게임을 클리어했을 때 표시될 새로운 액티비티를 생성하고(책이 거의 끝나는 지점에서야 액티비티가 하나 더 생긴다!), 해당 액티비티로 이동하는 부분을 설명하면서 Context를 설명한다.
그리고 Thread끼리의 메시지를 주고받기 위한 방법으로 Handler를 소개한다.
또한 폰의 가로 화면 모드 전환에 따라서 이를 지원하는 부분까지 설명하고, 좀 더 게임처럼 만들기 위해 효과음까지 추가합니다.
이어 진동까지 지원하면서 처음으로 퍼미션에 대한 설명을 한다.
퍼미션에 대한 설명이 책의 거의 끝에 나올 만큼 이 책은 개발이 진행되는 부분에 필요한 부분만 설명을 함을 알 수 있다.
설정을 추가하고, 스코어의 저장을 위해 SharedPreference를 사용하며 설명한다.
외부 앱에 공유를 위해 암묵적 INTENT를 이용하는 부분으로 벽돌깨기 게임은 마무리된다.
8장 앱을 공개하자
앞서 개발한 앱을 마켓에 올려서 다른 사람들도 이용할 수 있도록 하는 부분을 설명하고 있다.
이 부분은 항상 화면과 내용, 정책 등이 바뀌고 있으니 구글 플레이 스토어의 안내를 따르면 될 것이다.
이 책은 놀라운 부분은 마지막 A장 남은 과제이다.
부록 A. 예제 앱의 기능을 추가한다.
부록 B. 학습하다가 막혔을 때
저자도 해당 책으로는 완전히 안드로이드 앱 개발을 다 알기는 어렵다는 것을 알기에 짧지만 추가한 부분인 것 같은데, 앞서 만든 채팅앱과 블록깨기 게임을 어느 부분을 개선하면서 공부를 해야 할지에 대한 과제가 있어서 혼자 공부하는 분들에게 좋은 목표가 될 것이다.
결론
해당 책은 상당히 좋은 안드로이드 개발 입문서라고 생각한다. 다만, 완전히 개발 지식이 없는 초보자가 보기는 어렵다. 기본적으로 자바는 알고 보는 것이 어울리는 책인데, 중간에 책의 정갈함을 해치는 Java의 기초 부분까지 설명하는 부분이 있어서 어차피 해당 설명은 Java도 모르는 분들에게는 부족하고, 알고 있는 사람들에게는 사족이 되는 부분이라 아쉬웠다.
Java나 다른 프로그래밍언어를 다루어본 경험이 있는 분들이 안드로이드 앱 개발을 시작하고자 하는 첫 책으로 본 책을 추천한다. 이 책을 보고 난후에는 이제 자신이 뭘 모르고, 뭘 더 배워야 하는지는 알 수 있을 것이다.