웹/모바일 안드로이드 기초

1.1 안드로이드 소개

스마트폰과 안드로이드

스마트폰(Smartphone)

스마트폰은 전화 + 인터넷 + 동영상 + mp3 + 게임 등 다양한 기능을 하나의 이동형 기기에서 사용할 수 있도록 만들어진 정보통신 기기로 2007년 애플이 아이폰을 발표하면서 본격적으로 확대되기 시작해 오늘에 이르고 있습니다.

최초의 스마트폰은 1992년 발표된 IBM의 사이먼(Simon)이 있으며 1996년 당시 최고의 휴대폰 메이커인 노키아가 발표한 9000 시리즈가 있습니다. 이후 MS 의 Pocket PC가 등장해 PDA와 전화기가 결합한 형태로 까지 발전 했으나 널리 확대 되지는 못했고 비즈니스 영역에서는 블랙베리가 널리 사용되었습니다. 그러나 모두 무언가 획기적이고 범용적이지 못해 일반인들에게 까지 확대되지는 못했습니다.

[그림: 스마트폰 변천사]

애플이 2007년 아이폰을 발표하면서 탑재한 멀티 포인트 정전식 터치스크린, 전화, 인터넷, 응용프로그램 구동등은 당시로서는 매우 획기적이었으며 비싼 데이터 요금의 무선인터넷을 저렴하게 자유롭게 사용할 수 있도록 만든 장본인이라고 할 수 있습니다.

이후 구글도 2008년 안드로이드를 발표하면서 본격적으로 스마트폰 전성시대가 시작 되었습니다.

안드로이드(Android)

안드로이드는 현재 가장 대표적인 스마트폰 운영체제중 하나로 구글에서 만들었으며 거의 80%에 가까운 시장 점유율을 가지고 있습니다. 점유율은 조사 기관등에 따라 차이가 있으나 2019년의 경우 아이폰 점유율이 상당히 늘어난 통계들을 보여주고 있습니다.

[그림: 스마트폰 운영체제 점유율] , 출처: https://netmarketshare.com/

안드로이드 특징

안드로이드는 운영체제(OS: Operating System) 혹은 플랫폼(Platform)등으로 불리웁니다. 의미에 따라서는 같을수도 있고 다를수도 있습니다.

운영체제는 하드웨어를 사용자가 조작할 수 있도록 만들어주는 시스템 소프트웨어 입니다. 리눅스, 윈도우 등이 대표적이고 안드로이드의 경우 넓은 의미에서는 운영체제로 볼 수 있지만 좁은 의미에서 보면 커널이 리눅스 이므로 안드로이드 역시 리눅스 기반의 운영체제다 라고 이야기 할 수 있습니다.

안드로이드의 여러 구성요소를 포함하면 다양한 환경에 적용가능한 플랫폼이 됩니다. 예를 들어 안드로이드를 스마트폰이 아닌 다른 하드웨어나 시스템에서도 활용이 가능한것이지요. 이 경우 완전히 다른 분야의 하드웨어라도 동일한 안드로이드 사용자 경험과 플레이스토어, 앱 등을 공유할 수 있게 됩니다.

대표적인 안드로이드의 특징은 다음과 같습니다.

스마트폰 개발환경 비교

대표적인 스마트폰 운영체제의 개발환경 비교 입니다. 윈도폰의 경우 마이크로소프트에서 만들었지만 점차 시장에서 사라지는 추세이며 마이크로소프트는 안드로이드 관련 특허들을 통해 많은 라이센스 수입을 가져가고 있으며 최근에는 안드로이드 폰과의 연결성을 확대해 나가고 있습니다. 또한 개발의 경우에도 Xamarin 등을 통한 멀티 플랫폼 앱 개발쪽으로 방향을 잡은것 같습니다.

구분 아이폰 안드로이드 윈도폰
개발언어 Swift, Objective-C Java, Kotlin C#
개발OS Mac OS Windows, Linux, Mac OS Windows
개발도구 XCode Android Studio Visual Studio
최신버전 iOS 13 10.0(Q) Windows Phone 10
제조사/스토어 단일 제조사, 단일 앱스토어 다중 제조사, 다중 앱스토어 다중 제조사, 단일 앱스토어
[표: 스마트폰 개발환경 비교]

