안드로이드 애플리케이션의 기본: 특징, 구조, 실행단계, 컴포넌트, 패키지 폴더

JIYOON·2021년 7월 11일
2

Android

목록 보기
1/9
post-thumbnail

📣 목표
안드로이드 애플리케이션의 특징과 기본 구조, 실행 방식, 구성 요소인 컴포넌트와 새 프로젝트 실행 시 생성되는 패키지 내 폴더에 대해서 알아보자!


1️⃣ 안드로이드의 특징

1) 재사용이 가능한 애플리케이션 프레임워크(Application Framework)의 일종이다.

프레임워크
프레임워크는 애플리케이션의 아키텍처를 제공하며 문제 해결에 필요한 설계 결정과 이에 필요한 기반 코드 모두를 포함하고 있다. 애플리케이션이 확장할 수 있도록 부분적으로 구현된 추상 클래스와 추가적인 작업 없이도 재사용 가능한 다양한 종류의 컴포넌트 라이브러리를 제공한다.
설계의 가변성을 미리 정의해 두었기 때문에 애플리케이션 설계자나 구현자는 애플리케이션에 종속된 부분에 대해서만 설계하면 되기에 간편하다는 장점이 있다.

라이브러리와 프레임워크
라이브러리와 프레임워크의 차이점 by 노마드 코더



2) 최적화된 달빅 가상 머신을 제공한다.

달빅
JIT 컴파일러를 사용하는 자바 가상 머신. Android 버전 5.0(API 레벨 21) 이전 버전에서 사용된다.

자바 가상 머신
일반적인 컴파일 언어는 CPU의 아키텍쳐와 플랫폼의 환경에 맞추어 기계어로 번역되며, 사람이 작성한 언어를 CPU가 알아 볼 수 있는 언어로 번역한다. 하지만 자바의 경우, 한가지 CPU의 아키텍쳐나 환경에 맞추는 것이 아닌 바이트코드라는 것으로 컴파일된다. 이를 실행하기 위해 자바 가상 머신이 필요하다. 자바 가상 머신인 JVM이 따로 존재하지만 라이선스 분쟁으로 구글에서는 Dalvik VM과 ART VM를 따로 개발해서 안드로이드에서 사용한다.

안드로이드 런타임(ART)
안드로이드 런타임이란 안드로이드 운영체제 아래에서 만들어진 자바 가상 머신으로, 프로세스 애플리케이션의 실행을 위한 것이다. 주로 AOT 컴파일, 가비지 콜렉션, 디버깅 등의 기능을 수행한다. Android 버전 5.0(API 레벨 21) 이상을 실행하는 기기에서 사용된다.

Ahead-of-time(AOT) 컴파일
AOT 컴파일이란 애플리케이션 설치 시 한번에 미리 컴파일하여 두었다가 프로그램 실행시 변환된 코드를 읽어들인다. 안드로이드 4.4에서 새로 배포된 기능으로, 기존의 달빅 가상머신에서 사용한 JIT 컴파일 방식과 비교된다.

Just In Time(JIT) 컴파일
최초 앱 실행시 자바코드가 일정부분 한꺼번에 변환, RAM 상에 올려두고 필요할 때마다 컴파일하면서 앱을 실행하는 컴파일 방식이다. 그러나 하드웨어의 부하가 발생하며 배터리 소모량이 높고 더 많은 RAM을 사용하는 문제점이 있다.

❗️ 추가공부 : JVM, DVM, ART 이해하기 by Charlezz



3) WebKit 기반의 내장된 웹 브라우저이다.

WebKit
애플에서 오픈소스로 개발하고 제공하는 웹 콘테트 및 웹 렌더링 엔진이다. 이 때의 웹 컨텐트는 웹 상에 존재하는 HTML, CSS, JavaScript 등으로 이뤄진 컨텐트를 의미한다. 렌더링이란 문서를 명시된 속성으로 출력장치에 배치하는 작업을 의미한다.



4) 각종 오디오 및 비디오, OpenGL, 블루투스, Wifi, 카메라, 나침반, GPS와 풍부한 개발 환경 제공 장치를 지원한다.





2️⃣ 안드로이드의 구조

안드로이드는 위와 같은 구조를 가진다.


01. Linux Kernel

Android 플랫폼의 기반은 Linux 커널이며, ART는 스레딩 및 하위 수준의 메모리 관리와 같은 기본 기능에 Linux 커널을 사용한다.


02. HAL(하드웨어 추상화 계층)

상위 수준의 Java API 프레임워크에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공한다. 예를 들어 카메라 또는 블루투스 모듈과 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 구현한다.
프레임워크 API가 기기 하드웨어에 액세스하기 위해 호출을 수행하면 Android 시스템이 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 로드한다.


03. Android Runtime

각 앱이 자체 프로세스 내에서 자체 ART(Android 런타임) 인스턴스로 실행된다. AOT(Ahead-Of-Time) 및 JIT(Just-In-Time) 컴파일, 가비지 컬렉션(GC), 디버깅 지원 등의 기능을 제공한다.


