Android

강현성·2023년 2월 28일
0

android

목록 보기
12/18

1. 안드로이드

안드로이드는 리눅스 커널을 기반으로 구글에서 제작한 모바일 운영체제이다.

2. 안드로이드 운영체제 구조

리눅스 커널
안드로이드는 리눅스에 기반을 둔 오픈소스 소프트웨어이다.

하드웨어 추상화 레이어(HAL)
하드웨어 추상화 계층으로, 상위의 자바 API 프레임워크에서 하드웨어 기능을 이용할 수 있게 표준 인터페이스 제공한다.

안드로이드 런타임(ART)
안드로이드 앱을 실행하는 역할, 안드로이드 5.0 이전 버전에서는 Dalvik이 안드로이드 앱을 실행했지만 5.0 버전 부터는 ART로 앱을 실행한다. 안드로이드는 DEX 파일로 빌드되는데 이 DEX 파일을 해석해서 실행하는 주체가 ART, 자바에서는 개발자가 소스 코드를 작성한 후 컴파일하면 클래스 파일이 만들어지고 이 클래스 파일을 자바 가상 머신(JVM)에서 실행한다. 그런데 안드로이드는 자바 클래스를 런타임 때 그대로 실행하지 않고 DEX 파일로 컴파일한다. 그리고 DEX 파일을 해석하는 ART(andorid runtime)에서 실행한다. DEX 파일은 안드로이드 스튜디오에서 앱을 빌드할 때 자동으로 생성되므로 개발자가 직접 만들 필요는 없다.

네이티브 C/C++ 라이브러리
안드로이드 앱은 대부분 자바 프레임워크로 개발하지만 네이티브 C/C++ 라이브러리를 이용할 수도 있는데 이를 안드로이드 NDK(native development kit)라고 한다.

자바 API 프레임워크
앱을 개발할 때 사용하는 자바 API

3. 안드로이드 앱 개발 특징

컴포넌트 기반 개발

컴포넌트 == 애플리케이션 구성 요소

안드로이드 앱은 여러 컴포넌트로 구성되며 클래스로 컴포넌트를 개발한다. 안드로이드 앱은 여러 클래스로 구성되는데 크게 컴포넌트 클래스일반 클래스로 구분한다. 둘다 개발자가 만드는 클래스지만 런타임 때 생명주기를 누가 관리하는가에 따라 구분된다. 앱이 실행될 때 클래스의 객체 생성부터 소멸까지 생명주기 관리를 개발자가 코드에서 한다면 일반 클래스이다. 반면 개발자가 만들기는 했지만 생명주기를 안드로이드 시스템에서 관리한다면 컴포넌트 클래스이다.

안드로이드 컴포넌트 종류

  • 액티비티
    화면을 구성하는 컴포넌트이다. 앱이 실행되면 액티비티의 내용이 화면에 출력된다.

  • 서비스
    백그라운드 작업을 하는 컴포넌트이다. 화면 출력과 상관없이 백그라운드에서 실행해야 할 작업을 수행한다.

  • 콘텐츠 프로바이더
    앱들간의 데이터를 공유하는 컴포넌트이다. 하나의 앱이 자신의 데이터를 다른 앱에 공유하려면 콘텐츠 프로바이더를 만들어야 하며, 다음 앱에서는 그 콘텐츠 프로바이더를 이용해 데이터에 접근한다.

  • 브로드캐스트 리시버
    시스템 이벤트가 발생할 때 실행되게 하는 컴포넌트이다. 여기서 이벤트는 화면에서 사용자가 발생시키는 이벤트가 아니라 배터리 방전, 부팅등 시스템에서 발생하는 이벤트이다.

컴포넌트는 앱 안에서 독립된 실행 단위라는 특징이 있다. 독립된 실행 단위란 컴포넌트끼리 서로 종속되지 않아서 코드 결합이 발생하지 않는다는 의미이다. 예를 들어 FirstActivty와 SecondActivity가 있고 FirstActivity에서 SecondActivty로 화면을 전환해야 한다면 일반적으로는 FirstActivity에서 SecondActivity 객체를 생성해 실행하겠지만, 안드로이드에서는 이러한 방법은 불가능하다. 왜냐하면 컴포넌트의 생명주기를 안드로이드 시스템에서 관리하므로 코드에서 직접 컴포넌트 객체를 생성해 실행할 수 없기 때문이다. 화면 전환이 필요한 경우 Intent를 사용해 화면전환을 실행할 수 있다. 컴포넌트가 앱 내에서 독립해서 실행되는 특징 덕분에 앱의 실행 시점이 다양할 수 있는 장점이 있다.

리소스를 활용한 개발

안드로이드는 리소스를 이용해 개발을 한다. 리소스란 코드에서 정적인 값을 분리한 것이다. 앱에서 발생하는 데이터나 사용자 이벤트에 따른 동적인 값이 아니라 항상 똑같은 값이라면 굳이 코드에 담지 않고 분리해서 개발할 수 있다.

profile
Hello!

0개의 댓글