2011년 10월 20일 목요일

안드로이드? 안드로이드!

안드로이드(Android)

 안드로이드는 OHA(Open Handset Alliance)에서 만든 모바일 운영체제이다.

 2005년 7월, 구글은 미국 캘리포니아주의 팔로알토에 기반을 둔 작은 안드로이드 사를 인수하였다.
 그 후 구글은 2007년 11월 안드로이드의 처음 버전을 발표하였고, 텍사스 인스트루먼트, 브로드컴 코퍼레이션 HTC, 인텔, LG, 마벨 테크놀로지, 모토로라, 엔비디아, 퀄컴, 삼성전자, 스프린트 넥스텔, T모바일 등의 회사로 구성된 OHA가 모바일 기기의 공개 표준을 개발하는 것을 목표로 결성되었다
 이렇듯 OHA는 개방된 모바일 환경을 위한 하드웨어, 소프트웨어 업체의 공동 연합으로서 실질적인 리더는 인터넷 검색 업체인 구글이다. .

 이러한 안드로이드의 탄생의 근본적인 목적모바일 환경에서 인터넷을 더 많이 보급 시키기 위함이다.

안드로이드의 급격한 성장
안드로이드는 짧은 시간에 급격한 성장을 보이면서 모바일 운영체제의 점유율을 크게 끌어올렸다. 아래의 그래프는 2009년 1분기와 2010년 1분기의 차이를 보여주는 예이다.
2011년은 1, 2분기의 내용이다.







안드로이드의 특징

1. 운영체제의 핵심이라 할 수 있는 커널이 리눅스(Linux)에 기반한다. 리눅스는 안드로이드와 마찬가지로 개방된 운영체제이다.

2. 공식적으로 자바 언어를 사용한다.

3. 검증된 많은 라이브러리가 존재한다.

4. 내장된 빌트인 프로그램과 사용자가 만든 프로그램이 동일한 API를 이용하므로 기본 제공되는 프로그램을 사용자가 마음껏 교체 가능하다.

5. 개방된 환경으로 인해서 개발에 필요한 것들이 모두 무료로 제공된다.

안드로이드의 아키텍처

안드로이드의 아키텍처는 대부분의 운영체제가 선택하는  Layered 아키텍처이다.





리눅스 커널(Linux Kernel)
 백그라운드의 작업들, 메모리 관리, 드라이버 관리 등 낮은 수준의 일을 담당한다. 보통 커널이 하게 되는 일을 담당한다고 생각하자. 왜 리눅스인가...안드로이드가 리눅스를 채택한 이유가 바로 디바이스 드라이버가 광범위하게 지원되기 때문이다.

라이브러리 + 런타임(Library + Runtime)
 응용프로그램이 공통적으로 사용하게 되는 시스템 라이브러리가 존재하는데 이는 C언어로 작성이 되어있다. "아니..위에서 공식적으로 자바를 사용한다면서?" 라고 의문이 들 수도 있다. 하지만 라이브러리는 운영체제의 속도를 좌우하는 중요한 요소이기 때문에 자바보다 더 빠른 동작을 할 수 있는 C언어로 작성이 되어있다.
 런타임은 달빅 가상 머신(Dalvik virtual machine)과 자바 코어 라이브러리로 구성돼 있다. 달빅 가상 머신은 자바 가상 머신을 직접 사용하지 않고 모바일에 최적화된 가상 머신을 만들어 사용하고 있다.

프레임워크(Framework)
 안드로이드의 API이다. 응용프로그램은 반드시 이곳을 거쳐서 하위의 단계에 접근할 수 있다. 이곳에서는 응용프로그램에 요청에 따라서 여러가지를 제공해 준다. 액티비티 관리자, 윈도우 관리자, 뷰 시스템 등이 프레임워크에 속한다.

응용프로그램(Application)
 개발자가 만들어야 할 대상이다.


안드로이드 어플리케이션(application, 응용프로그램)의 구성요소

 안드로이드 어플리케이션은 4가지의 구성요소를 가진다. 이 4가지 구성 요소 중 가장 처음 생성되는 인스턴스의 생성자가 어플리케이션의 진입점이 된다.



1. 액티비티(Activity): 사용자 인터페이스를 구성하는 기본 단위이다. 윈도우와 비슷하지만 그것 보다는 더 큰 개념으로 화면 전체를 액티비티라고 생각하면 될 것이다.

2. 서비스(Service): 눈에 보이지 않아도 백그라운드에서 계속해서 실행되는 요소이다.

3. 방송 수신자(Broadcast Receiver): 다른 곳에서 보내는 신호를 수신하는 역할을 한다. Broadcast는 우리나라 말로 방송이지만 컴퓨터에서는 신호를 널리 퍼트리는 개념으로 많이 사용한다.

4. 콘텐트 제공자(Content Provider): 다른 응용프로그램에게 자신의 자료를 줄 수 있는 유일한 구성요소이다. 자바가 캡슐화를 하듯이 안드로이드도 대부분을 숨기고 오직 이 곳만 밖으로 내놓는다.

그리고 이 구성요소들을 연결하는 인텐트(Intent)가 존재한다. 인텐드는 구성요소들의 통신을 담당하는 수단이다.

이런 취지로 작성된 안드로이드를 이용한 최초의 상용 안드로이드 폰은 2008년 10월 출시된 HTC의 G1이다.