04. Native C/C++ Libraries

ART 및 HAL 등의 많은 핵심 Android 시스템 구성 요소와 서비스가 C 및 C++로 작성된 네이티브 라이브러리를 필요로 하는 네이티브 코드를 기반으로 빌드되어 있다.


05. Java API Framework

Android OS의 전체 기능 세트는 Java 언어로 작성된 API를 통해 액세스할 수 있다. 이러한 자바 API는 Android 앱을 제작하는 데 필요한 빌딩 블록을 구성한다.

빌딩 블록의 구성
1) 뷰 시스템 : 앱의 UI를 빌드하는 데 사용되는 뷰 시스템
2) Resource Manager : 그래픽과 레이아웃 파일 같은 코드가 아닌 리소스에 대한 액세스를 제공한다.
3) Notification Manager : 모든 애플리케이션이 상태 표시줄에 사용자 지정 알림을 표시할 수 있도록 지원한다.
4) Activity Manager : 앱의 수명 주기를 관리한다.
5) 콘텐츠 제공자 : 앱이 주소록 앱과 같은 다른 앱의 데이터에 액세스하거나 자신의 데이터를 공유할 수 있도록 지원한다.


06. System Apps

이메일, SMS 메시징, 캘린더, 인터넷 검색, 주소록 등 안드로이드와 함께 제공되는, 플랫폼에 기본적으로 포함된 주요 앱 세트이다.





3️⃣ 애플리케이션 실행 단계

1) java로 입력한 소스 코드를 javac가 컴파일해서 class 파일을 만든다. (class 파일은 JVM spec을 따른다.)
2) desugar 작업을 통해 class 파일을 dex화(DVM이 이해할 수 있는 포맷)시켜 .dex파일로 변환한다.
3) DVM이나 ART이 dex 파일을 실행한다.





4️⃣ 애플리케이션 컴포넌트

안드로이드 애플리케이션은 네 개의 컴포넌트로 이뤄진다.

컴포넌트
프로그래밍에서 재상용이 가능한 독립된 모듈, 최소 단위를 의미한다.


01. 액티비티(Activity)

화면에 표시되는 UI 구성을 위해 가장 기본이 되는 요소이며, 앱 실행 시 지정된 Activity를 실행하여 사용자에게 UI를 표시한다.


02. 서비스(Service)

백그라운드에서 오래 실행되는 작업을 수행할 수 있다. 예로 네트워크 트랜잭션을 처리하고, 음악을 재생하고 파일 I/O를 수행하거나 콘텐츠 제공자와 상호작용하는 백그라운드에서 실행되는 것들을 수행한다.

I/O
입력(Input)/출력(Output)의 약자


03. 방송 수신자(Broadcast Reciver)

단말기 안에서 이루어지는 다양한 일들을 알려준다. 예로 배터리 부족, SMS 문자 메시지, 수신 전화 등의 일을 방송 알림해주는 역할을 수행한다.


04. 컨텐트 제공자(Content Provider)

중앙 저장소로의 데이터 액세스를 관리한다. 예로 기기 내의 저장된 연락처에 액세스하는 것을 들 수 있다.





5️⃣ 안드로이드 패키지 폴더

안드로이드 새 프로젝트를 실행했을 때 기본적으로 생성되는 패키지 폴더의 구성은 다음과 같다.

01. java

자바 소스 파일들이 들어있는 폴더이다.

02. Gradle Scripts

빌드 시에 필요한 스크립트가 들어있다.

03. res

각종 리소스(자원)이 저장되는 폴더이다.

1) drawable : 아이콘, 이미지 파일을 저장한다.
2) layout : 화면 구성을 정의한다.
3) values : 문자열과 같은 리소스를 저장하여 프로젝트 내 자주 쓰이는 것들을 불러오는 데 용이하다.
4) menu : 메뉴 리소스를 저장한다.

04. manifest

xml파일로, 컴포넌트 구성과 같은 앱의 전반적인 정보를 지닌 파일이다.

( 이미지 출처 : coffee-mark )

위와 같은 과정을 통해 xml, res 파일이 R.java에 의해 참조돼서 Activity로 화면에 표시된다.



안드로이드 애플리케이션의 특징, 기본 구조, 실행 방식, 컴포넌트, 패키지 폴더에 대해서 알아보았다!
포스트를 작성하며 시간을 투자한 필자와 글을 읽어주신 분들에게...





✅ Reference

01.01 안드로이드 앱의 구성요소 for 안드로이드 프로그래밍 by 주니온TV 아무거나연구소
[모바일앱1] 02.01. 안드로이드 앱의 기본 구조 by 주니온TV 아무거나연구소
Framework - 1부 by Eternity
[Android] Dalvik , ART 란 ? by 개발하는 두더지
브라우저 엔진, 웹킷이란 무엇인가? by 주한길가치창조연구소
Android Developers 공식 문서

0개의 댓글