매우 높은 확률로 여러분이 지금 쓰고 있는 휴대폰은 갤럭시 혹은 아이폰일 것입니다. 그리고, 아이폰이 아니라면, 그 휴대폰은 안드로이드를 기반으로 작동하고 있을 것입니다. 안드로이드 앱 개발을 배우기에 앞서, 안드로이드의 간단한 구조와 안드로이드 앱이 어떻게 작동하는지 알아볼까요?

안드로이드 운영체제의 구조와

안드로이드는 구글에 의해 개발되고 유지되는 오픈 소스 운영체제입니다. 이는 모바일 기기, 특히 스마트폰과 태블릿에 사용되도록 최적화된 리눅스 기반의 운영체제입니다. 안드로이드 운영체제의 주요 구성은 다음과 같은 네 가지 주요 컴포넌트로 이루어져 있습니다:

  1. 리눅스 커널: 안드로이드의 핵심으로서, 모든 기본 시스템 서비스들을 제공합니다. 이에는 보안, 메모리 관리, 프로세스 관리, 네트워크 스택 등이 포함됩니다. 리눅스 커널은 하드웨어 추상화의 역할을 하며, 다양한 하드웨어에서도 안드로이드 시스템이 일관되게 작동하도록 합니다.
  2. 하드웨어 추상화 계층 (HAL): 이 계층은 특정 하드웨어 기능에 대한 인터페이스를 제공합니다. 개발자가 하드웨어에 종속적인 코드를 작성하지 않고도, 카메라, 블루투스 모듈, GPS 모듈 등을 제어할 수 있게 해줍니다.
  3. 안드로이드 런타임: 이전 버전에서는 Dalvik Virtual Machine (DVM)을 사용했으나, 안드로이드 5.0 (롤리팝)부터는 Android Runtime (ART)으로 대체되었습니다. ART는 AOT (Ahead-of-Time) 컴파일을 사용하여 애플리케이션의 실행 속도를 향상시키며, 가비지 컬렉션과 애플리케이션 성능을 최적화합니다.
  4. 애플리케이션 프레임워크: 이 계층은 개발자가 애플리케이션을 구축할 때 사용할 수 있는 API들을 제공합니다. 이 프레임워크를 통해 개발자는 알림, 창 관리, 배경에서의 작업 등 다양한 기능을 애플리케이션에 쉽게 통합할 수 있습니다.

안드로이드 버전과 API 레벨

안드로이드는 다양한 버전으로 출시되어 왔습니다. 각 버전은 특정 기능과 API 변경을 도입하여 개발자들이 더 풍부하고 강력한 애플리케이션을 만들 수 있도록 도와줍니다. 안드로이드 개발 시, 특정 버전의 API 레벨을 목표로 설정함으로써, 그 버전 이상의 모든 기기에서 앱이 작동하도록 할 수 있습니다. 다시 말해, 앱을 만들때 설정한 API 버전 이상의 휴대폰은 일반적인 경우 항상 앱이 작동합니다.

지금 안드로이드 휴대폰 있으세요? 휴대전화 정보에서 지금 쓰는 스마트폰이 어떤 버전인지 알 수 있습니다. 기종에 따라 약간씩 다르기는 하지만, 대개 다음과 같은 과정을 거쳐 스마트폰의 버전을 확인할 수 있습니다.

Untitled

Untitled

Untitled

버전에 따라 이런 이스터에그도 볼 수 있습니다! 안드로이드 버전 글자를 빠르게 연타해 보세요!

Untitled

자바, JVM, 및 코틀린

안드로이드 애플리케이션 개발 초기에는 주로 자바 언어가 사용되었습니다. 자바 애플리케이션은 JVM(Java Virtual Machine) 위에서 실행되지만, 안드로이드는 전통적인 JVM 대신, 자체적인 가상 머신인 Dalvik VM과 ART를 사용합니다. 이 가상 머신들은 모바일 환경에 최적화되어 있어, 리소스가 제한된 환경에서도 효율적으로 작동할 수 있도록 설계되었습니다.

최근에는 코틀린이 인기를 끌고 있습니다. 코틀린은 자바와 완벽하게 호환되면서, 보다 간결하고 표현력이 뛰어난 언어입니다. 코틀린은 안전한 변수 처리, 불변성, 확장 함수 등 현대 프로그래밍 패러다임을 지원하여 개발자가 보다 효율적이고 안정적인 코드를 작성할 수 있도록 돕습니다. 2017년 구글이 공식적으로 안드로이드 개발 언어로 코틀린을 지원하기 시작하면서, 이 언어는 안드로이드 앱 개발에서 중요한 위치를 차지하게 되었습니다. 이번 수업에서는 코틀린을 사용하여 안드로이드 앱을 개발할 것입니다.

젯팩 컴포즈

Untitled

젯팩 컴포즈는 안드로이드 앱 개발을 위한 현대적인 선언형 UI 툴킷입니다. 구글이 2021년에 정식으로 발표한 이 툴킷은 기존의 뷰 기반 UI 프레임워크를 대체하며, 코틀린을 사용하여 UI를 더 간결하고 직관적으로 구성할 수 있게 해줍니다.

선언형 UI