그림으로쉽게설명하는안드로이드프로그래밍 초판발행 2012 년 8 월 20 일 제 3 판 1 쇄 2015 년 7 월 27 일 지은이천인국펴낸이김승기펴낸곳 ( 주 ) 생능출판사 / 주소경기도파주시광인사길 143 출판사등록일 2005년 1월 21일 / 신고번호제

Similar documents
(Microsoft PowerPoint - AndroG3\306\367\306\303\(ICB\).pptx)

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

Microsoft PowerPoint App Fundamentals[Part1].pptx

<BED5BACEBCD32E696E6464>

Microsoft PowerPoint Android-구조.애플리케이션 기초(1.0h).pptx

PowerPoint Template

THE TITLE

1부

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Windows 8에서 BioStar 1 설치하기

고객 카드

모바일 안드로이드 아키텍처

Microsoft PowerPoint - chap01-C언어개요.pptx

정보

[Brochure] KOR_TunA


Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

Microsoft PowerPoint App Fundamentals[Part2].pptx

PowerPoint Presentation

디지털 공학

NX1000_Ver1.1

서현수

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

그림으로 쉽게 설명하는 안드로이드 프로그래밍 초판발행 2012년 8월 20일 제3판2쇄 2016년 1월 15일 지은이 천인국 펴낸이 김승기 펴낸곳 (주)생능출판사 / 주소 경기도 파주시 광인사길 143 출판사 등록일 2005년 1월 21일 / 신고번호 제

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

슬라이드 1

사용설명서를 읽기 전에 안드로이드(Android)용 아이디스 모바일은 네트워크 연결을 통해 안드로이드 플랫폼 기반의 모바일 기기에서 장치 (DVR, NVR, 네트워크 비디오 서버, 네트워크 카메라) 에 접속하여 원격으로 영상을 감시할 수 있는 프로그램입니다. 장치의 사

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

DBMS & SQL Server Installation Database Laboratory

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

SBR-100S User Manual

PowerPoint Presentation

사용하기 전에 2

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

iOS5_1±³


wtu05_ÃÖÁ¾

PowerPoint Presentation

..,. Job Flow,. PC,.., (Drag & Drop),.,. PC,, Windows PC Mac,.,.,. NAS(Network Attached Storage),,,., Amazon Web Services*.,, (redundancy), SSL.,. * A

슬라이드 1

1) 리눅스커널 메모리관리, 프로세스관리, 파일시스템관리, 네트워크스택등하드웨어지원 2) Native 라이브러리 (C, C++) 안드로이드프레임워크에서필요한 C 와 C++ 라이브러리 3) 안드로이드런타임 코어라이브러리지원, Dalvik Virtual Machine 으로

JAVA PROGRAMMING 실습 08.다형성

gnu-lee-oop-kor-lec06-3-chap7

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

Windows 10 General Announcement v1.0-KO

4S 1차년도 평가 발표자료

Studuino소프트웨어 설치

안드로이드 서비스

A SQL Server 2012 설치 A.1 소개 Relational DataBase Management System SQL Server 2012는마이크로소프트사에서제공하는 RDBMS 다. 마이크로소프트사는스탠다드 standard 버전이상의상업용에디션과익스프레스 exp

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이

C++ Programming

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Microsoft PowerPoint - 권장 사양

untitled

52 l /08

보안공학연구회

슬라이드 1

F120L(JB)_UG_V1.0_ indd

Visual Studio online Limited preview 간략하게살펴보기

1

JVM 메모리구조

SIGIL 완벽입문

Windows Server 2012

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

View Licenses and Services (customer)

미디어 및 엔터테인먼트 업계를 위한 Adobe Experience Manager Mobile

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - Mobile SW Platform And Service Talk pptx

Google Maps Android API v2

슬라이드 1

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

H3250_Wi-Fi_E.book

Microsoft Word - src.doc

LATEX과 Mendeley를 활용한 문헌 관리 2017년 2월 6일 제1절 서지 관리 프로그램 연구 주제를 찾거나 선행 연구를 조사하는 가장 대표적인 방법이 문헌들을 찾아보는 것이다. 수없이 많은 논문들을 찾게 되고, 이런 논문들을 다운로드한 후 체계적으로 관리할 필


<4D F736F F D B1E2C8B9BDC3B8AEC1EE2DB9DAB5BFB1D4>

비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

슬라이드 1

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Cloud Friendly System Architecture

ISP and CodeVisionAVR C Compiler.hwp

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

[Blank Page] i

제8장 자바 GUI 프로그래밍 II

PowerPoint Template

CODESYS 런타임 설치과정

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - 15주차(최종).pptx

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F32C2F7BDC32E >

Install stm32cubemx and st-link utility

Microsoft Word - 임베디드월드_WindowsEmbeddedCompact7_rev

Transcription:

