0️⃣ 프롤로그
저는 안드로이드 앱 개발의 첫 시작은 ‘안드로이드가 무엇인가?’를 아는 것부터 시작해야 한다고 생각하는 사람 중 하나입니다. 하지만.. 저는 ‘안드로이드가 무엇인가?’ 보다는 안드로이드 앱을 만드려고 하는데 ‘텍스트 뷰는 어떻게 만드는가?’ 부터 공부했던 것 같습니다..
안드로이드 앱 개발을 시작한지 2년이 지나서야 ‘안드로이드가 무엇인가?’를 궁금해하는 이상 현상이 발생했지만 지금이라도 궁금증이 생기고 공부해보려는 의지가 생긴 것에 감사합니다^!^ 휴..
1️⃣ What is 안드로이드(Android)?
-
Android가 무엇일까?
-
Android는 휴대할 수 있는 디바이스 기기를 위한 오픈소스 소프트웨어 스택(Stack) 입니다. 여기서 ‘스택(Stack)’이라는 것은 컴퓨터공학에서 데이터를 저장할 수 있는 구조(자료구조)의 여러 종류 중 하나입니다. 자료 구조 ‘스택’에 비유하여 Android를 ‘오픈소스 소프트웨어 스택’이라고 부릅니다.
-
(위 그림 참고) ‘소프트웨어 스택’ 이라는 것에만 집중해봅시다. ‘스택’이라는 자료 구조의 모습처럼 무엇인가가 아래에서부터 위로 쌓여있는 모양에 비유했고, 쌓여있는 것이 바로 ‘소프트웨어’라는 의미입니다. 위 그림을 보면 가장 아래에 리눅스 커널(Linux Kernel) 라는 소프트웨어가 있고, 그 위에 HAL/HIDL 라는 소프트웨어가 쌓여있습니다. 또 그 위에는 Native Libraries 라는 소프트웨어가 쌓여 있고 Native Libraries와 같은 층에 Android Runtime 라는 소프트웨어가 쌓여있습니다. 그 위에 Android Framework 라는 소프트웨어가 쌓여있고 가장 최상단에는 Apps(안드로이드 앱) 이 쌓여있는 구조입니다. 이 구조를 통틀어 ‘소프트웨어 스택’이라고 하며 결국 이 구조가 ‘Android’인 것입니다.
-
위에서 Android는 오픈소스 소프트웨어 스택이라고 했습니다. 소프트웨어 스택이라는 것은 바로 위 설명을 통해 이해했을 것입니다. 그렇다면 ‘오픈소스 소프트웨어 스택’라는 것은 무엇일까요? 소프트웨어 스택이 비공개가 아니라 공개되어 있다는 것입니다. 즉, 누구나 Android를 구성하고 있는 각 소프트웨어(스택의 각 층에 존재)의 소스 코드를 볼 수 있다는 것입니다.
-
마지막으로 Android는 Google이 주도 하여 관리하고 개발하는 오픈소스 프로젝트이기도 합니다.
-
(위 그림 참고) 위에서 3차원 입체적인 모습으로 소프트웨어 스택을 보여준 그림을 2차원 평면으로 보면 위 그림과 같습니다. 아쉽지만 소프트웨어 스택의 각 층에 존재하는 소프트웨어(Apps, Android Framework, Native Libraries 등등)에 대해서는 이 포스팅에서 다루지 않을 예정입니다.
-
Android vs Android 플랫폼 vs Android 프레임워크 vs Android 운영체제 vs Android 시스템
-
‘Android’, ‘Android 플랫폼(Platform)’, ‘Android 프레임워크(Framework)’, ‘Android 운영체제(OS)’, ‘Android 시스템’ 이 5가지 용어가 혼동될 수 있습니다.
-
먼저 Android와 Android 플랫폼은 동일한 말 입니다. 위에서 Android는 휴대할 수 있는 디바이스 기기를 위한 오픈소스 소프트웨어 스택이라고 설명했지만 이는 ‘스택’이라는 단어를 사용하여 ‘무엇인가가 쌓여있는 구조’를 더 강조한 설명입니다. 따라서 Android를 스택이라는 단어를 사용하지 않고 설명할 때는 Android는 ‘오픈소스 소프트웨어 플랫폼’이라고도 합니다.
-
(위 그림 참고) 위 그림의 3차원 입체 모양을 보면 위에서부터 2번째에 Android Framework(안드로이드 프레임워크) 라는 것이 쌓여 있는 것을 볼 수 있습니다. Android Framework는 Java API Framework 라고도 부릅니다. Android Framework는 모든 안드로이드 앱(App)들이 사용하는 toolkit 입니다. 따라서 구글에서 만든 앱이든 나 자신이 만든 앱이든 모든 앱은 같은 Java API들(=Android Framework)을 사용하여 만들어집니다. 또한 이 Android Framework는 모두 Java로 구현되어 있습니다.
-
(위 그림 참고) ‘그래서 Android Framework가 정확히 뭔데?’라는 추가 질문이 있을 수 있습니다. 이에 답을 하기 위해 Android Framework에 속해 있는 Components(구성요소)들 중 ‘Activity Manager’라는 것에 대해 간단히 알아봅시다. ‘Activity Manager’는 앱의 수명 주기를 관리해주는 곳입니다. 즉, Activity Manager는 Activity를 생성해주고 상황에 맞게 Activity 수명 주기 콜백 메소드를 호출하여 Activity 수명 주기를 관리합니다.(개발자가 Activity의 모든 수명 주기 콜백 메소드를 ‘직접’ 호출해주지 않는 사실을 생각하면 쉽습니다. 개발자는 단지 수명 주기 콜백 메소드를 오버라이드하여 메소드 내에 작업을 추가해주는 것 뿐 입니다.) 또 ‘Activity Manager’는 ‘백 스택(backstack)’이라는 것을 관리하여 사용자가 여러 개의 서로 다른 앱(=프로세스)을 동시에 사용할 때도 자연스러운 사용 경험을 제공할 수 있도록 관리해줍니다.
-
(위 그림 참고) 여기를 보면 ActivityManager의 실제 코드 구현을 볼 수 있습니다.(Android는 오픈 소스 소프트웨어 플랫폼이기 때문입니다!) ActivityManager 클래스에 구현되어 있는 moveTaskToFront() 메소드는 ‘인자로 전달된 task ID에 해당하는 task를 stack의 가장 앞으로 이동시켜 사용자의 눈에 해당 task가 보이게 하라’는 메소드입니다. 이렇듯, ActivityManager에는 Activity를 관리하는데 사용되는 모든 것들이 구현되어 있습니다.
-
Activity Manager 외에도 Android Framework는 여러 Manager들로 구성되어 있습니다. 안드로이드 앱 개발자는 Android Framework가 제공하는 API들을 사용하여 사용법에 맞게 코드만 작성해주면 될 뿐입니다. 나머지 내부 동작들은 Android Framework의 몫입니다.
-
Android 운영체제 라는 말은 ‘Android’를 휴대할 수 있는 디바이스 기기(=모바일 디바이스)의 운영체제로 채택하여 사용하기 때문에 ‘Android 운영체제’라고 부르기도 합니다. 즉, Android를 운영체제라고 하는 것은 Android 플랫폼을 모바일 기기의 운영체제로 사용한다는 의미입니다.
- 운영체제 : 이 블로그의 다른 포스팅 - 운영체제가 무엇인가를 보면 알 수 있듯이, 운영체제는 컴퓨터에서 하드웨어 자원(CPU, 메인 메모리 등)를 제어 및 관리하고, 사용자가 컴퓨터를 쉽게 사용할 수 있도록 편의성을 제공해주는 것입니다.
-
Android 시스템 이라는 말은 Android 운영체제와 동일한 말입니다. 운영체제를 영어로 ‘Operating System’ 이라고 하기 때문에 ‘Operating’을 빼고 Android 시스템이라고 부르기도 합니다.
-
끝!
마지막 수정일 : 2021년 3월 18일