📌 안드로이드란?
- 스마트폰과 태블릿 컴퓨터에서 사용되는 오픈소스 운영체제
- 휴머노이드 로봇
- 플랫폼
- 태블릿, 휴대폰, 웨어러블 시계..기타 등등에서 사용되는 소프트웨어
📌 AOS vs iOS
기능적은 공통적음 존재하나, 호환되지 않는 별도의 운영체제
- 전화, 인터넷, 카메라 등 동일기능은 존재하나 호환되지 않는다.
동일한 기능의 앱이 있으나 디자인 시스템이 다르다.
Android - Material Design System
iOS - Human Interface Guidelines
📌 안드로이드 플랫폼 아키텍처
https://developer.android.com/topic/architecture?hl=ko
- 리눅스 커널
- 보안, 메모리관리, 프로세스관리, 파일 시스템 관리, 네트워크 스택 등 하드웨어 지원
- HAL
- Hardware Abstraction Layer
- 상위 수준의 자바 API 프레임워크에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공
- 여러 라이브러리 모듈로 구성되어 있으며, 카메라 또는 블루투스 모듈과 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 구현
- Native C/C++
- 안드로이드 프레임워크에서 필요한 C와 C++ 라이브러리 제공
- Android Runtime
- 코어 라이브러리 지원, Dalvik, ART VM으로 안드로이드 애플리케이션 실행환경 제공
- Java API Framework
- 안드로이드 어플리케이션 개발 시 필요한 API 제공
- System Apps
- 이메일, SMS, 달력, 지도, 브라우저 등의 코어 어플리케이션 제공
📌 컴포넌트
-
앱의 구성단위로 컴포넌트 여러개를 조합하여 하나의 앱을 만든다.
-
컴포넌트는 앱 내에서 독립적인 실행 단위이다.
- 일반 클래스와는 달리 생명주기를 안드로이드 시스템이 관리
- 독립적인 실행 단위라는 말은 직접 코드로 결합해서 실행하는 것이 아니라 컴포넌트 간에 intent라는 특정 클래스를 매개로 하여 결합하지 않은 상태로 실행하는 구조
- Main 함수 같은 애플리케이션의 집인지점이 따로 없다.
- 최초 시작인 경우 메인 화면이 보이게 된다.
- 알림을 눌러서 진입하면, 해당 알림이 원하는 화면이 보이게 된다.
🔑 컴포넌트 종류
- Activity
- Service
- Broadcast Receiver
- 이벤트로 수행되는 컴포넌트
- 배터리 부족, 시스템 부팅 완료 등의 이벤트 발생 시 작업이 있다면 이를 수신하는 컴포넌트
- Content Provider
- 어플리케이션 간의 데이터를 공유하기 위한 컴포넌트
📌 JVM
Java Virtual Machine
WORA : Write Once and Run Anywhere
📌 DVM
Dalvik Virtual Machine
초기 Android Runtime, 안드로이드 2.2 이후 JIT 컴파일러로 처음 적용되었다.
JIT : Just in time
자주 사용하는 부분에 대해 미리 컴파일하여 기계어로 해석해 놓기 때문에 실행 성능을 향상시킬 수 있고 실행시에 인터프리팅을 시작함.
📌 ART
Android Run Time
- AOT(Ahead On Time) 컴파일러 사용
- 설치 시점에 이미 컴파일을 완료하여 기계어로 해석을 끝냄
- 실행시에는 해석 과정이 없이 곧바로 기계어로 실행
- Android 5.0 이후 기본 런타임으로 지정
- Android 7.0 이후 AOT + JIT
🔑 DVM vs ART
DVM : JIT
- 앱 실행시 컴파일
- 설치시 컴파일을 하지 않아 설치 속도 빠름
- AOT에 비해 실행 속도는 느림
- 용량 작음
ART : AOT
- 앱 설치시 컴파일
- 설치 시 컴파일을 완료하기 때문에 JIT에 비해 설치 속도 느림
- 실행 시 컴파일을 하지 않기 때문에 JIT에 비해 실행 속도 빠름
- 용량 큼
안드로이드 개발은 자바 혹은 코틀린으로 하지만 대부분 코틀린으로 이전하는 추세이다.
📌 코틀린
- 코드가 간결하고 자바와 100% 호환된다.
- 인텔리제이 IDEA로 유명한 JetBrains에서 개발하고 보급했다.
- 문장 끝에 세미콜론은 옵션이다.
- 변수는 Nullable, NotNull로 나뉘며 ?를 붙여 Nullable로 만든다.
실제로 코틀린코드를 tools -> kotlin -> show kotlin in bytecode으로 보고 decompile하면 코틀린 코드가 .java코드로 만들어짐을 알 수 있다.
🔑 코틀린 장점
- 컴파일러가 타입을 검증하므로 오류 제어 수월
- Nullpointer Exception에서 보다 더 자유로움
- Null 가능한 형식과 불가능한 형식을 지원
- 함수형 프로그래밍과 객체 지향 프로그래밍 모두 가능