개발 관점에서 안드로이드의 장점은 윈도우, 맥, 리눅스 등에서 동일한 개발도구를 가지고 쉽게 개발할 수 있다는 점입니다. 또한 많은 제조사들의 하드웨어와 응용 시스템에서도 활용 가능하므로 개발 수요가 높고 적용 분야가 많다는 점을 들 수 있습니다.

반면 iOS 의 경우 맥 컴퓨터만을 사용해야 하며 Swift 라고 하는 새로운 언어와 XCode 라고 하는 개발도구를 사용해야 되기 때문에 진입장벽이 높은 단점이 있습니다. 그렇지만 단일 하드웨어로 인해 개발에 고려할 사항이 상대적으로 적은 편이며 지속적이고 체계적인 운영제제 업그레이드 정책으로 인해 대부분의 사용자들이 최신 운영체제를 적용하고 있다는 점은 장점으로 꼽을 수 있습니다.

또한, 아이폰 사용자들의 높은 앱 구매력으로 인해 개발앱의 유료 수익을 추구하는 경우 아이폰을 따라갈수 없습니다.



안드로이드 아키텍처

안드로이드 플랫폼은 운영체제 커널에서 부터 응용 프로그램 영역까지 레이어(Layer) 구조로 되어 있습니다.

[그림: 안드로이드 아키텍처] , 출처: https://developer.android.com/

1️⃣ Application Area

System App 은 홈화면, 주소록, 전화, 문자 등과 같이 기본적으로 제공되는 앱을 말합니다. 경우에 따라 눈에 보이지 않는 형태로 존재하기도 하며 스마트폰의 핵심 기능들을 User App 에 제공합니다.

User App은 사용자용 앱으로 개발자들이 만들고 플레이 스토어등을 통해 설치한 프로그램 입니다. 일반적으로 안드로이드 앱을 개발한다는 것은 User App 개발을 의미 합니다.

2️⃣ Java API Framework

User App 개발에 사용할 수 있는 자바 API 입니다. 즉 개발자가 구현할 수 있는 기능들은 Java API Framework 에서 제공되는 기능들로 한정 됩니다. 따라서 안드로이드 버전에 따라 지원되는 API가 다르므로 호환성 제공에 신경을 써야 합니다.

3️⃣ Native Library, Android runtime

기본적으로 스마트폰 하드웨어를 제어 하기 위해서는 C/C++로 된 프로그램들이 필요 합니다. 그러나 C/C++로 응용 프로그램을 개발하게 되면 스마트폰 제조사마다 서로 다른 하드웨어를 사용하기 때문에 프로그램들이 호환되지 않는 문제가 발생 합니다.

따라서 안드로이드는 가상머신을 사용하는 자바 언어로 응용프로그램을 개발하도록 설계 되었고 이는 서로 다른 하드웨어에서도 동일한 프로그램이 실행되도록 보장해 줍니다. 그러나 기본 자바 가상머신인 JVM을 사용하게 되면 라이센스 문제등이 있으므로 초기에는 Dalvik VM을 사용했으며 안드로이드 KitKat 이후에는 성능이 향상된 ART(Android runtime)를 사용하게 되었습니다.

Native Library 는 Android runtime 을 통해 실행되는 프로그램들이 안드로이드 하드웨어 장치들을 사용할 수 있도록해주는 C/C++ 라이브러리 입니다.

자바에서 C/C++ 라이브러리와 연동하기 위한 기술은 JNI(Java Native Interface)라고 하고 안드로이드는 NDK(Native Development Kit)을 통해 구현할 수 있습니다.

4️⃣ HAL: Hardware Abstraction Layer

하드웨어 추상화 영역 입니다. 서로 다른 안드로이드 스마트폰 제조사들의 하드웨어를 동일한 방식으로 접근할 수 있도록 제공되는 호환 인터페이스 레이어 입니다. 예를들면 카메라, 블루투스 등 공통 요소에 대한 연결을 보장합니다.

5️⃣ Linux Kernel

운영체제의 핵심영역으로 커널 이라고 합니다. 스레드, 전원관리, 보안, 디바이스 드라이버등 스마트폰을 기본적으로 구동하고 사용할 수 있도록 만들어주는 영역 입니다. PC 운영체제로도 유명한 Linux 를 사용하고 있으며 Mac OS, Linux, Android, iOS 등이 모두 유닉스(Unix) 기반의 운영체제 입니다.


실습 및 참고자료

이번장에서는 별도의 실습은 없습니다. 추가로 다음에 소개되는 자료들을 살펴보기 바랍니다.