책 소개
앱 인벤터(App Inventor)는 프로그래밍을 모르는 사람들도 안드로이드 앱을 쉽게 만들어서 마켓에 배포할 수 있도록 구글과 MIT가 공들여 만든 작품이다. 뛰어난 아이디어, 재미있고 실용적인 아이디어가 프로그래밍이란 장벽 때문에 구현되지 못한 채 사라지는 일만큼 슬픈 일도 없을 것이다. 앱 인벤터에서 제공하는 퍼즐 블록을 마우스로 끌어와서 끼워 맞추는 식으로 앱을 만들다 보면, 전문 프로그래머들이 구현하는 앱과 비교해도 전혀 손색이 없는 기능을 구현할 수 있다. 풍부한 예제와 그림이 들어간 자세한 설명은 독자를 단 일주일 만에 안드로이드 앱 개발자로 만들어줄 것이다.
[ 이 책에서 다루는 내용 ]
■ 앱 인벤터 설치 및 환경 설정
■ 현대적이고 매력적인 UI 제작
■ 카메라 등 안드로이드 미디어 하드웨어 다루기
■ TinyDB와 TinyWebDB로 로컬 디스크나 클라우드에 데이터 저장
■ 전화, 문자, 이메일 자동화
■ 지리적 좌표, 가속도, 방향 추적
■ 앱에 음성 인식(TTS와 STT) 기능 삽입
■ ActivityStarter를 통해 다른 앱과 웹 서비스 제어
■ Web API로 데이터 교환하여 모바일 매시업 구축
■ 안드로이드 에뮬레이터를 통해 다양한 스마트폰에서 앱 테스트
■ 멀티미디어 센터, 온라인 어휘 학습기, 핸드페인팅, 스쿼시 게임, 나침반,
보물 찾기, 내비게이터, 주식 뉴스 알림 등의 풍부한 예제 제공
이 책은 안드로이드 앱 개발 방법을 탐구하고 실험하면서 개발 실력을 쌓아, 전문가 수준의 앱을 만들 수 있게 자신감을 불어넣어 줄 것이다.
[ 이 책의 구성 ]
1부: 첫 번째 앱 준비하기
개발에 필요한 소프트웨어를 설치하는 방법은 없다. 1장 ‘설치 및 준비 과정’에서 몇 번에 걸쳐 따분한 작업을 수행할 수 있게 안내해줄 것이고, 컴퓨터의 시스템 환경 변수를 설정하거나 앱 인벤터 설치 프로그램을 다운로드하고 설치하고 온라인 개발 플랫폼을 사용하기 위한 의무 등록 과정을 따라 가거나 독자의 스마트폰에 개발 관련 인자들을 설정하는 등 복잡한 작업도 해야 한다. 설치가 성공적으로 끝난 다음, 2장에서는 앱 인벤터 사용법과 응용 범위를 배우고 앱 인벤터의 두 가지 개발 도구인 Designer와 Editor에 대해 알아볼 것이다. 또한 어떻게 스마트폰을 개발 환경에 적용할지 소개하고 초기 앱을 개발할 때 문제가 발생하면 어떻게 해결해야 하는지 알아보겠다. 3장에 들어가면 앱 개발을 본격적으로 시작한다. 즉 독자가 직접 UI를 개발하고 래프백(LaughBag)이라는 첫 번째 앱을 만들어 본다. 앱에 기본으로 제공되는 커스텀 아이콘을 추가한 다음에는, 스마트폰에 앱을 설치할 때 APK 파일 형태로 내보내거나 스마트폰에 직접 설치할 수 있음을 배우게 된다. 이러한 정보는 이후에 나올 모든 프로젝트에 기본으로 적용된다.
2부: 몸풀기 단계로 시작하는 간단한 프로젝트
두 번째 앱을 개발하기 전에 4장에서 이벤트와 메소드, 속성 등 주요 개념을 소개한다. 5장에서는 현재 존재하는 컴포넌트와 블록, 앱 인벤터의 개념과 이후에 포함될 예정인 항목들에 대해 다룬다. 이러한 기본 사항들을 다룬 후에 6장에서 Designer를 통해 데모용 앱의 UI를 생성하여 버튼, 텍스트 박스, 체크박스 등 능동적으로 컴포넌트를 사용하는 방법에 익숙해지게 할 것이다. 7장에서는 멀티미디어와 관련된 주제로 그와 관련된 컴포넌트를 다루면서 사진 찍기 기능을 살펴보고, 음성 녹음 기능과 오디오와 비디오 파일을 재생하며, 진동 기능까지 다룬다. 8장에서는 미디어 센터의 형태, 즉 시각적으로 정교하고, 인체공학적으로 설계된 멀티스크린 미디어 앱이 되도록 앞서 만든 데모 프로젝트의 기능을 확장한다.
3부: 앱 개발자가 되기 위한 과정
그래픽적으로 다채로운 화면을 갖도록 UI와 멀티미디어 기능을 다뤄보고 앱 인벤터의 컴포넌트를 사용해서 얼마나 쉽게 앱을 개발할 수 있는지 어느 정도 감을 잡았으니 9장부터는 좀 더 심화단계로 블록과 블록 구조를 살펴보면서 앱 개발 방법을 공부한다. 총체적으로 전 과정을 훑어보면서 데이터 타입, 데이터 구조, 컨트롤 구조에 대한 핵심 세부 사항들을 알아 봄으로써 독자는 앱 인벤터의 모든 기능을 구현할 수 있을 것이다. 빠르게 구현해보는 앱을 통해 어떻게 색상을 만들고 숫자를 처리하며 각 로직의 진행 단계별 상태를 검사하는지, 그리고 텍스트와 문자열 수정, 변수와 프로시저, 리스트의 사용법, 분기문과 순환문을 통해 프로그램 진행 흐름을 제어하는 방법을 공부한다. 그다음은 앱 인벤터의 Editor 컴포넌트와 관련된 토론을 하면서 프로그램 개발과 관련된 팁을 알아보고 기본적인 계산기나 숫자 추측 게임, 어휘 훈련 앱 등을 구현할 것이다. 10장에서는 데이터를 로컬 저장소나 온라인상의 웹 서버에 저장하고, 저장된 데이터를 불러오는 방법을 알아볼 것이다.
4부: 매력적인 앱 개발
앞에서 새롭게 공부한 개발자 비법을 토대로, 이번에는 정말 재미있고 도전해볼 만한 개발 영역에 대해 다룬다. 11장 ‘그래픽과 애니메이션’에서는 다소 고급 주제에 속하지만 앱 인벤터로 쉽게 처리할 수 있는 그래픽과 애니메이션을 다룬다. 이 주제를 간단히 소개한 후, 독자는 손가락을 사용해 스마트폰에서 오브젝트를 그릴 수 있는 (취소 기능이 포함된) 드로잉 앱을 개발한다. 다음은 현실적인 움직임을 시뮬레이션하기 위해 오브젝트에 애니메이션 효과를 주고 충돌을 인식하는 방법을 배운다. 새롭게 배운 이론을 토대로 실전 예제들을 훈련하도록, 점수 기록 기능이 있고, 난이도가 변하는 2D 스쿼시 게임을 만들어 본다. 또한 손가락으로 키 프레임 애니메이션 경로를 그리는 앱을 개발하기 위해 모든 종류의 타이머 이벤트를 사용하는 방법을 배우고 스마트폰이 대기 모드여도 알람 시계 앱이 동작하게 만든다.
12장 ‘센서’에서는 숙련된 개발자들조차 낯설게 느낄 수도 있는 주제를 다룬다. 여러 가지 센서의 기능에 대해 자세히 알아보고, 무엇보다도 독자의 앱과 스마트폰 센서를 통합하는 방법을 공부한다. 위치 센서와 방향 센서로 측정을 해보고 이를 토대로 그래픽 나침반 바늘 또는 그래픽 수평계 기능을 갖춘 완전한 형태의 나침반 앱을 구현한다. 가속도 센서를 통해 악기의 민감도를 슬라이더 막대를 통해 조절하는 악기인 셰이커를 개발하고, 게다가 고전적인 밸런스 게임인 라비린스(Labyrinth)와 비슷한 맥락의 게임을 개발해본다. 위치 기반 서비스가 인기를 얻는 추세를 따라, 실시간으로 온라인 서버에 경로 프로파일을 기록할 수 있는 지오트래커(Geotracker)를 개발해보고, 앱과 GPS 센서를 연동하는 방법뿐만 아니라 보물이 놓인 방향과 거리를 표시하는 나침반을 갖춘 보물찾기 앱을 개발하는 방법도 공부한다.
물론, ‘고전’인 통신 영역도 빼먹지 않고 다룬다. 13장에서는 통신 관련 기능 영역을 통해 작동하는 규모가 크면서도 실무에 도움이 되는 마지막 프로젝트 ‘운전자 보조 시스템’을 다룬다. 동시에 전문적인 개발자들이 걸어온 길을 따라 이 프로젝트를 개발하는 데 필요한 요구사항 및 작업 단계를 모듈화하여 분석하고 구현한다. 먼저, 다중화면을 갖는 친숙한 인터페이스와 함께 바로 가기 연락처를 통해 전화를 거는 모듈을 통합한다. 그 다음은 SMS 응답 메시지와 완전 자동 수신 모듈을 개발한다. 이 모듈은 음성 인식 기능을 통해 텍스트 음성 변환 옵션으로 수신한 SMS 메시지를 큰 소리로 읽고 SMS 메시지를 전송하도록 지시한다. 13장에서는 모든 개발 언어의 기능 범위를 확장하고 앱에 외부 서비스를 통합할 수 있도록 액티비티 스타터라는 컴포넌트의 핵심 인터페이스의 개념을 소개한다. 이 인터페이스를 써서 다른 앱과 웹 서비스를 호출하고 통합한다. 다양한 모듈을 다뤄보면서, 각 모듈을 담당하는 여러 가지 버튼 중 하나를 눌러 구글 내비게이션(Google Navigation)을 호출해 자동차로 운전하여 집이나 사무실로 가는 길을 탐색하거나 자동차를 주차한 위치로 돌아가는 일을 도와주도록 앱과 구글 지도(Google Maps)를 통합하는 방법을 배운다. 이메일을 보내는 모듈을 사용하여, 지인을 데리러 가는 동안 운전자의 현재 위치와 도착 시간을 알려줄 수 있다.
마지막으로 앱 인벤터의 웹 컴포넌트를 기반으로 하는 다른 주요 인터페이스를 소개하여 웹 서비스에서 제공하는 API를 통해 데이터를 교환하는 방법을 공부한다. 앱 인벤터 WebViewer 구성 요소를 사용하여 야후와 피드질라(Feedzilla)에서 제공하는 웹 API에 실시간으로 데이터에 접근해 원래의 전체 뉴스 기사(Full-Text)를 담고 있는 사이트 화면을 직접 표시하고 최신 뉴스 및 주식 데이터와 주식 상장 가격을 보여주는 모듈을 구현함으로써, 정보 매시업(mashup)을 개발하는 방법에 대해 자세하게 살펴본다. 이러한 기능은 보조 시스템에 필요한 완전한 모듈들을 모두 탑재한 ‘운전자 보조 시스템’ 앱을 매일 사용할 수 있게 해준다.
5부: 개발자가 알아두면 유용한 사항들
숙련된 개발자(1장부터 13장까지 공부하고 나면 스스로 이렇게 생각하게 될 것이다)라도 기술 트렌드를 따라잡기 위해 항상 새로운 분야를 공부한다.
14장 ‘특수 기능’에서는 온라인 투표, 바코드 스캔, 트위터와 통신하기 위한 트위터 컴포넌트 또는 구글의 온라인 데이터베이스인 퓨전 테이블(Fusion Table)을 사용하기 위한 앱을 대상으로 한 앱 인벤터의 특수 컴포넌트를 다룬다. 이 장에서는 또한 온라인 멀티플레이어 게임을 개발하고, 레고 마인드스톰 세트에서 로봇을 제어하며 블루투스를 통해 데이터 교환 방식, 그리고 자바 브릿지를 통해 자바로 개발된 앱과 앱 인벤터를 통합하는 특수 컴포넌트 그룹의 개요를 다룬다.
15장 ‘도구와 팁’에서는 앱 인벤터와 안드로이드에서 지원하는 미디어 포맷에 대해 공부하며 자바 콘솔을 이용한 디버깅 작업, 음성 모듈을 설정하는 데 필요한 정보 등 유용한 내용을 제공한다.
부록에서는 수많은 프로젝트와 미디어 및 지원 사이트에서 다운로드 가능한 APK 파일에 대해 설명하고, 이 책에서 소개하지 못한 흥미로운 추가 정보를 얻을 수 있는 링크를 수록했다.
[ 추천의 글 ]
1980년대를 기점으로 개인용 컴퓨터가 널리 보급됐다. 그러나 오늘날 모바일 애플리케이션은 결코 과거처럼 ‘개인적인 용도’로 컴퓨팅 리소스를 사용하지 않는다. 우리는 스마트폰과 태블릿 등 새로운 디바이스를 손에서 놓지 않고 항상 지니고 산다. 더 중요한 점은 개인용 디바이스를 통해 ‘서로에 대해’ 점점 깊은 관계를 맺는다는 점이다. 어디서 일하는지, 좋아하는 게 뭔지, 무엇을 구입하는지, 친구가 누군지, 어디에 살고 무슨 얘기를 하는지, 누구와 얘기하는지, 누구에 대해 얘기하는지 등 모든 게 공개되고 있다. 이러한 사적인 컴퓨팅은 근본적으로 1950년대부터 텔레비전이 그랬던 것처럼 우리의 경험과 우리가 살고 있는 세계에 대한 인식을 바꾸고 있으며, 전 세계의 데이터 서비스와 정보 소스에 연결되어 있다.
텔레비전은 수동적인 소비자 기술(consumer technology)이다. 누구나 TV를 즐길 수 있지만, 전문적인 생산자들이 제공하는 다양한 컨텐츠 중 원하는 프로그램을 선택하는 것 이외에 TV를 개인적인 용도에 맞게 조정하는 방법은 없었다. 우리 모두가 전문 개발자가 제공한 미리 정의된 애플리케이션 중에서만 제품을 골라야 하는 측면에서 볼 때, 모바일 컴퓨팅도 텔레비전과 시청자 간 구조와 비슷한 양상을 보여줄 것이다.
구글에서 앱 인벤터를 만들었을 때, 실제로 전문 프로그래머가 될 필요 없이 자신과 자신의 친구와 관련된 애플리케이션을 개발하게 함으로써 모바일 컴퓨팅을 개인적인 용도에 특화할 수 있는 개인 컴퓨팅 기술로 만들어 보자는 생각을 함께 갖게 되었고, 이러한 생각이 동기가 되어 서비스 구축을 시작했다. 아마도 독자가 앱 인벤터에 관심을 갖게 된 것은 특별한 목적을 달성할 수단으로 앱을 만들고 싶었거나 컴퓨터에 대해 좀 더 실무적인 공부를 하려 한다거나 아니면 앱을 배포 및 판매하거나 혹은 정말로 그저 재미 삼아 만들어 보고자 할 수도 있다.
앱 인벤터는 2010년 12월을 기점으로 누구나 사용할 수 있게 개방되었다. 아직 개발 중인 베타 버전 시스템으로, 구글 팀은 지금의 앱 인벤터를 더 강력하고 사용하기 쉽게 만들기 위해 최선을 다하고 있다. 그러나 이미 개인적인 용도로 앱을 만들거나 모험을 해보기 위해 모여든 모든 연령의 앱 인벤터 사용자들이 커뮤니티를 만들어 운영하고 있으며 점차 규모도 커지고 있다. 사람들이 만드는 애플리케이션 중 일부는 다음과 같은 용도로 쓰인다.
■ 레고 로봇을 제어하는 컨트롤러
■ 자녀에게 독서와 수학을 가르치기 위한 앱
■ 의학 전공 서적의 참고 정보를 제공하는 가이드
■ 선물 카드를 보내서 감사를 표현하기 위한 앱
■ 상용 자동차 회사 근무자들이 재고 물품을 기록하기 위한 앱
■ 다양한 종류의 게임
독자도 이와 같은 애플리케이션을 만들 수 있으며, 이 책은 구글 웹사이트에서 앱 인벤터를 실행하고 스마트폰을 연동해서 앱을 개발하는 데 필요한 기초 지식을 제공하려는 목적으로 집필했다. 앞으로 이 책이 제시하는 방향에 따라 가속도 센서, 방향 및 위치 센서도 사용해 볼 것이다. 이 책을 공부하면서, 텍스트와 데이터를 조작하며 이미지와 애니메이션 작업까지 지원하는 앱을 만드는 방법에 대해 확실한 지침을 얻을 수 있을 것이다. 전화를 걸거나 온라인 데이터베이스를 조작하는 방법, 카메라를 제어하는 방법도 배울 것이며, 게임 제작 방법과 문자 메시지를 송수신하는 방법, 지도를 읽어와 처리하는 방법까지 공부할 것이다. 각 주제마다 작업 예제 프로그램과 철저한 설명을 덧붙였다.
이 책을 시작으로 독자는 모바일 앱을 설계하는 개발자가 될 수 있을까? 아마도 그럴 것이다. 그렇지 않다 해도, 독자는 이 책을 통해 우리의 삶에 있어 점점 더 핵심적인 역할을 하는 모바일 컴퓨팅 기술을 바탕으로 창의적인 개발자가 될 수 있을 것이다.
- 핼 에이벌슨(MIT 대학 전기공학 및 컴퓨터과학부 교수, 구글 앱 인벤터 팀의 핵심 멤버이자 MIT 모바일 학습 센터의 총책임자)
[ 이 책에서 다루는 내용 ]
■ 앱 인벤터 설치 및 환경 설정
■ 현대적이고 매력적인 UI 제작
■ 카메라 등 안드로이드 미디어 하드웨어 다루기
■ TinyDB와 TinyWebDB로 로컬 디스크나 클라우드에 데이터 저장
■ 전화, 문자, 이메일 자동화
■ 지리적 좌표, 가속도, 방향 추적
■ 앱에 음성 인식(TTS와 STT) 기능 삽입
■ ActivityStarter를 통해 다른 앱과 웹 서비스 제어
■ Web API로 데이터 교환하여 모바일 매시업 구축
■ 안드로이드 에뮬레이터를 통해 다양한 스마트폰에서 앱 테스트
■ 멀티미디어 센터, 온라인 어휘 학습기, 핸드페인팅, 스쿼시 게임, 나침반,
보물 찾기, 내비게이터, 주식 뉴스 알림 등의 풍부한 예제 제공
이 책은 안드로이드 앱 개발 방법을 탐구하고 실험하면서 개발 실력을 쌓아, 전문가 수준의 앱을 만들 수 있게 자신감을 불어넣어 줄 것이다.
[ 이 책의 구성 ]
1부: 첫 번째 앱 준비하기
개발에 필요한 소프트웨어를 설치하는 방법은 없다. 1장 ‘설치 및 준비 과정’에서 몇 번에 걸쳐 따분한 작업을 수행할 수 있게 안내해줄 것이고, 컴퓨터의 시스템 환경 변수를 설정하거나 앱 인벤터 설치 프로그램을 다운로드하고 설치하고 온라인 개발 플랫폼을 사용하기 위한 의무 등록 과정을 따라 가거나 독자의 스마트폰에 개발 관련 인자들을 설정하는 등 복잡한 작업도 해야 한다. 설치가 성공적으로 끝난 다음, 2장에서는 앱 인벤터 사용법과 응용 범위를 배우고 앱 인벤터의 두 가지 개발 도구인 Designer와 Editor에 대해 알아볼 것이다. 또한 어떻게 스마트폰을 개발 환경에 적용할지 소개하고 초기 앱을 개발할 때 문제가 발생하면 어떻게 해결해야 하는지 알아보겠다. 3장에 들어가면 앱 개발을 본격적으로 시작한다. 즉 독자가 직접 UI를 개발하고 래프백(LaughBag)이라는 첫 번째 앱을 만들어 본다. 앱에 기본으로 제공되는 커스텀 아이콘을 추가한 다음에는, 스마트폰에 앱을 설치할 때 APK 파일 형태로 내보내거나 스마트폰에 직접 설치할 수 있음을 배우게 된다. 이러한 정보는 이후에 나올 모든 프로젝트에 기본으로 적용된다.
2부: 몸풀기 단계로 시작하는 간단한 프로젝트
두 번째 앱을 개발하기 전에 4장에서 이벤트와 메소드, 속성 등 주요 개념을 소개한다. 5장에서는 현재 존재하는 컴포넌트와 블록, 앱 인벤터의 개념과 이후에 포함될 예정인 항목들에 대해 다룬다. 이러한 기본 사항들을 다룬 후에 6장에서 Designer를 통해 데모용 앱의 UI를 생성하여 버튼, 텍스트 박스, 체크박스 등 능동적으로 컴포넌트를 사용하는 방법에 익숙해지게 할 것이다. 7장에서는 멀티미디어와 관련된 주제로 그와 관련된 컴포넌트를 다루면서 사진 찍기 기능을 살펴보고, 음성 녹음 기능과 오디오와 비디오 파일을 재생하며, 진동 기능까지 다룬다. 8장에서는 미디어 센터의 형태, 즉 시각적으로 정교하고, 인체공학적으로 설계된 멀티스크린 미디어 앱이 되도록 앞서 만든 데모 프로젝트의 기능을 확장한다.
3부: 앱 개발자가 되기 위한 과정
그래픽적으로 다채로운 화면을 갖도록 UI와 멀티미디어 기능을 다뤄보고 앱 인벤터의 컴포넌트를 사용해서 얼마나 쉽게 앱을 개발할 수 있는지 어느 정도 감을 잡았으니 9장부터는 좀 더 심화단계로 블록과 블록 구조를 살펴보면서 앱 개발 방법을 공부한다. 총체적으로 전 과정을 훑어보면서 데이터 타입, 데이터 구조, 컨트롤 구조에 대한 핵심 세부 사항들을 알아 봄으로써 독자는 앱 인벤터의 모든 기능을 구현할 수 있을 것이다. 빠르게 구현해보는 앱을 통해 어떻게 색상을 만들고 숫자를 처리하며 각 로직의 진행 단계별 상태를 검사하는지, 그리고 텍스트와 문자열 수정, 변수와 프로시저, 리스트의 사용법, 분기문과 순환문을 통해 프로그램 진행 흐름을 제어하는 방법을 공부한다. 그다음은 앱 인벤터의 Editor 컴포넌트와 관련된 토론을 하면서 프로그램 개발과 관련된 팁을 알아보고 기본적인 계산기나 숫자 추측 게임, 어휘 훈련 앱 등을 구현할 것이다. 10장에서는 데이터를 로컬 저장소나 온라인상의 웹 서버에 저장하고, 저장된 데이터를 불러오는 방법을 알아볼 것이다.
4부: 매력적인 앱 개발
앞에서 새롭게 공부한 개발자 비법을 토대로, 이번에는 정말 재미있고 도전해볼 만한 개발 영역에 대해 다룬다. 11장 ‘그래픽과 애니메이션’에서는 다소 고급 주제에 속하지만 앱 인벤터로 쉽게 처리할 수 있는 그래픽과 애니메이션을 다룬다. 이 주제를 간단히 소개한 후, 독자는 손가락을 사용해 스마트폰에서 오브젝트를 그릴 수 있는 (취소 기능이 포함된) 드로잉 앱을 개발한다. 다음은 현실적인 움직임을 시뮬레이션하기 위해 오브젝트에 애니메이션 효과를 주고 충돌을 인식하는 방법을 배운다. 새롭게 배운 이론을 토대로 실전 예제들을 훈련하도록, 점수 기록 기능이 있고, 난이도가 변하는 2D 스쿼시 게임을 만들어 본다. 또한 손가락으로 키 프레임 애니메이션 경로를 그리는 앱을 개발하기 위해 모든 종류의 타이머 이벤트를 사용하는 방법을 배우고 스마트폰이 대기 모드여도 알람 시계 앱이 동작하게 만든다.
12장 ‘센서’에서는 숙련된 개발자들조차 낯설게 느낄 수도 있는 주제를 다룬다. 여러 가지 센서의 기능에 대해 자세히 알아보고, 무엇보다도 독자의 앱과 스마트폰 센서를 통합하는 방법을 공부한다. 위치 센서와 방향 센서로 측정을 해보고 이를 토대로 그래픽 나침반 바늘 또는 그래픽 수평계 기능을 갖춘 완전한 형태의 나침반 앱을 구현한다. 가속도 센서를 통해 악기의 민감도를 슬라이더 막대를 통해 조절하는 악기인 셰이커를 개발하고, 게다가 고전적인 밸런스 게임인 라비린스(Labyrinth)와 비슷한 맥락의 게임을 개발해본다. 위치 기반 서비스가 인기를 얻는 추세를 따라, 실시간으로 온라인 서버에 경로 프로파일을 기록할 수 있는 지오트래커(Geotracker)를 개발해보고, 앱과 GPS 센서를 연동하는 방법뿐만 아니라 보물이 놓인 방향과 거리를 표시하는 나침반을 갖춘 보물찾기 앱을 개발하는 방법도 공부한다.
물론, ‘고전’인 통신 영역도 빼먹지 않고 다룬다. 13장에서는 통신 관련 기능 영역을 통해 작동하는 규모가 크면서도 실무에 도움이 되는 마지막 프로젝트 ‘운전자 보조 시스템’을 다룬다. 동시에 전문적인 개발자들이 걸어온 길을 따라 이 프로젝트를 개발하는 데 필요한 요구사항 및 작업 단계를 모듈화하여 분석하고 구현한다. 먼저, 다중화면을 갖는 친숙한 인터페이스와 함께 바로 가기 연락처를 통해 전화를 거는 모듈을 통합한다. 그 다음은 SMS 응답 메시지와 완전 자동 수신 모듈을 개발한다. 이 모듈은 음성 인식 기능을 통해 텍스트 음성 변환 옵션으로 수신한 SMS 메시지를 큰 소리로 읽고 SMS 메시지를 전송하도록 지시한다. 13장에서는 모든 개발 언어의 기능 범위를 확장하고 앱에 외부 서비스를 통합할 수 있도록 액티비티 스타터라는 컴포넌트의 핵심 인터페이스의 개념을 소개한다. 이 인터페이스를 써서 다른 앱과 웹 서비스를 호출하고 통합한다. 다양한 모듈을 다뤄보면서, 각 모듈을 담당하는 여러 가지 버튼 중 하나를 눌러 구글 내비게이션(Google Navigation)을 호출해 자동차로 운전하여 집이나 사무실로 가는 길을 탐색하거나 자동차를 주차한 위치로 돌아가는 일을 도와주도록 앱과 구글 지도(Google Maps)를 통합하는 방법을 배운다. 이메일을 보내는 모듈을 사용하여, 지인을 데리러 가는 동안 운전자의 현재 위치와 도착 시간을 알려줄 수 있다.
마지막으로 앱 인벤터의 웹 컴포넌트를 기반으로 하는 다른 주요 인터페이스를 소개하여 웹 서비스에서 제공하는 API를 통해 데이터를 교환하는 방법을 공부한다. 앱 인벤터 WebViewer 구성 요소를 사용하여 야후와 피드질라(Feedzilla)에서 제공하는 웹 API에 실시간으로 데이터에 접근해 원래의 전체 뉴스 기사(Full-Text)를 담고 있는 사이트 화면을 직접 표시하고 최신 뉴스 및 주식 데이터와 주식 상장 가격을 보여주는 모듈을 구현함으로써, 정보 매시업(mashup)을 개발하는 방법에 대해 자세하게 살펴본다. 이러한 기능은 보조 시스템에 필요한 완전한 모듈들을 모두 탑재한 ‘운전자 보조 시스템’ 앱을 매일 사용할 수 있게 해준다.
5부: 개발자가 알아두면 유용한 사항들
숙련된 개발자(1장부터 13장까지 공부하고 나면 스스로 이렇게 생각하게 될 것이다)라도 기술 트렌드를 따라잡기 위해 항상 새로운 분야를 공부한다.
14장 ‘특수 기능’에서는 온라인 투표, 바코드 스캔, 트위터와 통신하기 위한 트위터 컴포넌트 또는 구글의 온라인 데이터베이스인 퓨전 테이블(Fusion Table)을 사용하기 위한 앱을 대상으로 한 앱 인벤터의 특수 컴포넌트를 다룬다. 이 장에서는 또한 온라인 멀티플레이어 게임을 개발하고, 레고 마인드스톰 세트에서 로봇을 제어하며 블루투스를 통해 데이터 교환 방식, 그리고 자바 브릿지를 통해 자바로 개발된 앱과 앱 인벤터를 통합하는 특수 컴포넌트 그룹의 개요를 다룬다.
15장 ‘도구와 팁’에서는 앱 인벤터와 안드로이드에서 지원하는 미디어 포맷에 대해 공부하며 자바 콘솔을 이용한 디버깅 작업, 음성 모듈을 설정하는 데 필요한 정보 등 유용한 내용을 제공한다.
부록에서는 수많은 프로젝트와 미디어 및 지원 사이트에서 다운로드 가능한 APK 파일에 대해 설명하고, 이 책에서 소개하지 못한 흥미로운 추가 정보를 얻을 수 있는 링크를 수록했다.
[ 추천의 글 ]
1980년대를 기점으로 개인용 컴퓨터가 널리 보급됐다. 그러나 오늘날 모바일 애플리케이션은 결코 과거처럼 ‘개인적인 용도’로 컴퓨팅 리소스를 사용하지 않는다. 우리는 스마트폰과 태블릿 등 새로운 디바이스를 손에서 놓지 않고 항상 지니고 산다. 더 중요한 점은 개인용 디바이스를 통해 ‘서로에 대해’ 점점 깊은 관계를 맺는다는 점이다. 어디서 일하는지, 좋아하는 게 뭔지, 무엇을 구입하는지, 친구가 누군지, 어디에 살고 무슨 얘기를 하는지, 누구와 얘기하는지, 누구에 대해 얘기하는지 등 모든 게 공개되고 있다. 이러한 사적인 컴퓨팅은 근본적으로 1950년대부터 텔레비전이 그랬던 것처럼 우리의 경험과 우리가 살고 있는 세계에 대한 인식을 바꾸고 있으며, 전 세계의 데이터 서비스와 정보 소스에 연결되어 있다.
텔레비전은 수동적인 소비자 기술(consumer technology)이다. 누구나 TV를 즐길 수 있지만, 전문적인 생산자들이 제공하는 다양한 컨텐츠 중 원하는 프로그램을 선택하는 것 이외에 TV를 개인적인 용도에 맞게 조정하는 방법은 없었다. 우리 모두가 전문 개발자가 제공한 미리 정의된 애플리케이션 중에서만 제품을 골라야 하는 측면에서 볼 때, 모바일 컴퓨팅도 텔레비전과 시청자 간 구조와 비슷한 양상을 보여줄 것이다.
구글에서 앱 인벤터를 만들었을 때, 실제로 전문 프로그래머가 될 필요 없이 자신과 자신의 친구와 관련된 애플리케이션을 개발하게 함으로써 모바일 컴퓨팅을 개인적인 용도에 특화할 수 있는 개인 컴퓨팅 기술로 만들어 보자는 생각을 함께 갖게 되었고, 이러한 생각이 동기가 되어 서비스 구축을 시작했다. 아마도 독자가 앱 인벤터에 관심을 갖게 된 것은 특별한 목적을 달성할 수단으로 앱을 만들고 싶었거나 컴퓨터에 대해 좀 더 실무적인 공부를 하려 한다거나 아니면 앱을 배포 및 판매하거나 혹은 정말로 그저 재미 삼아 만들어 보고자 할 수도 있다.
앱 인벤터는 2010년 12월을 기점으로 누구나 사용할 수 있게 개방되었다. 아직 개발 중인 베타 버전 시스템으로, 구글 팀은 지금의 앱 인벤터를 더 강력하고 사용하기 쉽게 만들기 위해 최선을 다하고 있다. 그러나 이미 개인적인 용도로 앱을 만들거나 모험을 해보기 위해 모여든 모든 연령의 앱 인벤터 사용자들이 커뮤니티를 만들어 운영하고 있으며 점차 규모도 커지고 있다. 사람들이 만드는 애플리케이션 중 일부는 다음과 같은 용도로 쓰인다.
■ 레고 로봇을 제어하는 컨트롤러
■ 자녀에게 독서와 수학을 가르치기 위한 앱
■ 의학 전공 서적의 참고 정보를 제공하는 가이드
■ 선물 카드를 보내서 감사를 표현하기 위한 앱
■ 상용 자동차 회사 근무자들이 재고 물품을 기록하기 위한 앱
■ 다양한 종류의 게임
독자도 이와 같은 애플리케이션을 만들 수 있으며, 이 책은 구글 웹사이트에서 앱 인벤터를 실행하고 스마트폰을 연동해서 앱을 개발하는 데 필요한 기초 지식을 제공하려는 목적으로 집필했다. 앞으로 이 책이 제시하는 방향에 따라 가속도 센서, 방향 및 위치 센서도 사용해 볼 것이다. 이 책을 공부하면서, 텍스트와 데이터를 조작하며 이미지와 애니메이션 작업까지 지원하는 앱을 만드는 방법에 대해 확실한 지침을 얻을 수 있을 것이다. 전화를 걸거나 온라인 데이터베이스를 조작하는 방법, 카메라를 제어하는 방법도 배울 것이며, 게임 제작 방법과 문자 메시지를 송수신하는 방법, 지도를 읽어와 처리하는 방법까지 공부할 것이다. 각 주제마다 작업 예제 프로그램과 철저한 설명을 덧붙였다.
이 책을 시작으로 독자는 모바일 앱을 설계하는 개발자가 될 수 있을까? 아마도 그럴 것이다. 그렇지 않다 해도, 독자는 이 책을 통해 우리의 삶에 있어 점점 더 핵심적인 역할을 하는 모바일 컴퓨팅 기술을 바탕으로 창의적인 개발자가 될 수 있을 것이다.
- 핼 에이벌슨(MIT 대학 전기공학 및 컴퓨터과학부 교수, 구글 앱 인벤터 팀의 핵심 멤버이자 MIT 모바일 학습 센터의 총책임자)
목차
목차
- 1부 첫 번째 앱 개발 준비하기
- 1장 준비 및 설치
- 시스템 요구사항
- 컴퓨터 플랫폼
- 안드로이드 플랫폼
- 자바 환경 구성
- 앱 인벤터의 로그인 정보
- 앱 인벤터 설치
- 안드로이드 기기 설정
- 시스템 요구사항
- 2장 개발 환경
- 앱 인벤터를 시작하게 된 걸 환영합니다!
- 앱 인벤터 디자이너
- 디자인 영역에서 프로젝트 생성하기
- 다섯 가지 패널
- Palette 컴포넌트 인벤토리
- 뷰어에서 컴포넌트 오브젝트로 앱 디자인하기
- 컴포넌트와 미디어 패널에서 오브젝트 구조 만들기
- 컴포넌트 속성 설정
- 앱 프로젝트 관리 및 저장하기
- 앱 인벤터 Blocks Editor
- Blocks Editor로 앱 개발하기
- 내장된 탭에 포함된 일반적인 블록 그룹
- My Blocks에 담긴 특정 컴포넌트 블록
- Blocks Editor에서 앱 구현 및 수정하기
- 안드로이드폰 통합 기능
- Blocks Editor에 스마트폰 연결하기
- 멈춰버린 경우 재시작하기
- 세션 종료
- 에뮬레이터 사용하기
- 초기 실행 문제
- Blocks Editor가 실행되지 않는 경우
- 스마트폰 연결 상태가 멈춰버린 경우
- 기타 문제 사항들
- AI 포럼
- 3장 앱 개발 시작하기
- “웃음 가방” 프로젝트 생성하기
- UI 디자인
- “Label” 컴포넌트 삽입하기
- 컴포넌트 이름 지정하기
- 속성 설정
- Button 컴포넌트 추가하기
- 미디어 파일 업로드 및 통합하기
- 앱 디자인 최적화하기
- 비 가시성 컴포넌트 : 사운드
- 앱의 기능 개발하기
- 인터랙티브한 앱의 로직 만들기
- 블록 집합체를 통한 기능 구현하기
- 프로젝트 로컬 디스크에 저장하기
- 웃음 소리가 나지 않는 경우
- 앱 생성하기와 설치하기
- 스마트폰에 직접 설치하기
- 앱과 어울리는 아이콘
- 바코드를 통한 온라인 설치
- 컴퓨터에 APK 파일 형태로 다운로드하기
- 안드로이드 마켓과 그밖의 배포 방법들
- 2부 준비 단계로 시작하는 간단한 프로젝트
- 4장 기본 용어와 핵심 개념
- 속성과 속성 블록
- 이벤트와 이벤트 핸들러
- 메소드와 메소드 블록
- 5장 AI 레퍼런스
- 컴포넌트 레퍼런스
- 블록 레퍼런스
- 콘셉트 레퍼런스
- 6장 그래픽 유저 인터페이스
- 라벨 컴포넌트에 텍스트 출력하기
- 특정 동작을 발생시키는 버튼 컴포넌트
- CheckBox 컴포넌트로 선택 옵션 만들기
- TextBox 컴포넌트로 텍스트 입력하기
- PasswordTextBox 컴포넌트로 비밀 내용을 입력하기
- 알림 컴포넌트로 경고 메시지 출력하기
- Screen Arrangement 컴포넌트로 스크린 정렬하기
- 앱이 실행할 때의 스크린 컴포넌트 동작
- 7장 멀티미디어
- 미디어 액세스 옵션
- 기본 원리: 시너지
- Image 컴포넌트로 로컬 디스크와 온라인 이미지 출력하기
- Camera 컴포넌트를 통해 카메라로 찍은 사진을 화면에 출력하기
- ImagePicker 컴포넌트로 이미지 처리하기
- 사운드 컴포넌트를 이용한 음향 효과와 진동 기능
- Player 컴포넌트로 오디오 파일 재생하기
- VideoPlayer 컴포넌트로 영화 재생하기
- SoundRecorder 컴포넌트로 오디오 녹음하기
- 8장 예제 프로젝트 : 미디어 센터 생성하기
- 사용성을 고려한 미디어 센터의 재 디자인
- 미디어 센터의 멀티 스크린
- 3부 앱 개발자가 되는 과정
- 9장 프로그램 개발의 기본
- 데이터 처리 요소
- 데이터 타입
- 데이터 구조
- 컨트롤 구조
- Color 블록 그룹으로 색상 지정하기
- 기존에 정의된 색상
- 사용자 정의 색상
- Math 블록 그룹으로 숫자 처리하기
- 기본 산술 계산
- 과학과 관련된 산술 계산
- 난수 생성
- 정렬과 변환
- 관계 연산자
- Logic 블록 그룹으로 프로그램 상태 확인하기
- Boolean 변수
- Boolean 연산자
- Text 블록 그룹으로 구성된 문자열과 텍스트 수정하기
- 문자열 비교 및 정렬
- 문자열 합치기 및 뒤바꾸기
- 문자열 검색과 검사
- 리스트 생성과 문자열 분할하기
- Definition 블록 그룹으로 컨테이너 구조 정의
- 변수
- 프로시저와 인자
- 결과 값을 반환하는 프로시저
- 리스트 블록 그룹으로 리스트 관리하기
- 리스트 변환과 내용 확인
- 리스트 아이템 읽기와 검색
- 리스트 아이템 추가, 교체, 삭제
- Control 블록 그룹으로 프로그램 흐름 제어하기
- 조건문과 분기문(if-then-else)
- 리스트나 수치를 이용한 순환문(for)
- 일반적인 순환문(while)
- 안전하게 앱 종료하기
- 프로그램 개발 팁
- 컴포넌트를 사용한 고급 검사 방법
- 개발 중간에 실시간으로 오류 메시지 확인하기
- 테스트와 디버깅
- 더 빠르고 편안하게 개발하기
- 예제 프로젝트
- 보편적인 계산기
- 숫자 맞추기 게임
- 어휘 학습 훈련기 : English-German
- 데이터 처리 요소
- 10장 저장 공간과 데이터베이스
- TinyDB 컴포넌트로 로컬 공간에 데이터 저장하기
- 영구 데이터 타입으로 변수 값 저장하기
- 사전 앱에 로컬 데이터 불러오기
- 안드로이드 시스템에서 앱 지우기
- TinyWebDB 컴포넌트로 웹 상에서 데이터 저장하기
- 클라우드를 통한 사전 데이터 저장
- 마스터와 클라이언트 앱을 위한 공유 데이터베이스
- TinyDB 컴포넌트로 로컬 공간에 데이터 저장하기
- 4부 매력적인 앱 개발하기
- 11장 그래픽과 애니메이션
- 캔버스 컴포넌트로 도화지가 있는 것처럼 그림 그리기
- 여러 가지 크기의 브러시로 다양한 색상의 점 찍기
- 스크린에 라인 그리기
- 되돌리기 기능을 갖춘 그림 그리기 프로그램
- Ball과 ImageSprite 컴포넌트로 애니메이션 구현하기
- 그래픽 오브젝트 이동
- 충돌 검사
- 역동적인 애니메이션이 가미된 2D 스쿼시 게임
- Clock 컴포넌트로 자동화 프로세스 제어하기
- 외부 프로그램 로직으로 애니메이션 제어하기
- 손가락으로 애니메이션 키 프레임 지정하기
- 타이머 이벤트를 통한 알람시계
- 캔버스 컴포넌트로 도화지가 있는 것처럼 그림 그리기
- 12장 센서
- OrientationSensor 컴포넌트로 자세 측정하기
- 센서를 이용한 방향 측정의 기본 개념
- 그래픽으로 방향을 표시하는 나침반
- 그래픽으로 균형을 표시하는 균형계
- AccelerometerSensor 컴포넌트로 중력 측정하기
- 센서를 이용한 가속도 측정의 기본 개념
- 스마트폰을 흔들어 소리 내는 악기처럼 사용하기
- Slider Control로 측정 민감도 설정하기
- 몸 전체를 이용한 균형 게임
- LocationSensor 컴포넌트로 지리적 위치 구하기
- GPS와 위치 기반 서비스의 기본 개념
- 지리 좌표와 소수점
- 지나온 길을 기록하는 지리 추적 컴포넌트
- 스마트폰으로 하는 보물찾기 놀이
- OrientationSensor 컴포넌트로 자세 측정하기
- 13장 통신
- 작업 : 운전자 보조 시스템 개발
- 요구 조건, 기능, 그리고 명세 사항
- 앱 구조의 모듈화된 디자인
- 다중 화면으로 만든 Switch 보드
- Speed Diar 리스트로 전화 걸기
- PhoneNumberPicker 컴포넌트로 전화번호 저장하기
- ListPicker 컴포넌트로 바로 가기 연락처를 선택하기
- PhoneCall 컴포넌트를 이용한 전화 걸기 기능 구현
- 완전히 자동으로 SMS 메시지를 전송하기
- 지리 위치를 통해 응답 메시지 생성하기
- TextToSpeech 컴포넌트로 안드로이드폰이 SMS 메시지를 소리 내어 읽도록 하기
- SpeechRecognizer 컴포넌트를 통한 음성 인식 및 받아 적기
- Texting 컴포넌트로 SMS 메시지 송/수신 및 검사하기
- Interface 컴포넌트로 데이터 교환하기
- ActivityStarter 컴포넌트로 웹 서비스와 앱 제어 권한 공유하기
- 내장된 구글 맵으로 구현한 보행자용 내비게이션
- 통합 구글 내비게이션으로 구현한 자동차 내비게이션
- ADB로 액티비티 확인 및 사용
- EmailPicker 컴포넌트와 ContactPicker 컴포넌트로 연락처 고르기
- 안드로이드에 내장된 전송 기능을 통해 이메일 보내기
- 웹 서비스를 통한 모바일 매시업
- Web 컴포넌트로 Web API 사용하기
- 데이터를 기반으로 하여 주식 정보를 제공하는 Ticker 모듈
- Feedzilla의 데이터를 이용한 뉴스 Ticker
- 앱에서 사용되는 웹사이트와 WebViewer 컴포넌트
- 작업 : 운전자 보조 시스템 개발
- 5부 개발자가 알아두면 유용한 사항
- 14장 특수 기능
- 특정 애플리케이션을 위한 컴포넌트
- Twitter 컴포넌트로 트위터 즐기기
- BarcodeScanner 컴포넌트로 바코드 데이터 읽어오기
- Voting 컴포넌트로 온라인 투표 구현하기
- FusiontableControl 컴포넌트로 데이터 테이블 구현하기
- 특수한 용도에 최적화된 컴포넌트 그룹
- GameClient 컴포넌트를 통해 구현하는 온라인 멀티플레이어 게임
- BluetoothClient와 BluetoothServer 컴포넌트를 통한 데이터 교환
- AI 자바 브릿지를 통한 자바 인터페이스 구현
- 특정 애플리케이션을 위한 컴포넌트
- 15장 도구와 팁
- 미디어 지원 포맷
- 오디오 포맷
- 이미지 포맷
- 비디오 포맷
- 개발자 포럼에 올라오는 소식
- 자바 콘솔 제어
- 콘솔 활성화
- AI에서 자바 로딩 절차를 확인하는 방법
- 상태 정보 사용하기
- 스피치 모듈 설정
- Text-to-Speech 모듈 설치
- 스피치 분석기 설정
- 스피치 출력 문제 해결
- 미디어 지원 포맷
- 부록 추가 리소스
- 지원 사이트에서 제공하는 리소스
- 온라인 소스 및 유익한 사이트
- 공식 리소스 사이트
- 독창적인 튜토리얼과 예제 모음
- 배경, 역사, 그리고 외관
도서 오류 신고
정오표
정오표
[ 예제 파일 및 그림, 소리 등 다운로드 위치 ]
http://www.acornpub.co.kr/book/android-app-inventor
[ p.121 아래에서 13행 ]
속서 -> 속성
[ p.160 참고 아래에서 3행 ]
과장 -> 과정
[ p.612 아래에서 2행 ]
다룬도드 -> 다운로드
2015.1.7 수정사항
[p.352 : 그림 9.95]
2015-08-10
p398. 아래에서 2행
색상() dmf → 색상()을
p365. 위에에서 10행
주변 의 → 주변의 : 점 삭제
p331. 아래에서 6행
수행한다? → 수행한다.