그림으로쉽게설명하는안드로이드프로그래밍 초판발행 2012 년 8 월 20 일 제 3 판 1 쇄 2015 년 7 월 27 일 지은이천인국펴낸이김승기펴낸곳 ( 주 ) 생능출판사 / 주소경기도파주시광인사길 143 출판사등록일 2005년 1월 21일 / 신고번호제406-2005-000002호대표전화 (031)955-0761 / 팩스 (031)955-0768 홈페이지 www.booksr.co.kr 책임편집손정희 / 편집최일연, 신성민, 김민보 / 디자인유준범마케팅백승욱, 최복락, 김민수, 심수경, 최권혁, 백수정, 이재원, 최태웅, 김민정인쇄 제본 ( 주 ) 상지사P&B ISBN 978-89-7050-846-7 93000 정가 44,000원 이도서의국립중앙도서관출판예정도서목록 (CIP) 은서지정보유통지원시스템홈페이지 (http://seoji.nl.go.kr) 와국가자료공동목록시스템 (http://www.nl.go.kr/kolisnet) 에서이용하실수있습니다. (CIP 제어번호 : CIP2015019201) 이책의저작권은 ( 주 ) 생능출판사와지은이에게있습니다. 무단복제및전재를금합니다. 잘못된책은구입한서점에서교환해드립니다.

개정 3 판 머리말 안드로이드는현재전세계사람들이가장많이사용하는모바일운영체제이다. 안드로이드는스마트폰을넘어서스마트카나스마트워치와같은웨어러블컴퓨터에서도많이사용되고있다. 안드로이드는컴퓨터공학도라면반드시알고지나가야하는중요한주제가되었다. 특히안드로이드 5.0 버전 ( 롤리팝 ) 부터는개발도구가 안드로이드스튜디오 로전격적으로변경되었다. 그동안이클립스로개발해오던개발자들에게는상당한충격이었을것이다. 하지만사용하다보면안드로이드스튜디오도이클립스만큼상당히편리한도구라는것을느낄수있다. 이책의개정3판에서는다음과같은점에역점을두고개정하였다. P R E F A C E 안드로이드 5.0 버전부터공식개발도구가된 안드로이드스튜디오 의설치, 사용법을자세하게설명하였다. 현재최신버전인 5.1 기반에서모든예제를다시작성하고테스트하였다. 최 신버전에맞지않는코드는삭제하였고최신예제들을보강하였다. 독자들이조금큰규모의앱을개발할때사용할수있는 Lab을제공한다. Lab 에서는여러가지분야의대표적인앱의기초버전을제공한다. 독자들은이기초버전에서출발하여서더큰규모의앱을작성할수있을것이다. 예를들어서초보적인 만보계 나 초보영상처리프로그램 앱을 Lab으로제공한다. 독자들은여기에살을붙여서본격적인앱을제작할수있을것이다. 기존의내용중에서지나치게자세하거나혼동을줄수있는부분은삭제하였으며, 설명을보다쉽게이해할수있도록보강하였다. 인텐트, 리스트뷰, NFC, 방송수신자등의많은분야를다시작성하였다. 개정판을준비하면서도항상초판의목표는잊지않았다. 이책은안드로이드입문자들을위한책이다. 초판의가장큰목표는컴퓨터공학에대한기본적인지식을가진개발자들이쉽게이해할수있는안드로이드책을만들어보자는것이었다. 안드로이드에서도기본적인개념을이해하는것이무척중요하다. 3

4P R E F A C E 예를들어서 인텐트, 이벤트처리, 액티비티 등의개념을정확하게이해하여야한다. 이책은기본적인개념을독자들에게친절하고자세히설명하고자노력하였다. 개 정 3판에서도적절한그림을가능한많이사용하여보다친숙하고, 지루하지않은책을만들려고노력하였다. 개정3판을만들면서많은도움이있었다. 항상적극적으로지원해주시는 ( 주 ) 생능출판사여러분께깊은감사를표한다. 그리고책이출간될때마다격려해주시고오류를지적해주시는모든독자여러분께깊이감사드린다. 2015년 7월저자천인국

머리말 안드로이드는최근에각광받는모바일운영체제이다. 안드로이드는지속적으로마켓쉐어를늘려가고있으며, 버전이올라갈때마다각종첨단기술들이추가되고있다. 하지만안드로이드는상당히배우기힘든점이있다. 첫번째로자바, 데이터베이스, 멀티태스킹, 네트워크, 센서등의광범위한분야에대한지식이있어야한다. 두번째로현존하는가장앞선이론과기술들을채택하다보니입문자들이이해하는데상당한어려움을느낀다. 시중에나와있는안드로이드에관한좋은책들도상당히어렵게기술되어있다. 저자가이책을저술하게된가장큰이유가바로이때문으로컴퓨터공학에대한기본적인지식을가진개발자들이쉽게이해할수있는안드로이드책을만들어보자는것이었다. 먼저적절한그림을가능한많이사용하여안드로이드개념을쉽게이해하도록노력하였다. 또한컬러를사용하여지루하지않고친숙한책이되도록노력하였다. P R E F A C E 이책은안드로이드입문자들을위한책이다. 이책으로안드로이드에대한기초를확실히하고, 실제애플리케이션개발에는구글의전문적인문서들과전문적인책들을참조하면될것이다. 안드로이드에대한가장큰정보원천은역시구글의안드로이드개발자웹페이지라할수있다. 이책을저술하면서도구글의웹페이지와샘플프로그램을많이참조하였다. 안드로이드는너무자주버전이업그레이드되는데, 책을저술하는입장에서는상당히어려운문제였다. 이책을저술하는중에도버전이두번이나업그레이드되었다. 이책에는가능한한최선을다해서최신의내용을담으려고노력하였다. 한가지다행스러운점은안드로이드에서는이전버전도최신버전에서계속지원된다는점이다. 책에들어있는소스는생능출판사홈페이지 (www.booksr.co.kr) 에서제공될것이다. 이책이만들어지기까지많은도움이있었다. 특히까다로운요구들을묵묵히들어주고적극적으로지원해주신생능출판사여러분께깊은감사를표한다. 그리고항 5

6P R E F A C E 상격려해주시고오류를지적해주시는모든교수님들과독자여러분께깊이감사드린다. 책을저술하는동안안드로이드에포함된첨단기술들이필자를즐겁게했듯이, 독자여러분들이이책에서즐거움을발견할수있다면필자에게는큰보람이될것이다. 2012년 7월저자천인국

차례 CHAPTER 01 기초사항 1. 스마트폰 18 2. 안드로이드란? 22 3. 안드로이드의특징 24 4. 안드로이드의구조 29 5. 애플리케이션의기초개념 31 6. 인텐트 39 7. 매니페스트파일 41 8. 안드로이드개발준비사항 43 C O N T E N T S CHAPTER 02 안드로이드개발도구설치 1. 개발과정의개요 50 2. 안드로이드개발도구 51 3. JDK 52 4. 안드로이드스튜디오설치하기 54 5. SDK 추가로설치하기 60 6. 첫번째프로젝트만들기 66 7. 에뮬레이터생성하기 71 8. 앱실행하기 76 9. 예제코드를가져와서실행하여보자. 78 CHAPTER 03 첫번째애플리케이션 1. 애플리케이션의구성 84 2. 마음껏변경하여보자 91 3. XML 을이용하여앱의화면작성하기 96 7

8C O N T E N T S CHAPTER CHAPTER 04 05 4. 리소스 103 5. 매니페스트파일 106 6. 자동으로생성되는파일의분석 108 7. 에뮬레이터로그캣 111 8. 안드로이드폰을연결한개발환경구축 112 9. 여러가지형식의앱 114 10. 정리 116 사용자인터페이스기초 1. 사용자인터페이스개요 120 2. 사용자인터페이스작성방법 121 3. 비주얼도구를이용하여사용자인터페이스만들기 129 4. 뷰 132 5. 기초적인뷰들 138 Lab 계산기앱작성 146 레이아웃 1. 레이아웃 148 2. 선형레이아웃 149 3. 프레임레이아웃 (FrameLayout) 157 4. 테이블레이아웃 (TableLayout) 159 5. 상대적레이아웃 (RelativeLayout) 161 6. 절대적레이아웃 (AbsoluteLayout) 164 7. 코드로레이아웃변경하기 165 Lab 계산기앱작성 171

CHAPTER 06 입력위젯과이벤트처리 1. 입력위젯 176 2. 버튼 178 3. 이벤트를처리하는방법 186 4. 이벤트처리객체를이용하여이벤트처리하기 187 5. 텍스트필드 195 6. 체크박스 200 7. 라디오버튼 202 8. 토글버튼 205 9. 레이팅바 207 10. 커스텀컴포넌트 208 11. 터치이벤트 216 12. 멀티터치이벤트 221 C O N T E N T S Lab 여론조사앱작성 229 Lab 온도변환기앱작성 233 CHAPTER 07 메뉴와대화상자 1. 사용자인터페이스개요 236 2. 메뉴 238 3. XML 로메뉴정의하기 240 4. 옵션메뉴생성하기 244 5. 컨텍스트메뉴 250 6. 팝업메뉴 259 7. 액션바 262 8. 액션바추가사항 269 9. 대화상자 274 9

C O N T E N T S CHAPTER 08 10. AlertDialog 277 11. DatePickerDialog 283 12. 커스텀대화상자 286 13. 알림기능 (notification) 291 Lab 예약앱작성 295 그래픽 1. 그래픽 300 2. 커스텀뷰를사용하여그리기 301 3. 그리기속성 308 4. 패스그리기 315 5. 이미지표시하기 317 6. 도형객체이용하기 322 7. 애니메이션 330 8. 프로퍼티애니메이션 331 9. 뷰애니메이션 335 10. 드로워블애니메이션 338 11. 서피스뷰 (SurfaceView) 340 Lab 랜덤그래픽작성 350 Lab 그림판예제작성 354 Lab My Photoshop 작성 360 Lab MyImagePro 작성 364 CHAPTER 09 고급위젯과프래그먼트 1. 어댑터뷰클래스 370 10

2. 리스트뷰 371 3. 그리드뷰 382 4. 갤러리 386 5. 스피너 390 6. 프로그레스바 394 7. 레이팅바 397 8. 데이트픽커와타임픽커 400 9. 프래그먼트 404 10. 프래그먼트의생애주기 408 11. 프래그먼트생성하기 409 12. 태블릿과스마트폰에서화면다르게하기 412 13. 유연한 UI 만들기 416 14. 다른프래그먼트와의통신 422 15. 머티어리얼디자인 431 C O N T E N T S Lab 주소록을 ListView 로표시하기 437 CHAPTER 10 액티비티와인텐트 1. 애플리케이션, 액티비티, 액티비티스택, 태스크 442 2. 인텐트 447 3. 명시적인텐트 449 4. 여러페이지로구성된애플리케이션작성 454 5. 액티비티로부터결과받기 461 6. 암시적인텐트 468 7. 멀티태스킹 474 8. 태스크관리하기 478 9. 인텐트필터 483 10. 액티비티생애주기 490 11. 액티비티상태저장 499 11

C O N T E N T S CHAPTER CHAPTER 11 12 리소스와보안 1. 리소스 506 2. 기본리소스와대체리소스 508 3. 리소스참조 514 4. 다양한화면지원하기 518 5. 지역화 522 6. 보안 528 7. 권한요청하기 530 서비스와방송수신자 1. 서비스 536 2. 서비스기초 539 3. IntentService 클래스 546 4. 연결타입서비스 551 5. 방송수신자란? 561 6. 애플리케이션이방송하기 568 7. 중요한방송 572 Lab 센서값을읽는앱작성 578 CHAPTER 13 프로세스와스레드 1. 프로세스와스레드 586 2. 프로세스 588 3. 스레드 591 4. 스레드에서 UI 를조작하는방법 598 12

CHAPTER 14 5. 스레드를이용한이미지다운로드 606 6. 게임예제 609 데이터베이스와환경설정 1. 데이터를저장하는방법 618 2. 공유프레퍼런스 619 3. 애플리케이션환경설정 624 4. 내부공간에파일만들기 628 5. 외부저장공간 632 6. 데이터베이스 638 7. 데이터베이스사용하기 640 8. 데이터베이스와어댑터 651 C O N T E N T S Lab 영화데이터베이스만들기 655 CHAPTER 15 콘텐트제공자 1. 콘텐트제공자 668 2. 콘텐트제공자의기본 669 3. 콘텐트제공자로부터데이터읽기 674 4. 주소록 680 5. 콘텐트제공자를이용하여데이터변경하기 691 6. Calendar Provider 696 CHAPTER 16 네트워크 1. 네트워킹상태조회 702 13

C O N T E N T S 2. 웹에서파일다운로드 706 3. 웹앱 710 4. XML 처리 722 CHAPTER 17 구글지도 2.0 CHAPTER 18 1. 위치기반애플리케이션 730 2. 사용자위치파악하기 732 3. 지오코딩 739 4. 구글지도 v2 743 5. 구글플레이서비스 747 6. 지도 API 키얻기 750 7. 지도애플리케이션작성 755 8. 구글지도기초사항 761 9. 지도위에마커그리기 768 10. 지도위에그림그리기 775 11. 지도와상호작용하기 780 멀티미디어 1. 안드로이드의멀티미디어지원 786 2. 오디오재생 787 3. 오디오녹음 796 4. 인텐트를이용한이미지캡처 800 5. Camera 클래스를이용한영상캡처 809 6. 내장사진선택하기 816 7. 비디오재생 818 8. 비디오녹화 822 14

CHAPTER CHAPTER 19 20 전화, SMS, 데이터공유 1. 인텐트를사용한전화걸기와문자메시지보내기 830 2. 전화상태얻기 834 3. 이메일보내기 839 4. 다른앱에데이터보내고받기 843 블루투스 C O N T E N T S 1. 블루투스 856 2. 블루투스설정절차 859 3. 블루투스로채팅하기 866 4. 저전력블루투스 ( 블루투스스마트 ) 877 CHAPTER 21 센서 1. 센서하드웨어 894 2. 방향센서 902 3. 가속도센서 905 Lab 만보계제작 910 Lab 주사위게임앱작성 914 CHAPTER 22 NFC 와앱위젯 1. NFC 920 2. NFC 의기초 923 3. 안드로이드는어떻게 NFC 를처리하는가? 926 15

C O N T E N T S CHAPTER 23 4. 앱위젯 942 애플리케이션배포하기 1. 애플리케이션배포과정 958 2. 애플리케이션서명하기 960 3. 애플리케이션버전 966 4. 애플리케이션마켓 968 찾아보기 972 16

A n d r o i d 01CHAPTER 기초사항 1. 스마트폰 2. 안드로이드란? 3. 안드로이드의특징 4. 안드로이드의구조 5. 애플리케이션의기초개념 6. 인텐트 7. 매니페스트파일 8. 안드로이드개발준비사항

01 기초사항 Android 안드로이드! 이보다더쉬울수는없을거야. 그렇다고너무안심하면앙 ~ 돼요! 기초가튼튼해야한다는거아시죠? 1. 스마트폰 애플이아이폰을발표한이후로스마트폰은우리의일상생활을바꾸어놓았다. 우리는스마트폰을이용하여서언제어디서나인터넷에접속하여정보를얻을수있으며각종애플리케이션을실행하여서필요한작업을수행할수있고필요한데이터와영상을가지고다닐수있다. 일반적으로스마트폰은일반적인휴대폰보다훨씬강력한기능을제공하는휴대폰이다. 실제로스마트폰은완전한운영체제가탑재되어있는조그마한컴퓨터라고할수있다. 따라서스마트폰에서는데스크톱컴퓨터처럼사용자가애플리케이션을설치하고실행할수있다. 18

기초사항 01 CHAPTER 언제어디서나인터넷을할수있다니! 그림 1.1 스마트폰은우리의일상을변화시키고있다. 모바일운영체제 스마트폰에탑재되는애플리케이션을개발하는개발자의입장에서는가장중요한것이운영체제이다. 왜냐하면운영체제에따라서애플리케이션의구조가완전히달라지기때문이다. 반대로하드웨어가다르더라도운영체제가같으면동일한애플리케이션을실행할수있다. 현재스마트폰운영체제로사용되는것은구글의안드로이드, 애플의 ios, 마이크로소프트의윈도폰 8 등이있다. 2014년도의세계시장분포를보면다음과같다. 2014 Market Share Others 1% BlackBerry 0% Windows Phone 3% ios 15% 그림 1.2 2014 스마트폰운영체제의점유율 ( 출처 : International Data Corporation(IDC)): 전세계적으로안드로이드운영체제가약 80% 로높아졌음을알수있다. Android 81% 모바일운영체제의비교 최근에많이사용되는안드로이드, ios, 윈도폰운영체제를 [ 표 1.1] 로비교하였다. 19

안드로이드프로그래밍 표 1.1 모바일운영체제비교 안드로이드 ios 윈도폰 Open Handset Alliance 제조사 Google Apple Microsoft 개발언어 Java, C, C++ Objective-C, C, C++,.NET C#, VB.NET, Swift native C/C++ Windows Phone 8.1 최신버전 5.1(Lollipop) ios 8.2 (Apollo) 시장점유율 84.6% 11.9% 2.7% 최신버전배포일 2015.2 2015.2 2014.8 플랫폼 ARM, MIPS, x86 ARM ARM 커널 리눅스 Darwin Windows NT 8+ 라이선스 Apache 2.0 Proprietary Proprietary 웹사이트 android.com apple.com/ios windowsphone.com 사용자인터페이스그래픽사용자인터페이스 Cocoa Touch (Multi-touch, GUI) 라이브타일사용자인터페이스 안드로이드 (android) 는구글에의하여개발되고배포되는운영체제이다. 안드로이드는리눅스커널을사용한다. 리눅스커널위에는자바코드를해석해주는가상머신이탑재되어있다. 이가상머신위에서거의모든자바라이브러리들이지원된다. 이자바라이브러리들을이용하여서개발자들은애플리케이션을작성하게된다. 당연히개발자들이사용하는언어는자바가된다. 자바언어의간결성과풍부한라이브러리로인하여안드로이드는다양한애플리케이션을작성할수있는강력한플랫폼이되었다. 안드로이드는자원이매우제한되어있는모바일장치를위한운영체제이지만개발자들은마치데스크톱에서처럼데이터베이스나 3차원그래픽등의많은기능들을유사하게사용할수있다. ios는애플의스마트폰인아이폰과아이팟터치, 아이패드에내장되어있는운영체제이다. 내부적으로는 Mac OS X 10.5 를기반으로만들어져있다. 멀티터치를지원하는코코아라고불리는사용자인터페이스를지원하고있다. 윈도폰은마이크로소프트의스마트폰을위한운영체제이다. 음악과동영상서비스를위하여 June을탑재하였으며, 검색엔진으로 Bing을사용하고엑스박스라이브가내장되어있다. 응용소프트웨어를나열하는기존의사용자인터페이스환경이아닌허브 (Hub) 를통해응용프로그램들이연결되어서라이브타일형식으로제공된다. 20

기초사항 01 CHAPTER 그림 1.3 모바일운영체제비교 (a) 안드로이드 (b) 윈도폰 (c) 아이폰 애플리케이션마켓 스마트폰이기존의휴대폰과다른점은사용자가무선으로애플리케이션을마켓에서다운로드하여서자신의스마트폰안에설치할수있다는점이다. 마켓을사용하게되면애플리케이션의업그레이드도매우쉽게이루어진다. 기존의데스크톱에서도인터넷에서애플리케이션을구입하여서다운로드하여설치할수있었지만개발자와사용자들이직접만나서거래하는장터 ( 마켓 ) 개념은아니었다. 애플에서처음으로개발자들과사용자들이만나서거래를할수있는애플리케이션마켓이라는새로운개념을창안하였다. 안드로이드도애플리케이션을거래할수있는마켓을지원한다. 안드로이드마켓은 구글플레이스토어 라는이름으로 https://play.google.com에위치하고있다. 그림 1.4 안드로이드마켓의개념 개발자 마켓 소비자 21

안드로이드프로그래밍 사용자들은 구글플레이스토어 를통하여많은애플리케이션들을다운로드할수있다. 이애플리케이션들은스마트폰의기능을확장하는역할을한다. 현재까지약 200,000개이상의안드로이드용애플리케이션이개발되었다. 물론애플리케이션들은안드로이드마켓이아닌써드파티사이트를통해서도다운로드가가능하다. 2. 안드로이드란? 안드로이드의역사 안드로이드의역사를간단하게살펴보자. 안드로이드가등장하기전까지는윈도우모바일이나심비안등의휴대폰운영체제가있었으나애플리케이션개발에는빈약한라이브러리, 잦은오류, 저성능등의많은문제점들이있었다. 구글은데스크톱에서의검색엔진이라는기존의한계를벗어나기위하여모바일시장으로의진입을엿본다. 구글의목표는오픈소스로작성되고개방된고성능의개발프레임워크였다. 2005년에구글은안드로이드주식회사를인수하게된다. 안드로이드주식회사는캘리포니아에있는작은벤처기업이었다. 안드로이드주식회사의설립자중의한명이었던앤디루빈등은인수된후에구글에서일하게된다. 구글에서앤드루빈이이끄는팀은리눅스커널에기반을둔모바일장치플랫폼을개발한다. 2007년 11월 5일에구글은삼성전자, 텍사스인스트루먼트, 모토로라등으로구성된 OHA(Open Handset Alliance) 라는컨소시엄을구성한다. 이컨소시엄은모바일장치를위한오픈표준을개발하려는목적을가지고있었다. OHA는설립과동시에첫번째작품인안드로이드 SDK 1.0 버전을발표하는데이것은리눅스커널버전 2.6 위에구축된모바일장치플랫폼이었다. 안드로이드플랫폼을탑재한최초의스마트폰은대만의 HTC가만들어서이동통신사 T_Mobile에납품한 G1이었다. 이어서우리가알다시피삼성전자의갤럭시 s를비롯하여수많은안드로이드폰들이출시되었다. 22

기초사항 01 CHAPTER 안드로이드라이선스 구글은안드로이드소스를아파치라이선스로공표한다. 아파치라이선스 (Apache License) 는 ASF(Apache Software Foundation) 에의하여기술된무료소프트웨어라이선스로저작권표시는요구하지만해당소스코드를가지고무료또는상업적인소프트웨어를개발할수있는라이선스를의미한다. 즉이것은스마트폰제조사들이안드로이드를탑재하는데라이선스비용을지불할필요가없음을의미한다. 또한개발자들은안드로이드를기반으로비공개파생물을만들수있으며이것을통하여이득을얻을수있다. 안드로이드버전 안드로이드는 1.0 버전이후에많은업데이트를거쳤다. 사실은너무많은업데이트가있어서제조업체의불만이기도하다. 이것은또한구글이최신의기술들을안드로이드로빠르게도입하고있음을의미한다. 안드로이드버전에붙여지는이름은알파벳문자로시작되는디저트의이름이다. 예를들어서버전 5.0 의롤리팝은막대사탕을의미한다. 간단하게최신버전의특징을 [ 표 1.2] 에서살펴보자. 이미지 버전 발표일 특징 SIP VoIP 전화기술지원 2.3 근거리 (Near Field Communication) 통신지원 2010.12.6 (Gingerbread) 복사-붙여넣기기능지원 자이로스코프센서지원 태블릿지원 3.0 2011.2.24 (Honeycomb) 4.0 (Icecream 2011.10.19 Sandwitch) 4.1 2012.6.27 (Jelly Bean) 멀티코어프로세서지원 구글 3D 지도서비스 태블릿최적화 UI 지원 2.3과 3.0의통합버전 얼굴인식언락 NFC를이용한데이터전송및공유 사진향상도구 오프라인이메일탐색 애플리케이션폴더 프로젝터버터로전체적인속도증가 지식그래프를이용한음성검색기능 구글나우 : 사용자에게맞춤형정보제공 알림기능강화 표 1.2 안드로이드버전 23

안드로이드프로그래밍 4.4 (KitKat) 5.1 (Lollipop) 2013.12 2015.2 Ok Google 이라고말하면구글나우서비스가실행됨 몰입모드지원 메모리사용최적화 터치스크린의반응속도와정밀도향상 크롬캐스트지원 운영체제최적화구현 머티어리얼디자인도입 ART 가상머신도입 64비트 CPU 지원 노티피케이션기능향상 안드로이드 TV 지원 3. 안드로이드의특징 안드로이드는어떤특징을가지는모바일운영체제일까? 여기서는일단간단하게살펴보고추후에자세히하나씩살펴보도록하자. 애플리케이션프레임워크 (Application framework) 컴포넌트의재사용과대체가가능하다. 달빅가상머신 (Dalvik virtual machine) 모바일장치에최적화되어있다. 내장된웹브라우저 (Integrated browser) 오프소스인 WebKit 엔진에토대를두고있다. 최적화된그래픽 (Optimized graphics) 2D 그래픽은자체 2D 라이브러리에의하여제공되고 3D 그래픽은 OpenGL ES 1.0, 2.0. 3.0 규격에기반을두고있다. SQLite 데이터베이스지원 각종오디오, 비디오규격지원 (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) 블루투스, EDGE, 3G, WiFi 지원 카메라, GPS, 나침판, 가속도계지원 풍부한개발환경제공에뮬레이터, 메모리와성능프로파일링, 안드로이드스튜디오제공 24

기초사항 01 CHAPTER 그림 1.5 안드로이드가제공하는기능들 ( 출처 : 안드로이드개발자페이지 ) 컴포넌트의재사용 애플리케이션은여러개의컴포넌트 (component) 로이루어진다. 안드로이드는컴포넌트의재사용을가능케하는애플리케이션프레임워크를가진다. 하나의애플리케이션은다른애플리케이션의컴포넌트를사용할수있다. 모바일장치에서컴포넌트의재사용이중요한이유는프로세서의처리속도가적절하거나메모리용량이충분하지않기때문이다. 애플리케이션 1 애플리케이션 2 Intent 방송수신자 액티비티 A Intent Intent 액티비티 C 액티비티 B Intent 콘텐츠제공자 SQLite 자바언어지원 안드로이드애플리케이션은자바로작성된다. 안드로이드개발자들은자바의 SE 버 25

안드로이드프로그래밍 전중에서 AWT와스윙 (swing) 을제외한거의모든패키지를사용할수있다. 안드로이드에서는자바를지원하기위하여자체적인가상머신을구현하였다. 자바의표준 JVM을사용하지않는이유는스마트폰이데스크톱에비하여처리속도와메모리측면에서한참뒤쳐지기때문이다. 모바일장치에서는모든것을최적화시키는것이중요하다. 이전버전의안드로이드에서는달빅 (Dalvik) 가상머신을사용하였으나 5.0 버전부터는새로운가상머신인 ART를사용한다. ART는 ahead-of-time(aot), justin-time(jit), 향상된가비지콜렉션, 향상된디버깅을지원한다. ART는 ARM, x86, MIPS 구조에서지원되며 64비트구조이다. 여기서한가지주의할점은안드로이드에서는자체가상머신을사용하므로일반적인자바의클래스파일에들어있는바이트코드는직접실행이불가능하다는점이다. 반드시바이트코드를 ART 실행파일형식으로변환하여야실행이가능하다. 선언적사용자인터페이스사용 안드로이드는사용자인터페이스를 XML을사용하여정의한다. 함수를호출하는기존의절차적인방법을사용하지않고 XML을이용하여서선언적으로정의하는것이다. 이방법은보다진 절차적 선언적 Swing이나 AWT와비슷하게 웹페이지의 HTML과비슷하게 자바코드를작성한다. XML 코드를작성한다. 보된방법으로여겨지고있으며마이크로소프트의실버라이트나 Sun의 JavaFX와유사하다. 컴퓨팅의역사에서사용자인터페이스작성기법은꾸준히발전되어왔다. 제일원시적인방법이 C언어로윈도우 API 함수들을호출하는방법이다. 이후로 C++ 언어로 MFC(Microsoft Foundation Classes) 라이브러리를사용하는방법이등장하였고자바언어의 Swing과같은라이브러리는이보다도진보된방법이라고한다. 안드로이드에서사용하는선언적인사용자인터페이스방법은 Swing보다도발전된것으로여겨진다. 안드로이드에서사용자인터페이스를작성하려면먼저 XML 파일을생성한다. 이 XML 파일안에화면을구성하는버튼이나텍스트와같은 GUI 요소들을엘리먼트로적어준다. 이방법은앞으로질리도록많이등장할것이다. 26

기초사항 01 CHAPTER 첨단기능제공 카메라, GPS, 나침판, 가속도계와같은각종첨단센서들을지원한다. 이러한센서들을이용하여서실감나는게임을제작할수있다. 라이브폴더, 위젯, 미디어녹음기능, 텍스트음성변환, 멀티터치, 제스처, 음성인식과같은첨단소프트웨어기술들을지원한다. 안드로이드폰에서음성검색을사용해본사용자라면상당한수준의음성인식이가능하다는것을느꼈을것이다. 멀티미디어에대한지원도상당하다. 2D 그래픽은자체제작한라이브러리를통하여최적화된그래픽을제공한다. 3D 그래픽은 OpenGL을간략화한 OpenGL ES 규격에토대를두고있다. 멀티미디어재생을위하여 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF 등의대부분의정지영상, 동영상, 오디오형식을지원한다. 여러가지방식의통신도지원하는데블루투스 (Bluetooth), 3G 통신망, WiFi 통신기능을지원한다. 웹브라우징을위하여오픈소스웹킷 (WebKit) 엔진에기반을둔통합브라우저를내장하고있다. 개방적이고풍부한개발환경을제공한다. 안드로이드의가장큰특징은개방성이다. 누구나가져다가사용할수있고무료로제공되지만기존의폐쇄적이고독점적인모바일플랫폼과비교해도손색없는성능과완벽함을제공한다. 안드로이드는오픈소스만을조립하여서만들었지만리눅스와같이시장에서오랜기간동안에검증된소프트웨어만을사용하였다. SQLite나 OpenGL ES와같은라이브러리도이미검증되어많이사용되고있는개방적인오픈 27

안드로이드프로그래밍 소스이다. java.net과같은자바언어의풍부한라이브러리도이미검증된오픈소스라간주할수있다. 따라서개발자들은견고한프레임워크위에서안전하게자신의애플리케이션을개발할수있다. 안드로이드는 SDK를통하여단말기에뮬레이터, 디버깅도구, 메모리및성능프로파일링도구들을기본으로제공한다. 특히안드로이드 SDK에포함된안드로이드스튜디오 (Android Studio) 를사용하여서보다쉽게애플리케이션개발이가능하다. 안드로이드는윈도우 XP 또는비스타, 윈도우 7, Mac OS X, 리눅스와같은다양한운영체제에서개발이가능하다. 강력한에뮬레이터가제공되기때문에개발자들은실제장치없이도상당한수준으로애플리케이션을개발하고테스트할수있다. 안드로이드에뮬레이터로테스트할수없는것은카메라, 비디오, 블루투스, USB 연결, 배터리와같은기능들뿐이다. 안드로이드에뮬레이터는 CPU 명령어수준에서에뮬레이션이가능하다. 스마트폰은보통 ARM 계열의 CPU를사용하므로에뮬레이터는 ARM 프로세서를시뮬레이션한후에이위에서안드로이드리눅스커널을실행시킨다. 따라서굉장히정확한에뮬레이션이가능하다. 클라우드컴퓨팅 안드로이드는클라우드컴퓨팅 (cloud computing) 을지원한다. 클라우드컴퓨팅은인터넷상의서버에여러가지자원 ( 프로그램, 데이터 ) 을저장하고, 필요할때마다자신의모바일장치를통하여사용하는컴퓨팅기법이다. 예를들면 MS 오피스와같 28

기초사항 01 CHAPTER 은프로그램을서버에설치해놓고웹브라우저를통하여원격으로사용하는것이클라우드컴퓨팅이다. 안드로이드에서도음성인식과같은기능은클라우드컴퓨팅을통하여지원된다. 또사진이나앱, 게임이메일, 연락처등을서버에저장하고필요하면언제든지불러서사용할수있다. 4. 안드로이드의구조 애플리케이션을개발하기전에미리알아두어야하는사항들을여기서학습하여본다. 안드로이드는단순히운영체제만을제공하는것은아니다. 안드로이드는운영체제, 미들웨어, 핵심애플리케이션을모두포함하는모바일플랫폼이라고할수있다. 구글에서는안드로이드를소프트웨어스택 (software stack) 이라고부른다. 즉소프트웨어를스택처럼쌓아두었다는의미이다. 다음그림은안드로이드운영체제의주요한요소들을나타낸다. 애플리케이션 그림 1.6 안드로이드의소프트웨어구조 애플리케이션프레임워크 라이브러리 안드로이드런타임 리눅스커널 29

안드로이드프로그래밍 리눅스커널 (linux kernel) 안드로이드는리눅스버전 2.6 을사용하여서보안, 메모리관리, 프로세스관리, 네트워크, 장치드라이버와같은시스템서비스를제공한다. 커널은하드웨어와나머지소프트웨어스택사이의추상화계층으로동작한다. 즉모바일장치의하드웨어가다르더라도상위계층에균일한환경을제공한다. 안드로이드런타임 (Android Runtime) 안드로이드런타임은애플리케이션을실행시키기위한최소한의환경을제공한다. 안드로이드런타임은자바의코어라이브러리와가상머신으로구성된다. 모든안드로이드애플리케이션은리눅스의하나의프로세스로실행되며, 각프로세스마다자신만의가상머신을가진다. 따라서여러개의가상머신이동시에실행될수있으므로가상머신은이를감안하여서효율적으로실행할수있도록설계되었다. 가상머신은레지스터기반이며, 자바컴파일러에의하여컴파일된클래스들을.dex 형식으로변환한후에실행한다. 라이브러리 (libraries) 안드로이드는다양한 C/C++ 라이브러리를포함하고있다. 개발자들은애플리케이션프레임워크를통하여이들라이브러리들을사용할수있다. 시스템 C 라이브러리 - BSD 기반의표준 C 시스템라이브러리 (libc) 를제공한다. 미디어라이브러리 - PacketVideo의 OpenCORE에기초한다. 인기있는오디오및 비디오형식의재생및녹음을지원한다. 구체적으로 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 등을지원한다. Surface manager - 디스플레이서브시스템을관리하고여러애플리케이션에서 나오는 2 차원과 3 차원그래픽레이어들을끊어짐없이합성한다. LibWebCore 웹브라우저를구현하는첨단의웹브라우저엔진 SGL - 기본 2D 그래픽엔진 3D 라이브러리 - OpenGL ES API 기반의라이브러리, 하드웨어 3D 가속을사용하 거나최적화된내장 3 차원소프트웨어래스터라이저를사용한다. FreeType - 비트맵과벡터글꼴렌더링을제공한다. SQLite - 강력하고가벼운관계형데이터베이스엔진 30

기초사항 01 CHAPTER 애플리케이션프레임워크 (application framework) 애플리케이션프레임워크에서는개발자들을위한 API(Application Programming Interface) 를제공한다. 즉개발자들은이프레임워크가제공하는기능을이용하여서자신들의애플리케이션을개발하게된다. 개발자는프레임워크를통하여하드웨어장치, 위치정보접근, 병렬처리기능, 알람설정기능, 상태표시줄알림등의기능을사용할수있다. 애플리케이션 (application) 안드로이드는전화, 메시지, 달력, 지도, 이메일, 브라우저, 전화번호부와같은핵심애플리케이션들을기본으로탑재하고있다. 모든애플리케이션은자바프로그래밍언어를사용하여개발된다. 안드로이드에서모든애플리케이션은동일한라이브러리를사용한다. 즉써드파티애플리케이션이라고해서차별받는것은아니다. 사용자한테실제로중요한것은바로애플리케이션이다. 아무리하드웨어적으로훌륭한스마트폰을만들었다고해도사용자를끌어들일수있는킬러애플리케이션이없으면스마트폰을대중들한테어필할수없다. 안드로이드는마켓을통하여많은애플리케이션들이유통될수있는환경을구축하고있다. 5. 애플리케이션의기초개념 애플리케이션을작성하는데필수적인개념들은여기서살펴보고지나가자. 만약이해가안된다고해도크게걱정할것은없다. 앞으로반복적으로등장하게된다. 안드로이드애플리케이션은자바언어로작성된다. 안드로이드 SDK 도구를이용하면자바코드를컴파일하고리소스와결합하여서안드로이드패키지 (Android package,.apk 확장자 ) 로만들수있다. 하나의.apk 파일안에있는모든코드는하나의애플리케이션으로간주된다..apk 파일은모바일장치로다운로드되어서애플리케이션으로설치된다. 애플리케이션은어떻게작성할까요? 31

안드로이드프로그래밍 일단장치에설치되면, 각안드로이드애플리케이션은다음과같은기법을사용하 여서자신의보안샌드박스 (sand box, 꼬마들이노는모래상자를말한다.) 안에서만 동작된다. 각애플리케이션은리눅스운영체제상에서서로다른사용자가된다. 운영체제는각애플리케이션에사용자아이디를부여하고애플리케이션에속하는파일은다른애플리케이션이접근할수없다. 각애플리케이션은자신의가상머신 (virtual machine) 위에서실행된다. 따라 서다른애플리케이션과는완벽하게분리되어서실행된다. 기본적으로, 각애플리케이션은자신의리눅스프로세스 (process) 안에서실행 된다. 안드로이드는애플리케이션의컴포넌트가실행되어야할때프로세스를실행한다. 그리고더이상필요하지않을때나시스템이메모리를확보해야할때는프로세스를종료한다. App1 가상머신 프로세스 (UID 10000) App2 가상머신 프로세스 (UID 10001) /data/.../...app1 /data/.../...app2 리눅스거널 위와같은방식으로안드로이드는 최소권한의원칙 (principle of least privilege) 을구현한다. 즉각애플리케이션은필요한작업을할수있을만큼의 32

기초사항 01 CHAPTER 권한만가진다는것이다. 이것은매우안전한환경을만든다. 각애플리케이션은권한이없는시스템기능에접근할수없다. 하지만하나의애플리케이션이다른애플리케이션들과데이터를공유해야하거나시스템서비스를사용해야한다면다음과같은방법이있다. 2개의애플리케이션이동일한리눅스사용자아이디를공유할수있다. 이경우에는다른애플리케이션의파일들에접근할수있다. 시스템자원을절약하기위하여같은아이디를가진애플리케이션들은동일한리눅스프로세스안에서실행되도록설정할수있다. 그리고가상머신도공유한다. 애플리케이션은장치데이터에접근할수있는권한을요청할수있다. 예를들면연락처, 문자메시지, SD 카드, 카메라, 블루투스등이다. 이들권한은사용자에의하여설치시에승인된다. 이번절에서는다음과같은안드로이드의핵심개념에대하여살펴본다. 애플리케이션을구성하는컴포넌트 애플리케이션에대한정보를표시하는매니페스트파일 애플리케이션과분리되어서리소스를정의하는방법 애플리케이션컴포넌트 먼저가장중요한개념은안드로이드애플리케이션은컴포넌트 (component) 들로구성된다는점이다. 컴포넌트는애플리케이션을만드는빌딩블록이며, 각컴포넌트들은하나의독립된엔티티로존재하고, 정해진역할을수행한다. 각컴포넌트는애플리케이션을시작하는진입점을가질수있다. 안드로이드에는다음과같은 4 가지의타입의컴포넌트가있다. 액티비티 서비스 방송수신자 콘텐트제공자 33

안드로이드프로그래밍 액티비티 액티비티 (activity) 는사용자인터페이스화면을가지며특정한작업을담당하는 컴포넌트이다. 액티비티 화면을통하여사용자를상대합니다. 액티비티 하나의애플리케이션은여러개의액티비티를가질수있다. 이메일애플리케이션을예로들어보자. 이메일애플리케이션은수신된이메일들의리스트를화면에표시하는액티비티를가질수있다. 또이메일을작성하는화면이또하나의액티비티가될수있다. 또다른액티비티에서는수신된이메일의내용을화면에표시할수있다. 이들액티비티를모두결합하면하나의이메일애플리케이션이된다. 액티비티는 Activity라는클래스를상속받아서작성된다. 그림 1.7 이메일애플리케이션은 3 개의액티비티로이루어진다. 액티비티 #1 수신된이메일리스트표시 액티비티 #2 이메일작성 액티비티 #3 수신된이메일내용표시 이메일애플리케이션 서비스 서비스 (service) 는백그라운드에서실행되는컴포넌트로오랫동안실행되는작업이나원격프로세스를위한작업을할때사용된다. 서비스는사용자인터페이스화면을가지지않는다. 예를들어서서비스는사용자가다른애플리케이션을실행하는 34

기초사항 01 CHAPTER 동안에배경음악을연주하는데사용된다. 또는사용자상호작용을방해하지않으면서네트워크를통하여데이터를꺼내올수도있다. 서비스는액티비티와같은다른컴포넌트에의하여시작된다. 모든서비스는 Service 클래스를상속받아서작성된다. 서비스를사용하는전형적인예를살펴보자. 음악을재생하는애플리케이션은사용자가곡을선택하는화면을가지고있다. 이화면은액티비티로구현된다. 그러나실제로음악을재생하는작업은액티비티에의하여처리되지않는다. 왜냐하면사용자가이화면을떠 서비스 나서다른작업을하더라도음악이계속재생되어야하기때문이다. 따라서음악재생액티비티는서비스를실행하고음악재생을서비스에위임한다. 배경에서장시간에걸친작업을수행합니다. 액티비티 #1 음악재생화면 서비스 #1 음악재생서비스 그림 1.8 미디어플레이어애플리케이션은 1 개의액티비티와 1 개의서비스로이루어진다. 미디어플레이어애플리케이션 방송수신자 방송수신자 (broadcast receiver) 도방송을받고반응하는컴포넌트이다. 많은방송들은시스템에서발생한다. 즉화면이꺼졌다거나배터리사용가능량의상태라든지, 사진이촬영되었다는것을알리기위하여방송을사용한다. 또애플리케이션도자기나름의방송을송출할수도있다. 예를들어서어떤데이터가다운로드되어서사용가능하게되었다는것을다른애플리케이션에알릴목적으로방송을사용할수있다. 방송수신자는 BroadcastReceiver 클래스를상속받아서작성된다. 방송수신자는일반적으로사용자인터페이스를가지지않는다. 방송수신자가수신된정보에반응하여서새로운액티비티를시작할수도있 다. 또사용자에게경고하기위하여통지매니저 (Notification Manager) 방송수신자 방송이나공지를수신합니다. 35

안드로이드프로그래밍 를사용할수도있다. 즉백라이트를점멸한다든지, 장치를진동시키거나, 사운드를재생할수있다. 또상태바에아이콘을통하여이벤트가발생하였다는것을알릴수있다. 콘텐트제공자 콘텐트제공자 (content provider) 는데이터를관리하고다른애플리케이션데이터를제공하는컴포넌트이다. 데이터는파일시스템이나 SQLite 데이터베이스, 웹상에저장될수도있다. 콘텐트제공자를통하여다른애플리케이션은데이터를쿼리하거나변경할수있다. 일반적인앱 데이터앱 액티비티 insert( ) update( ) delete( ) query( ) 콘텐트제공자 DB 예를들어서전화번호부애플리케이션에는많은사람들의이름과전화번호가데이 터베이스의형태로저장되어있고이데이터는콘텐트제공자를통하여다른애플리케이션에제공될수있다. 즉데이터를다른애플리케이션과공유할수있는것이다. 36

기초사항 01 CHAPTER 그림 1.9 전화번호부애플리케이션은 1 개의액티비티와 1 개의콘텐트제공자로이루어진다. 콘텐트제공자는 ContentProvider 클래스를상속받아서작성된다. 또다른애플 리케이션이데이터를받고저장할수있는메소드들을재정의하여서제공한다. 다른애플리케이션의컴포넌트를실행할수있다! 안드로이드애플리케이션은 PC에서실행되는프로그램과는상당히다르다. PC의프로그램은코드와데이터가합쳐져서하나의실행파일로되어있으며이실행파일이메모리에적재되어서실행된다. 그리고일반적으로 PC에서하나의프로그램은다른프로그램안에들어있는코드를사용할수없다. 즉각프로그램은서로독립적으로실행된다. 다른애플리케이션의코드를사용할수없다! 그림 1.10 PC 에서는다른애플리케이션이가지고있는코드를사용할수없다. 애플리케이션 A 애플리케이션 B 그러나안드로이드의애플리케이션은상당히다르다. 안드로이드에서는하나의애플리케이션이다른애플리케이션의컴포넌트들을이용할수있다는점이다. 물론다른애플리케이션의컴포넌트를이용하려면그애플리케이션의허가를받아야한다. 허가만얻을수있다면여러개의애플리케이션들이특정한컴포넌트를공유하여서사용하는것이가능하다. 이것은 CORBA나 COM처럼, 분산된소프트웨어컴포넌트들이동시에실행되면서하나의작업을함께하는개념과유사하다. 다만 CORBA나 37

안드로이드프로그래밍 COM 은분산환경이지만안드로이드는하나의모바일장치안에서작업이이루어진 다는점이다르다. 그림 1.11 안드로이드에서는다른애플리케이션이가지고있는컴포넌트를사용할수있다. 다른애플리케이션의컴포넌트사용가능 애플리케이션 A 애플리케이션 B 이것을예를들어서설명하여보자. 애플리케이션에서사용자가사진을촬영하도록하고싶다. 하지만이러한기능을제공하려면상당한코딩이필요하다. 이런경우에생각해보면분명히안드로이드안에는사진촬영기능을제공하는카메라애플리케이션이존재한다. 이런경우에는카메라애플리케이션에포함된사진촬영기능을사용하면된다. 물론이러한기능은컴포넌트형태로카메라애플리케이션에포함되어있지만이컴포넌트를우리의코드에포함할필요도없고링크할필요도없다. 단순히필요할때마다카메라애플리케이션의액티비티를시작하기만하면된다. 영상이캡처되면영상은우리의애플리케이션으로반환된다. 따라서이영상을우리의애플리케이션에서사용할수있다. 이것은상당히혁신적인개념으로스마트폰처럼자원이부족한환경에서는아주바람직하다. 이것이가능하려면어떤애플리케이션의컴포넌트를실행해달라고요청이들어왔을때그애플리케이션프로세스를시작할수있어야한다. 예를들어서우리의애플 38

기초사항 01 CHAPTER 리케이션이카메라애플리케이션에포함된액티비티를시작하였다면이액티비티는우리의애플리케이션프로세스안에서실행되는것이아니라카메라애플리케이션프로세스안에서실행되어야하기때문이다. 이런이유때문에 PC의애플리케이션과는다르게, 안드로이드애플리케이션은유일한실행진입점 (single entry point) 을갖지않는다 ( 즉 main( ) 함수가없다 ). 반면에안드로이드애플리케이션은내부에포함된컴포넌트들을통하여여러갈래로실행될수있다. 하지만우리가직접적으로다른애플리케이션의컴포넌트를실행할수있는것은아니다. 반드시안드로이드시스템에우리의의도가포함된메시지를보내서요청하여야한다. 요청이승인되면, 안드로이드시스템이우리가요청한컴포넌트를실행한다. 6. 인텐트 그러면애플리케이션은어떻게자신이원하는컴포넌트를안드로이드안에서찾아서실행할수있을까? 바로여기에사용되는것이인텐트 (intent) 라고불리는비동기적인메시지이다. 인텐트를번역한다면 의도 라고할수있다. 즉애플리케이션의의도를적어서안드로이드에전달하면안드로이드가가장적절한컴포넌트를찾아서활성화하고실행한다. 애플리케이션은어떻게자신이원하는컴포넌트를안드로이드안에서찾아서실행할까? 인텐트객체 ACTION:. DATA:. 그림 1.12 인텐트를통하여다른애플리케이션의컴포넌트를활성화시킬수있다. 애플리케이션 A 애플리케이션 B 39

안드로이드프로그래밍 인텐트는 Intent 클래스의객체로서컴포넌트가필요로하는요청내용을가지고있다. 액티비티와서비스의경우에는인텐트객체안에필요한액션의이름 ( view 또는 send ) 과사용할데이터의 URI를가지고있다. 예를들어서이미지를화면에표시하거나웹페이지를오픈하는요청을인텐트에기술할수있다. 어떤경우에는인텐트를통하여결과를반환받기도한다. 그림 1.13 인텐트를통하여다른애플리케이션의컴포넌트를활성화시킬수있다. 방송수신자의경우에는인텐트가방송되는공지사항을가지고있다. 예를들어서배터리사용가능량이얼마없으면 battery is low 라는문자열이인텐트안에액션으로저장된다. 4가지의컴포넌트종류중에서콘텐트제공자는약간다른접근방식을가지는데인텐트에의하여실행되지않고, 별도의객체인 ContentResolver를사용하여서실행된다. 콘텐트리졸버가콘텐트제공자와의모든트랜잭션을처리하기때문에우리는단순히콘텐트리졸버객체의메소드를호출하면된다. 이것은보안을위하여, 정보를제공하는콘텐트제공자와정보를요청하는컴포넌트사이에추상계층을하나더둔것이다. 각컴포넌트를활성화하는메소드들을나열하여보면다음과같다. 액티비티를시작하려면 startactivity( ) 나 startactivityforresult( ) 를호출 한다. 서비스를시작하려면 startservice( ) 나 bindservice( ) 를호출한다. 방송을시작하려면 sendbroadcast( ), sendorderedbroadcast( ), sendsticky Broadcast( ) 를호출한다. 콘텐트제공자에쿼리를보낼려면콘텐트리졸버의 query( ) 를호출한다. 40

기초사항 01 CHAPTER 7. 매니페스트파일 안드로이드가어떤컴포넌트를시작하려면먼저애플리케이션안에그컴포넌트가존재하는지를알아야한다. 애플리케이션안의모든컴포넌트들은매니페스트파일 (manifest file) 안에선언되어야한다. 매니페스트는 적재목록 이라고해석하면될것이다. 매니페스트파일은 XML로작성되어있으며모든애플리케이션에대하여 AndroidManifest.xml이란이름으로존재한다. 이패키지에포함된컴포넌트 액티비티 #1 콘텐트제공자. 그림 1.14 매니페스트파일은포함된컴포넌트들을나열한다. 매니페스트파일 매니페스트파일은컴포넌트를선언하는것이외에도다음과같은여러가지일을 한다. 인터넷접근과같이애플리케이션이요청하는권한을지정한다. 애플리케이션이필요한최소한의 API 레벨을선언한다. 애플리케이션이필요로하는하드웨어사양을선언한다 ( 예를들어서카메라, 블루투스, 멀티터치스크린 ). 그러나가장중요한작업은안드로이드에애플리케이션의컴포넌트에대하여알리는것이다. 예를들면매니페스트파일에서액티비티는다음과같이선언될수있다. 41

안드로이드프로그래밍 <?xml version="1.0" encoding="utf-8"?> <manifest... > <application android:icon="@drawable/ic_launcher"... > <activity android:name="kr.co.company.mainactivity" android:label="@string/app_name"... > </activity>... </application> </manifest> 액티비티정보기술 <application> 요소에서 icon 속성은애플리케이션의아이콘이저장된리소스파일을가리킨다. <activity> 요소의 name 속성은 Activity에서상속된클래스의이름이다. label 속성은액티비티가실행될때, 사용자에게표시되는텍스트이다. 다른컴포넌트들도유사한방식으로선언된다. <activity> 요소 : 액티비티선언 <service> 요소 : 서비스선언 <receiver> 요소 : 방송수신자 <provider> 요소 : 콘텐트제공자 매니페스트파일에선언되지않은액티비티, 서비스, 콘텐트제공자는시스템에서전혀알수가없다. 결과적으로실행할수없다. 참고사항 XML XML(Extensible Markup Language) 은 SGML의부분집합으로웹상에서구조화된텍스트형식의문서를전송하고수신하며처리가가능하도록만든마크업언어이다. 1996년 W3C에서제안되었으며, 기존의 HTML의한계를극복하는새로운방안으로각광을받고있다. HTML은문서의외관만정의할수있으며문서의내용에대해서는정의가불가능하다. 하지만 XML에는 HTML과는다르게사용자가용도에맞는새로운태그를정의하여서문서의내용에태그를붙일수있다. 최근 XML은어떤플랫폼에서나읽을수있는포맷을제공하기때문에인터넷상에서뿐만아니라많은영역에서개방된데이터베이스파일의역할을하고있다. 42

기초사항 01 CHAPTER XML 의용어 참고사항 xml 의용어를간단히살펴보자. 시작태그 요소 : 논리적인문서의요소 <?xml version="1.0" encoding="utf-8"?> <manifest... > <application android:icon="@drawable/ic_launcher"... > <activity android:name="kr.co.company.mainactivity" android:label="@string/app_name"... > </activity> 종료태그... </application> </manifest> 속성 : 이름과값의쌍이다. 8. 안드로이드개발준비사항 선수학습 안드로이드애플리케이션을개발하려면어떤선수학습이필요할까? 다음과같이정리할수있다. 프로그래밍기초지식과경험 ( 필수 ) 자바 (Java) 언어에대한상당한지식과경험 ( 필수 ) XML의이해경험이있으면좋지만없어도무방하다. 안드로이드스튜디오의사용법 안드로이드기능에대한이해 -개발하려면먼저사용해보아야한다. 파워유저 가되자. 필자가특히강조하고싶은것은자바언어를상당한수준으로알아야한다는점이다. 자바언어의클래스, 인터페이스, 객체생성등을이해하지못한다면코드를읽을수없고응용할수도없다. 예를들어서안드로이드에서의이벤트처리방법과자바에서의이벤트처리방법은아주유사하다. 따라서자바에서 GUI 프로그램을개발해보았다면안드로이드의 GUI 코드를쉽게이해할수있다. 하지만뭐든지너무 43

안드로이드프로그래밍 겁낼필요는전혀없다. 이책에서는난해한자바문법이나코드가등장하였을때, 최선을다하여추가적인설명을붙일것이다. XML과안드로이드스튜디오에대한지식은있으면좋지만없다해도예제를따라가다보면저절로체득할것이다. 그리고당연한말이지만안드로이드스마트폰을가능하면많이사용해보아야한다. NFC 기능을한번도사용해보지않은사람이이기능을이용해서애플리케이션을개발할수있을까? 첨단기능을억지로라도사용해보자. 개발하드웨어 안드로이드애플리케이션을개발하는데는어떤하드웨어가필요한가? 다음과같이정리할수있다. 데스크톱컴퓨터 성능이높으면좋다. 최신버전의안드로이드가설치된스마트폰 최신버전의안드로이드가설치된태블릿 ( 없어도무방하다 ) 안드로이드애플리케이션은 PC에서이클립스와같은도구를이용하여서개발되고컴파일되며 USB 케이블을통해실제장치에다운로드되어실행된다. 이렇게컴파일되는장치와실행되는장치가다른개발환경을이종개발환경 (cross development environment) 이라고한다. 애플리케이션이스마트폰에서직접개발되지못하는이유는무엇일까? 그이유는스마트폰의처리속도나메모리, 화면크기가예전에비해좋아졌다고는하지만아직도데스크톱에는미치치못하기때문이다. 따라서애플리케이션개발은그래픽이나마우스등을자유롭게사용할수있는데스크톱에서하고컴파일된코드를 USB 케이블을통하여실제장치로다운로드하여실행하고디버깅하는것은예전부터많이사용하고있는방법이다. 프린터나카메라, 휴대폰과같은임베디드시스템에내장되는코드를개발할때는이방법을사용해왔다. 44

기초사항 01 CHAPTER 애플리케이션이개발된다. 애플리케이션이실행된다. 그림 1.15 이종개발환경 USB 케이블 스마트폰 개발용 PC 에뮬레이터 실제장치가없어도에뮬레이터를이용하면애플리케이션의개발및실행이가능하다. 하지만 GPS와같이특수한하드웨어가필요한애플리케이션을실행할때는반드시실제장치가필요하다. 이책에서실제장치가필요할때는버전 4.4 가탑재된 LG G Pro를사용하였다. 참고사이트 안드로이드애플리케이션을개발하다보면책에는설명되지않은많은자료들이필요하다. 당연히제일중요한사이트는구글이만든안드로이드개발자사이트이다. http://developer.android.com/index.html Training이나 API Guides와같은자료들은반드시참고하여야하는중요한것들이다. 또한안드로이드는업그레이드가자주되고있으므로수시로여기에들러서어떤점이변경되었는지를확인하여야한다. 45

안드로이드 프로그래밍 또한 책에 설명되지 않은 API의 상세한 메소드도 여기서 확인할 수 있다. 패키지 와 클래스를 선택하면 클래스 안에 있는 각종 메소드에 대한 상세한 정보를 확인할 수 있다. 책의 부록 여러분들은 생능출판사의 홈페이지를 통하여 다음과 같은 것들을 다운로드받을 수 있다. 46

기초사항 01 CHAPTER 수정사항.pdf 파일 ( 버전업그레이드에따른변경사항수록 ) - 버전이업그레이 드되면이파일을다운로드받으면된다. 실습예제.pdf 파일 ( 추가실습예제와연습문제수록 ) sources.zip( 예제소스파일 ) 특히실습예제 pdf 파일에는크기문제로책에넣지못했던다양한실습예제들 이포함되어있다. 실습예제마다자세한작성절차가기술되어있다. 따라서꼭다운로드하여서실행해보기바란다. 실습문제들중의일부는다음과같다. 로그인화면작성하기 계산기앱만들기 #1 계산기앱만들기 #2 일정예약앱만들기 난수로배경색바꾸는앱만들기 액션바작성하기 랜덤한원그리기앱만들기 간단한그림판앱만들기 이미지뷰어작성하기 간단한포토삽앱만들기 스크롤이가능한리스트표시하기 게임시작화면작성하기 상품구매화면작성하기 간단한웹브라우저앱만들기 인터넷에서데이터다운로드앱만들기 인터넷에서이미지다운로드앱만들기 간단한다이어리앱만들기 게임점수데이터베이스에저장하는앱만들기 일정정보화면에표시하는앱만들기 웹페이지에서키워드찾아주는앱만들기 현재위치를중심으로지도표시하는앱만들기 간단한 MP3 플레이어앱만들기 배터리상태표시하는앱만들기 47