본문 바로가기

Wanna be a Programmer/Android

안드로이드의 개요


특징


- 운영체제의 핵심이라고 할 수 있는 커널은 공개 운영체제인 리눅스에 기반 한다.

- 공식적으로 Java 언어를 사용한다. 최근에는 C로 개발할 수 있는 NDK도 발표되었지만 아직 일반적이지 않다.

- 검증된 많은 라이브러리들을 대거 포함하고 있어 웬만한 기능은 별도의 외부 라이브러리를 사용할 필요가 없다.

- 플랫폼에 내장된 빌트인 프로그램과 사용자가 만든 프로그램이 동일한 API를 사용하므로 모든 프로그램은 평등하다.

- 개방된 환경인 만큼 개발 툴과 관련 문서들이 모두 무료로 제공된다.



아키텍쳐

– 제일 하위에는 운영체제의 핵심에 해당하는 리눅스 커널 있다.

– 안드로이드가 리눅스를 채용한 주된 이유는 공개 운영체제라는 이유도 있지만 무엇보다 디바이스 드라이버의 지원이 광범위하기 때문이다.

– 자바 가상 머신 JVM을 직접 사용하지 않으며 모바일 환경에 최적화한 달빅(Dalvik) 가상 머신 사용한다.

- 달빅은 안드로이드 전용의 가상 머신으로 자바 클래스를 바로 실행할 수는 없으며 클래스 파일을 dex포맷(Java의 Class와 다른 byte code)으로 변환해야만 실행이 가능하다.

- 라이브러리와 런타임 위에는 프레임워크가 있는데 이것이 바로 안드로이드의 API이다.

- 응용프로그램은 프레임워크를 통해 하위의 커널이나 시스템 라이브러리를 사용한다.



4가지 구성요소


- 액티비티 : 사용자 인터페이스를 구성하는 기본 단위로, 화면 기반으로 동작하고 사용자와 상호작용

- 서비스 : UI가 없어 사용자 눈에 직접으로 보이지 않는 백그라운드에서 실행되는 컴포넌트이다. 예로 미디어 플레이어를 들 수 있는데 비활성화 상태에서도 노래는 계속 재생되어야하기 때문이다.

- 방송 수신자(Broadcast Receiver) : 시스템으로부터 전달되는 방송을 대기하고 있다가 신호 전달 시 수신하는 역할을 한다.

- 콘텐트 제공자(Content Provider) : 다른 응용 프로그램을 위해 자신의 데이터를 제공한다. 전형적인 예로 데이터베이스를 들 수 있으며, 주소록도 콘텐트 제공자로 제공된다.


※ 4가지 컴포넌트들은 서로 독립적으로 동작하므로 상호간의 통신을 위한 장치가 필요한데 이 역할은 인텐트(Intent)가 담당한다. 인텐트는 컴포넌트간의 통신 수단이며 메시지에 대한 상세한 정보를 가진다.