[Android] 안드로이드란 무엇인가?
참고문헌
DO it! 안드로이드 앱 프로그래밍 책
안드로이드를 공부하기 앞서, 안드로이드란 무엇인가? 라는 근본적인 질문부터 해보겠다.
책에 기술한것에 따르면, 안드로이드는 스마트폰의 대표적인 운영체제로 (점유율이 약 75%) 구글이 인수&개발하여 지금까지 수많은 버전의 업데이트로 꾸준히 사랑받는 오픈소스 운영체제이다.
안드로이드의 대표적언어는 Java와 Kotlin 이고, 자바의 JVM과 같은 역할을하는 자체개발한 가상머신인 ART(Android Runtime) 가있다.
킷캣버전 전까지는 달빅 virtual machine으로 실행환경을 제공했는데, RAM의 성능저하 문제로 새롭게 ART를 개발하여 지금까지 이용하고있다.
그렇다면 안드로이드의 기술적 정의는 무엇인가? 이점을 알기위해 developer에 들어가서 플랫폼아키텍쳐 를 참조했다.
(1-1)
먼저, 안드로이드를 정의한것을 보면 안드로이드는 Linux 기반의 오픈소스 소프트웨어 스택 이라고 정의하고있다. 그림을 먼저 보게되면, 가장 상단부터, System Apps 그하위에 Java API Framework 그하위에 Native c/c++ Libraries 와 Android Runtime 그하위에 HAL이있고, 그하위에 Linux Kernel이 위치하고있다.
가장먼저 스택구조이기 때문에, Linux 커널을 보자. 위 1-1 그림에서 볼수있듯이, Linux 커널에는 각 하드웨어들의 드라이버와 전원부분이 포함되어진다. 이부분은 운영체제 위에서 모든 하드웨어들과 프로세스를 연결해주는 인터페이스 인것이다.
그다음은 HAL (Hardware Abstration Layer) 이다. HAL은 API 처럼 사용하며, device들에 종속되지않는 프로그래밍을 가능하게 해준다. HAL이 OS에 필요한기능을 요청하면, OS가 그기능들을 모두 수행해주는 방식이다. 따라서 Device 하드웨어에 엑세스 하기위해서 HAL을 호출하면, Android 시스템이 해당 하드웨어의 구성요소에 대한 라이브러리 모듈을 로드해주게 된다.
그다음으로는 ART (Android RunTime)이다. 위에서 말했듯이, ART는 실행환경을 제공해주는 VM 이다. 달빅에서의 한계점(RAM성능저하 등등)을 보안하기위해 고안된것으로, 킷캣버전부터 적용되었다.
다음은 Native C/C++ 라이브러리다. 말그대로 C와 C++코드가 필요한 앱을 개발하는경우 엑세스 할수있도록 지원해주는 라이브러리인것같다.
그다음은 JAVA API Framework 이다. 내생각엔 이부분이 가장 중요한것같다. (나에게는) 실제 앱을 구현하는데 있어서, 결국 자바의 API의 Manger들의 엑세스를 이용해서 꽤나 필요한 기능들을 구현했었다. powermanager의 wakelock 이라던지,등등… 이 엑세스 권한들을 가지고 앱들에 필요한 기능들을 개발 및 구현할수 있을거같다.
마지막으로 시스템앱이다. 이 시스템앱은 만들어진 앱들을 호출해서 이용하는 것과같다. developer 에서 들은 예시로는 SMS 메세지를 보내기위해서는 실제 직접 빌드할 이유없이 SMS앱을 호출해서 메세지를 보낼수있다고 말하고있다. 즉, 우리가 앱을 구현할때 카메라기능이라던지 이런 시스템앱에대한 기능들이 필요로할때, 굳이 직접빌드할 필요없이 이 기능들에대한 접근권한 만을 받아서 사용하면 된다.
여기까지가 안드로이드가 무엇인가 에 관한 나의 구글링..(탐문) 이었다. 비록 아직까지는 재대로 무슨내용인지 깊게알지는 못하겟으나, 하드웨어적인 내용들에 대해서 더많이 공부할 필요가 잇을거같다. 실제로 나의 공부방향은 소프트웨어 이지만 기본적인 이런 하드웨어적 지식없이는 더 well-made 한 프로그램을 만들수 없을거같기 때문이다.
댓글남기기