안드로이드 기본개념

이영준·2023년 3월 8일
0

📌 안드로이드란?

  • 스마트폰과 태블릿 컴퓨터에서 사용되는 오픈소스 운영체제
  • 휴머노이드 로봇
  • 플랫폼
  • 태블릿, 휴대폰, 웨어러블 시계..기타 등등에서 사용되는 소프트웨어

📌 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, 달력, 지도, 브라우저 등의 코어 어플리케이션 제공

📌 컴포넌트

  1. 앱의 구성단위로 컴포넌트 여러개를 조합하여 하나의 앱을 만든다.

  2. 컴포넌트는 앱 내에서 독립적인 실행 단위이다.

  • 일반 클래스와는 달리 생명주기를 안드로이드 시스템이 관리
  • 독립적인 실행 단위라는 말은 직접 코드로 결합해서 실행하는 것이 아니라 컴포넌트 간에 intent라는 특정 클래스를 매개로 하여 결합하지 않은 상태로 실행하는 구조
  1. Main 함수 같은 애플리케이션의 집인지점이 따로 없다.
  • 최초 시작인 경우 메인 화면이 보이게 된다.
  • 알림을 눌러서 진입하면, 해당 알림이 원하는 화면이 보이게 된다.

🔑 컴포넌트 종류

  • Activity
    • UI 구성하는 컴포넌트
  • Service
    • UI 없이 백그라운드에서 수행하는 컴포넌트
  • 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 가능한 형식과 불가능한 형식을 지원
  • 함수형 프로그래밍과 객체 지향 프로그래밍 모두 가능
profile
컴퓨터와 교육 그사이 어딘가

0개의 댓글